Mercurial > hg > graal-compiler
changeset 22402:abb42ea1f4eb
Backout 565196752144
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Mon Aug 03 09:35:55 2015 -0700 @@ -38,7 +38,6 @@ import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.phases.util.*; import com.oracle.graal.replacements.amd64.*; @@ -77,7 +76,7 @@ try (InitTimer rt = timer("create Lowerer provider")) { lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); } - HotSpotStampProvider stampProvider = new HotSpotStampProvider(target.wordKind); + HotSpotStampProvider stampProvider = new HotSpotStampProvider(); Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null, stampProvider); try (InitTimer rt = timer("create SnippetReflection provider")) { @@ -87,7 +86,7 @@ replacements = createReplacements(runtime, p, snippetReflection); } try (InitTimer rt = timer("create WordTypes")) { - wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind, stampProvider.createHubStamp(false), MethodPointerStamp.method()); + wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind); } try (InitTimer rt = timer("create GraphBuilderPhase plugins")) { plugins = createGraphBuilderPlugins(runtime, target, constantReflection, foreignCalls, metaAccess, snippetReflection, replacements, wordTypes, stampProvider); @@ -168,15 +167,15 @@ } else { /* * System V Application Binary Interface, AMD64 Architecture Processor Supplement - * + * * Draft Version 0.96 - * + * * http://www.uclibc.org/docs/psABI-x86_64.pdf - * + * * 3.2.1 - * + * * ... - * + * * This subsection discusses usage of each register. Registers %rbp, %rbx and %r12 * through %r15 "belong" to the calling function and the called function is required to * preserve their values. In other words, a called function must preserve these
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Mon Aug 03 09:35:55 2015 -0700 @@ -35,7 +35,6 @@ import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.java.*; import com.oracle.graal.nodes.spi.*; @@ -57,11 +56,11 @@ Value[] nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); HotSpotForeignCallsProvider foreignCalls = new SPARCHotSpotForeignCallsProvider(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); LoweringProvider lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); - HotSpotStampProvider stampProvider = new HotSpotStampProvider(codeCache.getTarget().wordKind); + HotSpotStampProvider stampProvider = new HotSpotStampProvider(); Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null, stampProvider); HotSpotSnippetReflectionProvider snippetReflection = new HotSpotSnippetReflectionProvider(runtime); HotSpotReplacementsImpl replacements = new HotSpotReplacementsImpl(p, snippetReflection, runtime.getConfig(), target); - HotSpotWordTypes wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind, stampProvider.createHubStamp(false), MethodPointerStamp.method()); + HotSpotWordTypes wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind); Plugins plugins = createGraphBuilderPlugins(runtime, metaAccess, constantReflection, foreignCalls, stampProvider, snippetReflection, replacements, wordTypes); replacements.setGraphBuilderPlugins(plugins); HotSpotSuitesProvider suites = createSuites(runtime, plugins, codeCache);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Mon Aug 03 09:35:55 2015 -0700 @@ -333,13 +333,13 @@ } @Override - protected ValueNode createReadArrayComponentHub(StructuredGraph graph, ValueNode arrayHub, FixedNode anchor, LoweringTool tool) { + protected ValueNode createReadArrayComponentHub(StructuredGraph graph, ValueNode arrayHub, FixedNode anchor) { /* * Anchor the read of the element klass to the cfg, because it is only valid when arrayClass * is an object class, which might not be the case in other parts of the compiled method. */ AddressNode address = createOffsetAddress(graph, arrayHub, runtime.getConfig().arrayClassElementOffset); - return graph.unique(new FloatingReadNode(address, OBJ_ARRAY_KLASS_ELEMENT_KLASS_LOCATION, null, tool.getStampProvider().createHubStamp(true), AbstractBeginNode.prevBegin(anchor))); + return graph.unique(new FloatingReadNode(address, OBJ_ARRAY_KLASS_ELEMENT_KLASS_LOCATION, null, KlassPointerStamp.klassNonNull(), AbstractBeginNode.prevBegin(anchor))); } @Override @@ -461,8 +461,8 @@ } private boolean addReadBarrier(UnsafeLoadNode load) { - if (runtime.getConfig().useG1GC && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getStackKind() == Kind.Object && load.accessKind() == Kind.Object && - !StampTool.isPointerAlwaysNull(load.object())) { + if (runtime.getConfig().useG1GC && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getStackKind() == Kind.Object && + load.accessKind() == Kind.Object && !StampTool.isPointerAlwaysNull(load.object())) { ResolvedJavaType type = StampTool.typeOrNull(load.object()); if (type != null && !type.isArray()) { return true; @@ -493,7 +493,7 @@ HotSpotVMConfig config = runtime.getConfig(); assert !object.isConstant() || object.isNullConstant(); - KlassPointerStamp hubStamp = (KlassPointerStamp) tool.getStampProvider().createHubStamp(true); + KlassPointerStamp hubStamp = KlassPointerStamp.klassNonNull(); if (config.useCompressedClassPointers) { hubStamp = hubStamp.compressed(config.getKlassEncoding()); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotProviders.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotProviders.java Mon Aug 03 09:35:55 2015 -0700 @@ -47,7 +47,7 @@ public HotSpotProviders(MetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, ConstantReflectionProvider constantReflection, HotSpotForeignCallsProvider foreignCalls, LoweringProvider lowerer, Replacements replacements, SuitesProvider suites, HotSpotRegistersProvider registers, SnippetReflectionProvider snippetReflection, HotSpotWordTypes wordTypes, Plugins graphBuilderPlugins) { - super(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, new HotSpotStampProvider(codeCache.getTarget().wordKind)); + super(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, new HotSpotStampProvider()); this.suites = suites; this.registers = registers; this.snippetReflection = snippetReflection;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotStampProvider.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotStampProvider.java Mon Aug 03 09:35:55 2015 -0700 @@ -22,43 +22,17 @@ */ package com.oracle.graal.hotspot.meta; -import jdk.internal.jvmci.meta.*; - import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.nodes.spi.*; public class HotSpotStampProvider implements StampProvider { - private final KlassPointerStamp klassStamp; - - private final KlassPointerStamp klassNonNullStamp; - - @SuppressWarnings("unused") private final Kind wordKind; - - public HotSpotStampProvider(Kind wordKind) { - this.wordKind = wordKind; - klassStamp = new KlassPointerStamp(false, false, wordKind); - klassNonNullStamp = new KlassPointerStamp(true, false, wordKind); - } - - public KlassPointerStamp klass() { - return klassStamp; - } - - public KlassPointerStamp klassNonNull() { - return klassNonNullStamp; - } - public Stamp createHubStamp(ObjectStamp object) { - return klassNonNull(); + return KlassPointerStamp.klassNonNull(); } public Stamp createMethodStamp() { return MethodPointerStamp.methodNonNull(); } - - public Stamp createHubStamp(boolean nonNull) { - return nonNull ? klassNonNullStamp : klassStamp; - } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotWordOperationPlugin.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotWordOperationPlugin.java Mon Aug 03 09:35:55 2015 -0700 @@ -43,21 +43,17 @@ import com.oracle.graal.nodes.memory.address.*; import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.*; +import com.oracle.graal.word.*; /** * Extends {@link WordOperationPlugin} to handle {@linkplain HotSpotOperation HotSpot word * operations}. */ class HotSpotWordOperationPlugin extends WordOperationPlugin { - - public HotSpotWordOperationPlugin(SnippetReflectionProvider snippetReflection, HotSpotWordTypes wordTypes) { + public HotSpotWordOperationPlugin(SnippetReflectionProvider snippetReflection, WordTypes wordTypes) { super(snippetReflection, wordTypes); } - HotSpotWordTypes wordTypes() { - return (HotSpotWordTypes) wordTypes; - } - @Override protected LoadIndexedNode createLoadIndexedNode(ValueNode array, ValueNode index) { ResolvedJavaType arrayType = StampTool.typeOrNull(array); @@ -119,17 +115,17 @@ case TO_KLASS_POINTER: assert args.length == 1; - b.addPush(returnKind, new PointerCastNode(wordTypes().getKlassPointerStamp(), args[0])); + b.addPush(returnKind, new PointerCastNode(KlassPointerStamp.klass(), args[0])); break; case TO_METHOD_POINTER: assert args.length == 1; - b.addPush(returnKind, new PointerCastNode(wordTypes().getMethodPointerStamp(), args[0])); + b.addPush(returnKind, new PointerCastNode(MethodPointerStamp.method(), args[0])); break; case READ_KLASS_POINTER: assert args.length == 2 || args.length == 3; - Stamp readStamp = wordTypes().getKlassPointerStamp(); + Stamp readStamp = KlassPointerStamp.klass(); AddressNode address = makeAddress(b, args[0], args[1]); LocationIdentity location; if (args.length == 2) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java Mon Aug 03 09:35:55 2015 -0700 @@ -33,23 +33,34 @@ public final class KlassPointerStamp extends MetaspacePointerStamp { + private static final KlassPointerStamp KLASS = new KlassPointerStamp(false, false); + + private static final KlassPointerStamp KLASS_NON_NULL = new KlassPointerStamp(true, false); + + private static final KlassPointerStamp KLASS_ALWAYS_NULL = new KlassPointerStamp(false, true); + private final CompressEncoding encoding; - private final Kind kind; + public static KlassPointerStamp klass() { + return KLASS; + } - public KlassPointerStamp(boolean nonNull, boolean alwaysNull, Kind kind) { - this(nonNull, alwaysNull, null, kind); + public static KlassPointerStamp klassNonNull() { + return KLASS_NON_NULL; } - private KlassPointerStamp(boolean nonNull, boolean alwaysNull, CompressEncoding encoding, Kind kind) { + private KlassPointerStamp(boolean nonNull, boolean alwaysNull) { + this(nonNull, alwaysNull, null); + } + + private KlassPointerStamp(boolean nonNull, boolean alwaysNull, CompressEncoding encoding) { super(nonNull, alwaysNull); this.encoding = encoding; - this.kind = kind; } @Override protected AbstractPointerStamp copyWith(boolean newNonNull, boolean newAlwaysNull) { - return new KlassPointerStamp(newNonNull, newAlwaysNull, encoding, kind); + return new KlassPointerStamp(newNonNull, newAlwaysNull, encoding); } @Override @@ -68,11 +79,11 @@ public Stamp constant(Constant c, MetaAccessProvider meta) { if (isCompressed()) { if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) { - return new KlassPointerStamp(false, true, encoding, kind); + return new KlassPointerStamp(false, true, encoding); } } else { if (JavaConstant.NULL_POINTER.equals(c)) { - return new KlassPointerStamp(false, true, encoding, kind); + return KLASS_ALWAYS_NULL; } } @@ -81,7 +92,11 @@ if (nonNull()) { return this; } - return new KlassPointerStamp(true, false, encoding, kind); + if (isCompressed()) { + return new KlassPointerStamp(true, false, encoding); + } else { + return KLASS_NON_NULL; + } } @Override @@ -112,12 +127,12 @@ public KlassPointerStamp compressed(CompressEncoding newEncoding) { assert !isCompressed(); - return new KlassPointerStamp(nonNull(), alwaysNull(), newEncoding, Kind.Int); + return new KlassPointerStamp(nonNull(), alwaysNull(), newEncoding); } public KlassPointerStamp uncompressed() { assert isCompressed(); - return new KlassPointerStamp(nonNull(), alwaysNull(), Kind.Long); + return new KlassPointerStamp(nonNull(), alwaysNull()); } @Override @@ -162,9 +177,4 @@ } return ret.toString(); } - - @Override - public Kind getStackKind() { - return isCompressed() ? Kind.Int : Kind.Long; - } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java Mon Aug 03 09:35:55 2015 -0700 @@ -70,7 +70,7 @@ Stamp stamp = StampFactory.exactNonNull(metaAccess.lookupJavaType(Class.class)); if (type instanceof HotSpotResolvedObjectType) { - ConstantNode klass = ConstantNode.forConstant(context.getStampProvider().createHubStamp(true), ((HotSpotResolvedObjectType) type).klass(), metaAccess, graph); + ConstantNode klass = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), ((HotSpotResolvedObjectType) type).klass(), metaAccess, graph); AddressNode address = graph.unique(new OffsetAddressNode(klass, ConstantNode.forLong(classMirrorOffset, graph))); ValueNode read = graph.unique(new FloatingReadNode(address, CLASS_MIRROR_LOCATION, null, stamp));
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java Mon Aug 03 09:35:55 2015 -0700 @@ -28,6 +28,7 @@ import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; @@ -47,16 +48,14 @@ public final class ClassGetHubNode extends FloatingGuardedNode implements Lowerable, Canonicalizable, ConvertNode { public static final NodeClass<ClassGetHubNode> TYPE = NodeClass.create(ClassGetHubNode.class); @Input protected ValueNode clazz; - StampProvider stampProvider; - public ClassGetHubNode(@InjectedNodeParameter StampProvider stampProvider, ValueNode clazz) { - this(stampProvider, clazz, null); + public ClassGetHubNode(ValueNode clazz) { + this(clazz, null); } - public ClassGetHubNode(@InjectedNodeParameter StampProvider stampProvider, ValueNode clazz, ValueNode guard) { - super(TYPE, stampProvider.createHubStamp(false), (GuardingNode) guard); + public ClassGetHubNode(ValueNode clazz, ValueNode guard) { + super(TYPE, KlassPointerStamp.klass(), (GuardingNode) guard); this.clazz = clazz; - this.stampProvider = stampProvider; } @Override @@ -79,7 +78,7 @@ } if (clazz instanceof GetClassNode) { GetClassNode getClass = (GetClassNode) clazz; - return new LoadHubNode(stampProvider, getClass.getObject(), null); + return new LoadHubNode(KlassPointerStamp.klassNonNull(), getClass.getObject(), null); } if (clazz instanceof HubGetClassNode) { // replace _klass._java_mirror._klass -> _klass
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Mon Aug 03 09:35:55 2015 -0700 @@ -669,11 +669,6 @@ return loadWordFromObjectIntrinsic(object, offset, getWordKind(), identity); } - public static KlassPointer loadKlassFromObject(Object object, int offset, LocationIdentity identity) { - ReplacementsUtil.staticAssert(offset != hubOffset(), "Use loadHubIntrinsic instead of loadWordFromObject"); - return loadKlassFromObjectIntrinsic(object, offset, getWordKind(), identity); - } - /** * Reads the value of a given register. * @@ -693,9 +688,6 @@ @NodeIntrinsic(value = UnsafeLoadNode.class, setStampFromReturnType = true) private static native Word loadWordFromObjectIntrinsic(Object object, long offset, @ConstantNodeParameter Kind wordKind, @ConstantNodeParameter LocationIdentity locationIdentity); - @NodeIntrinsic(value = UnsafeLoadNode.class, setStampFromReturnType = true) - private static native KlassPointer loadKlassFromObjectIntrinsic(Object object, long offset, @ConstantNodeParameter Kind wordKind, @ConstantNodeParameter LocationIdentity locationIdentity); - @NodeIntrinsic(value = LoadHubNode.class) public static native KlassPointer loadHubIntrinsic(Object object, GuardingNode anchor);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Mon Aug 03 09:35:55 2015 -0700 @@ -37,6 +37,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.replacements.TypeCheckSnippetUtils.Hints; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.nodes.*; @@ -228,39 +229,38 @@ @Override protected Arguments makeArguments(InstanceOfUsageReplacer replacer, LoweringTool tool) { - Stamp hubStamp = tool.getStampProvider().createHubStamp(true); if (replacer.instanceOf instanceof InstanceOfNode) { InstanceOfNode instanceOf = (InstanceOfNode) replacer.instanceOf; ValueNode object = instanceOf.getValue(); Assumptions assumptions = instanceOf.graph().getAssumptions(); TypeCheckHints hintInfo = new TypeCheckHints(instanceOf.type(), instanceOf.profile(), assumptions, TypeCheckMinProfileHitProbability.getValue(), TypeCheckMaxHints.getValue()); final HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) instanceOf.type(); - ConstantNode hub = ConstantNode.forConstant(hubStamp, type.klass(), providers.getMetaAccess(), instanceOf.graph()); + ConstantNode hub = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), type.klass(), providers.getMetaAccess(), instanceOf.graph()); Arguments args; StructuredGraph graph = instanceOf.graph(); if (hintInfo.hintHitProbability >= 1.0 && hintInfo.exact == null) { - Hints hints = createHints(hintInfo, providers.getMetaAccess(), false, graph, tool); + Hints hints = createHints(hintInfo, providers.getMetaAccess(), false, graph); args = new Arguments(instanceofWithProfile, graph.getGuardsStage(), tool.getLoweringStage()); args.add("object", object); - args.addVarargs("hints", KlassPointer.class, hubStamp, hints.hubs); + args.addVarargs("hints", KlassPointer.class, KlassPointerStamp.klassNonNull(), hints.hubs); args.addVarargs("hintIsPositive", boolean.class, StampFactory.forKind(Kind.Boolean), hints.isPositive); } else if (hintInfo.exact != null) { args = new Arguments(instanceofExact, graph.getGuardsStage(), tool.getLoweringStage()); args.add("object", object); - args.add("exactHub", ConstantNode.forConstant(hubStamp, ((HotSpotResolvedObjectType) hintInfo.exact).klass(), providers.getMetaAccess(), graph)); + args.add("exactHub", ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), ((HotSpotResolvedObjectType) hintInfo.exact).klass(), providers.getMetaAccess(), graph)); } else if (type.isPrimaryType()) { args = new Arguments(instanceofPrimary, graph.getGuardsStage(), tool.getLoweringStage()); args.add("hub", hub); args.add("object", object); args.addConst("superCheckOffset", type.superCheckOffset()); } else { - Hints hints = createHints(hintInfo, providers.getMetaAccess(), false, graph, tool); + Hints hints = createHints(hintInfo, providers.getMetaAccess(), false, graph); args = new Arguments(instanceofSecondary, graph.getGuardsStage(), tool.getLoweringStage()); args.add("hub", hub); args.add("object", object); - args.addVarargs("hints", KlassPointer.class, hubStamp, hints.hubs); + args.addVarargs("hints", KlassPointer.class, KlassPointerStamp.klassNonNull(), hints.hubs); args.addVarargs("hintIsPositive", boolean.class, StampFactory.forKind(Kind.Boolean), hints.isPositive); } args.add("trueValue", replacer.trueValue); @@ -275,7 +275,7 @@ ValueNode object = typeCheck.getValue(); Arguments args = new Arguments(instanceofExact, typeCheck.graph().getGuardsStage(), tool.getLoweringStage()); args.add("object", object); - args.add("exactHub", ConstantNode.forConstant(hubStamp, ((HotSpotResolvedObjectType) typeCheck.type()).klass(), providers.getMetaAccess(), typeCheck.graph())); + args.add("exactHub", ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), ((HotSpotResolvedObjectType) typeCheck.type()).klass(), providers.getMetaAccess(), typeCheck.graph())); args.add("trueValue", replacer.trueValue); args.add("falseValue", replacer.falseValue); return args;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Mon Aug 03 09:35:55 2015 -0700 @@ -50,6 +50,7 @@ import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.debug.*; @@ -258,7 +259,7 @@ DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint); } - KlassPointer klass = loadKlassFromObject(elementType, arrayKlassOffset(), CLASS_ARRAY_KLASS_LOCATION); + KlassPointer klass = KlassPointer.fromWord(loadWordFromObject(elementType, arrayKlassOffset(), CLASS_ARRAY_KLASS_LOCATION)); if (probability(BranchProbabilityNode.NOT_FREQUENT_PROBABILITY, klass.isNull() || length < 0)) { DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint); } @@ -450,7 +451,7 @@ StructuredGraph graph = newInstanceNode.graph(); HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) newInstanceNode.instanceClass(); assert !type.isArray(); - ConstantNode hub = ConstantNode.forConstant(tool.getStampProvider().createHubStamp(true), type.klass(), providers.getMetaAccess(), graph); + ConstantNode hub = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), type.klass(), providers.getMetaAccess(), graph); int size = instanceSize(type); Arguments args = new Arguments(allocateInstance, graph.getGuardsStage(), tool.getLoweringStage()); @@ -475,7 +476,7 @@ ResolvedJavaType elementType = newArrayNode.elementType(); HotSpotResolvedObjectType arrayType = (HotSpotResolvedObjectType) elementType.getArrayClass(); Kind elementKind = elementType.getKind(); - ConstantNode hub = ConstantNode.forConstant(tool.getStampProvider().createHubStamp(true), arrayType.klass(), providers.getMetaAccess(), graph); + ConstantNode hub = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), arrayType.klass(), providers.getMetaAccess(), graph); final int headerSize = runtime.getJVMCIRuntime().getArrayBaseOffset(elementKind); HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer(); int log2ElementSize = CodeUtil.log2(lowerer.arrayScalingFactor(elementKind)); @@ -543,7 +544,7 @@ dims[i] = newmultiarrayNode.dimension(i); } HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) newmultiarrayNode.type(); - ConstantNode hub = ConstantNode.forConstant(tool.getStampProvider().createHubStamp(true), type.klass(), providers.getMetaAccess(), graph); + ConstantNode hub = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), type.klass(), providers.getMetaAccess(), graph); Arguments args = new Arguments(newmultiarray, graph.getGuardsStage(), tool.getLoweringStage()); args.add("hub", hub);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/TypeCheckSnippetUtils.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/TypeCheckSnippetUtils.java Mon Aug 03 09:35:55 2015 -0700 @@ -31,9 +31,9 @@ import jdk.internal.jvmci.hotspot.*; import jdk.internal.jvmci.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.spi.*; import com.oracle.graal.replacements.*; import com.oracle.graal.word.*; @@ -121,13 +121,13 @@ } } - static Hints createHints(TypeCheckHints hints, MetaAccessProvider metaAccess, boolean positiveOnly, StructuredGraph graph, LoweringTool tool) { + static Hints createHints(TypeCheckHints hints, MetaAccessProvider metaAccess, boolean positiveOnly, StructuredGraph graph) { ConstantNode[] hubs = new ConstantNode[hints.hints.length]; boolean[] isPositive = new boolean[hints.hints.length]; int index = 0; for (int i = 0; i < hubs.length; i++) { if (!positiveOnly || hints.hints[i].positive) { - hubs[index] = ConstantNode.forConstant(tool.getStampProvider().createHubStamp(true), ((HotSpotResolvedObjectType) hints.hints[i].type).klass(), metaAccess, graph); + hubs[index] = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), ((HotSpotResolvedObjectType) hints.hints[i].type).klass(), metaAccess, graph); isPositive[index] = hints.hints[i].positive; index++; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java Mon Aug 03 09:35:55 2015 -0700 @@ -38,6 +38,7 @@ import com.oracle.graal.api.replacements.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; @@ -524,7 +525,7 @@ } if (snippetInfo == arraycopyPredictedObjectWorkSnippet) { HotSpotResolvedObjectType arrayKlass = (HotSpotResolvedObjectType) tool.getMetaAccess().lookupJavaType(Object[].class); - ValueNode objectArrayKlass = ConstantNode.forConstant(tool.getStampProvider().createHubStamp(true), arrayKlass.klass(), tool.getMetaAccess(), arraycopy.graph()); + ValueNode objectArrayKlass = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), arrayKlass.klass(), tool.getMetaAccess(), arraycopy.graph()); args.add("objectArrayKlass", objectArrayKlass); args.addConst("counter", arraycopyCallCounters.get(Kind.Object)); args.addConst("copiedCounter", arraycopyCallCopiedCounters.get(Kind.Object));
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewArrayStub.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewArrayStub.java Mon Aug 03 09:35:55 2015 -0700 @@ -36,6 +36,7 @@ import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.replacements.*; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.nodes.*; @@ -62,7 +63,7 @@ Object[] args = new Object[count]; assert checkConstArg(2, "intArrayHub"); assert checkConstArg(3, "threadRegister"); - args[2] = ConstantNode.forConstant(providers.getStampProvider().createHubStamp(true), intArrayType.klass(), null); + args[2] = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), intArrayType.klass(), null); args[3] = providers.getRegisters().getThreadRegister(); return args; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewInstanceStub.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewInstanceStub.java Mon Aug 03 09:35:55 2015 -0700 @@ -37,6 +37,7 @@ import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.replacements.*; import com.oracle.graal.hotspot.word.*; import com.oracle.graal.nodes.*; @@ -64,7 +65,7 @@ Object[] args = new Object[count]; assert checkConstArg(1, "intArrayHub"); assert checkConstArg(2, "threadRegister"); - args[1] = ConstantNode.forConstant(providers.getStampProvider().createHubStamp(true), intArrayType.klass(), null); + args[1] = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), intArrayType.klass(), null); args[2] = providers.getRegisters().getThreadRegister(); return args; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/HotSpotWordTypes.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/HotSpotWordTypes.java Mon Aug 03 09:35:55 2015 -0700 @@ -25,6 +25,7 @@ import jdk.internal.jvmci.meta.*; import com.oracle.graal.compiler.common.type.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.word.*; /** @@ -47,17 +48,11 @@ */ private final ResolvedJavaType methodPointerType; - private final Stamp klassPointerStamp; - - private final Stamp methodPointerStamp; - - public HotSpotWordTypes(MetaAccessProvider metaAccess, Kind wordKind, Stamp klassPointerStamp, Stamp methodPointerStamp) { + public HotSpotWordTypes(MetaAccessProvider metaAccess, Kind wordKind) { super(metaAccess, wordKind); this.metaspacePointerType = metaAccess.lookupJavaType(MetaspacePointer.class); this.klassPointerType = metaAccess.lookupJavaType(KlassPointer.class); this.methodPointerType = metaAccess.lookupJavaType(MethodPointer.class); - this.klassPointerStamp = klassPointerStamp; - this.methodPointerStamp = methodPointerStamp; } @Override @@ -79,18 +74,10 @@ @Override public Stamp getWordStamp(ResolvedJavaType type) { if (type.equals(klassPointerType)) { - return klassPointerStamp; + return KlassPointerStamp.klass(); } else if (type.equals(methodPointerType)) { - return methodPointerStamp; + return MethodPointerStamp.method(); } return super.getWordStamp(type); } - - public Stamp getKlassPointerStamp() { - return klassPointerStamp; - } - - public Stamp getMethodPointerStamp() { - return methodPointerStamp; - } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Mon Aug 03 09:35:55 2015 -0700 @@ -67,7 +67,7 @@ this(hubStamp(stampProvider, value), value, guard); } - private LoadHubNode(Stamp stamp, ValueNode value, ValueNode guard) { + public LoadHubNode(Stamp stamp, ValueNode value, ValueNode guard) { super(TYPE, stamp, (GuardingNode) guard); assert value != guard; this.value = value;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/StampProvider.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/StampProvider.java Mon Aug 03 09:35:55 2015 -0700 @@ -36,11 +36,6 @@ Stamp createHubStamp(ObjectStamp object); /** - * Create the stamp of a possibly null hub. - */ - Stamp createHubStamp(boolean nonNull); - - /** * Create the stamp of a pointer to a method. */ Stamp createMethodStamp();
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Mon Aug 03 09:35:39 2015 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Mon Aug 03 09:35:55 2015 -0700 @@ -271,7 +271,7 @@ GuardingNode nullCheck = nullCheckReturn[0]; assert nullCheckReturn[0] != null || createNullCheck(array, storeIndexed, tool) == null; ValueNode arrayClass = createReadHub(graph, array, nullCheck, tool); - ValueNode componentHub = createReadArrayComponentHub(graph, arrayClass, storeIndexed, tool); + ValueNode componentHub = createReadArrayComponentHub(graph, arrayClass, storeIndexed); checkCastNode = graph.add(new CheckCastDynamicNode(componentHub, value, true)); graph.addBeforeFixed(storeIndexed, checkCastNode); value = checkCastNode; @@ -676,7 +676,7 @@ protected abstract ValueNode createReadHub(StructuredGraph graph, ValueNode object, GuardingNode guard, LoweringTool tool); - protected abstract ValueNode createReadArrayComponentHub(StructuredGraph graph, ValueNode arrayHub, FixedNode anchor, LoweringTool tool); + protected abstract ValueNode createReadArrayComponentHub(StructuredGraph graph, ValueNode arrayHub, FixedNode anchor); protected PiNode getBoundsCheckedIndex(AccessIndexedNode n, LoweringTool tool, GuardingNode[] nullCheckReturn) { StructuredGraph graph = n.graph();