Mercurial > hg > graal-jvmci-8
changeset 18549:8f4945c8126a
Merge.
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 26 Nov 2014 21:00:02 +0100 |
parents | 5851c17b571e (diff) 11f353f259ae (current diff) |
children | 99c57f4c3fa3 bbf27a6ffb52 |
files | |
diffstat | 28 files changed, 105 insertions(+), 95 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NamedLocationIdentity.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NamedLocationIdentity.java Wed Nov 26 21:00:02 2014 +0100 @@ -24,10 +24,12 @@ import java.util.*; +import com.oracle.graal.api.meta.Kind.FormatWithToString; + /** * A {@link LocationIdentity} with a name. */ -public final class NamedLocationIdentity implements LocationIdentity { +public final class NamedLocationIdentity implements LocationIdentity, FormatWithToString { /** * Map for asserting all {@link NamedLocationIdentity} instances have a unique name.
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Wed Nov 26 21:00:02 2014 +0100 @@ -23,7 +23,6 @@ package com.oracle.graal.api.meta; import java.lang.annotation.*; -import java.lang.reflect.*; import java.net.*; /** @@ -344,12 +343,6 @@ ResolvedJavaMethod getClassInitializer(); /** - * Creates a new array with this type as the component type and the specified length. This - * method is similar to {@link Array#newInstance(Class, int)}. - */ - JavaConstant newArray(int length); - - /** * Returns true if this type represents and interface and it should be trusted even in places * where the JVM verifier would not give any guarantees other than {@link Object}. */
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompiledRuntimeStub.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompiledRuntimeStub.java Wed Nov 26 21:00:02 2014 +0100 @@ -72,7 +72,7 @@ Call call = (Call) infopoint; assert call.target instanceof HotSpotForeignCallLinkage : this + " cannot have non runtime call: " + call.target; HotSpotForeignCallLinkage linkage = (HotSpotForeignCallLinkage) call.target; - assert !linkage.isCompiledStub() || linkage.getDescriptor() == UNCOMMON_TRAP_HANDLER : this + " cannot call compiled stub " + linkage; + assert !linkage.isCompiledStub() || linkage.getDescriptor().equals(UNCOMMON_TRAP_HANDLER) : this + " cannot call compiled stub " + linkage; } return true; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Wed Nov 26 21:00:02 2014 +0100 @@ -399,7 +399,7 @@ if (metaspaceKlass == 0L) { assert resolve == false; - return HotSpotUnresolvedJavaType.create(name); + return HotSpotUnresolvedJavaType.create(this, name); } return HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(metaspaceKlass); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/LocalImpl.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/LocalImpl.java Wed Nov 26 21:00:02 2014 +0100 @@ -22,10 +22,7 @@ */ package com.oracle.graal.hotspot.debug; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; - import com.oracle.graal.api.meta.*; -import com.oracle.graal.hotspot.meta.*; public class LocalImpl implements Local { @@ -35,12 +32,12 @@ private final int slot; private final JavaType type; - public LocalImpl(String name, String type, HotSpotResolvedObjectType holder, int startBci, int endBci, int slot) { + public LocalImpl(String name, JavaType type, int startBci, int endBci, int slot) { this.name = name; this.startBci = startBci; this.endBci = endBci; this.slot = slot; - this.type = runtime().lookupType(type, holder, false); + this.type = type; } @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Wed Nov 26 21:00:02 2014 +0100 @@ -84,7 +84,7 @@ assert target == providers.getCodeCache().getTarget(); checkcastDynamicSnippets = new CheckCastDynamicSnippets.Templates(providers, target); - instanceofSnippets = new InstanceOfSnippets.Templates(providers, target); + instanceofSnippets = new InstanceOfSnippets.Templates(providers, target, config.compileThreshold); newObjectSnippets = new NewObjectSnippets.Templates(providers, target); monitorSnippets = new MonitorSnippets.Templates(providers, target, config.useFastLocking); writeBarrierSnippets = new WriteBarrierSnippets.Templates(providers, target, config.useCompressedOops ? config.getOopEncoding() : null); @@ -286,12 +286,12 @@ @Override protected BarrierType fieldInitializationBarrier(Kind entryKind) { - return (entryKind == Kind.Object && !useDeferredInitBarriers()) ? BarrierType.IMPRECISE : BarrierType.NONE; + return (entryKind == Kind.Object && !runtime.getConfig().useDeferredInitBarriers) ? BarrierType.IMPRECISE : BarrierType.NONE; } @Override protected BarrierType arrayInitializationBarrier(Kind entryKind) { - return (entryKind == Kind.Object && !useDeferredInitBarriers()) ? BarrierType.PRECISE : BarrierType.NONE; + return (entryKind == Kind.Object && !runtime.getConfig().useDeferredInitBarriers) ? BarrierType.PRECISE : BarrierType.NONE; } private void lowerOSRStartNode(OSRStartNode osrStart) { @@ -378,8 +378,8 @@ } } - private static boolean addReadBarrier(UnsafeLoadNode load) { - if (useG1GC() && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getKind() == Kind.Object && load.accessKind() == Kind.Object && + private boolean addReadBarrier(UnsafeLoadNode load) { + if (runtime.getConfig().useG1GC && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getKind() == Kind.Object && load.accessKind() == Kind.Object && !StampTool.isPointerAlwaysNull(load.object())) { ResolvedJavaType type = StampTool.typeOrNull(load.object()); if (type != null && !type.isArray()) { @@ -439,7 +439,8 @@ protected BarrierType fieldLoadBarrierType(ResolvedJavaField f) { HotSpotResolvedJavaField loadField = (HotSpotResolvedJavaField) f; BarrierType barrierType = BarrierType.NONE; - if (config().useG1GC && loadField.getKind() == Kind.Object && metaAccess.lookupJavaType(Reference.class).equals(loadField.getDeclaringClass()) && loadField.getName().equals("referent")) { + if (runtime.getConfig().useG1GC && loadField.getKind() == Kind.Object && metaAccess.lookupJavaType(Reference.class).equals(loadField.getDeclaringClass()) && + loadField.getName().equals("referent")) { barrierType = BarrierType.PRECISE; } return barrierType; @@ -453,7 +454,7 @@ @Override public int arrayScalingFactor(Kind kind) { - if (useCompressedOops() && kind == Kind.Object) { + if (runtime.getConfig().useCompressedOops && kind == Kind.Object) { return this.runtime.getTarget().getSizeInBytes(Kind.Int); } return super.arrayScalingFactor(kind); @@ -466,7 +467,7 @@ @Override protected int arrayLengthOffset() { - return config().arrayLengthOffset; + return runtime.getConfig().arrayLengthOffset; } @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Wed Nov 26 21:00:02 2014 +0100 @@ -301,9 +301,9 @@ compressed = c.isCompressed(); raw = 0xDEADDEADDEADDEADL; } else if (constant instanceof HotSpotMetaspaceConstant) { - HotSpotMetaspaceConstantImpl meta = (HotSpotMetaspaceConstantImpl) constant; - compressed = meta.getKind() != target.wordKind; - raw = meta.asLong(); + HotSpotMetaspaceConstant meta = (HotSpotMetaspaceConstant) constant; + compressed = meta.isCompressed(); + raw = meta.rawValue(); } else { throw GraalInternalError.shouldNotReachHere(); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java Wed Nov 26 21:00:02 2014 +0100 @@ -417,7 +417,7 @@ @Override public Signature lookupSignature(int cpi) { - return new HotSpotSignature(lookupUtf8(cpi)); + return new HotSpotSignature(runtime(), lookupUtf8(cpi)); } @Override @@ -444,7 +444,7 @@ if ((metaspacePointer & config.compilerToVMSymbolTag) != 0) { final long metaspaceSymbol = metaspacePointer & ~config.compilerToVMSymbolTag; String name = runtime.getCompilerToVM().getSymbol(metaspaceSymbol); - return HotSpotUnresolvedJavaType.create("L" + name + ";"); + return HotSpotUnresolvedJavaType.create(runtime(), "L" + name + ";"); } else { assert (metaspacePointer & config.compilerToVMKlassTag) == 0; return HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(metaspacePointer); @@ -460,9 +460,9 @@ } else { // Get the method's name and signature. String name = getNameRefAt(index); - String signature = getSignatureRefAt(index); + HotSpotSignature signature = new HotSpotSignature(runtime(), getSignatureRefAt(index)); if (opcode == Bytecodes.INVOKEDYNAMIC) { - HotSpotResolvedObjectTypeImpl holder = HotSpotResolvedObjectTypeImpl.fromObjectClass(MethodHandle.class); + HotSpotResolvedObjectType holder = HotSpotResolvedObjectTypeImpl.fromObjectClass(MethodHandle.class); return new HotSpotMethodUnresolved(name, signature, holder); } else { final int klassIndex = getKlassRefIndexAt(index);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java Wed Nov 26 21:00:02 2014 +0100 @@ -120,7 +120,7 @@ */ public void linkForeignCall(HotSpotProviders providers, ForeignCallDescriptor descriptor, long address, boolean prependThread, Transition transition, boolean reexecutable, LocationIdentity... killedLocations) { - ForeignCallStub stub = new ForeignCallStub(providers, address, descriptor, prependThread, transition, reexecutable, killedLocations); + ForeignCallStub stub = new ForeignCallStub(runtime, providers, address, descriptor, prependThread, transition, reexecutable, killedLocations); HotSpotForeignCallLinkage linkage = stub.getLinkage(); HotSpotForeignCallLinkage targetLinkage = stub.getTargetLinkage(); linkage.setCompiledStub(stub);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Wed Nov 26 21:00:02 2014 +0100 @@ -46,23 +46,22 @@ this.runtime = runtime; } - public HotSpotResolvedJavaType lookupJavaType(Class<?> clazz) { + public ResolvedJavaType lookupJavaType(Class<?> clazz) { if (clazz == null) { throw new IllegalArgumentException("Class parameter was null"); } - return fromClass(clazz); + return runtime.fromClass(clazz); } - public HotSpotResolvedObjectTypeImpl lookupJavaType(JavaConstant constant) { + public HotSpotResolvedObjectType lookupJavaType(JavaConstant constant) { if (constant.isNull() || !(constant instanceof HotSpotObjectConstant)) { return null; } - Object o = ((HotSpotObjectConstantImpl) constant).object(); - return fromObjectClass(o.getClass()); + return ((HotSpotObjectConstant) constant).getType(); } public Signature parseMethodDescriptor(String signature) { - return new HotSpotSignature(signature); + return new HotSpotSignature(runtime, signature); } /** @@ -106,11 +105,11 @@ final int modifiers = reflectionField.getModifiers(); final long offset = Modifier.isStatic(modifiers) ? unsafe.staticFieldOffset(reflectionField) : unsafe.objectFieldOffset(reflectionField); - HotSpotResolvedObjectTypeImpl holder = fromObjectClass(fieldHolder); - HotSpotResolvedJavaType type = fromClass(fieldType); + HotSpotResolvedObjectType holder = fromObjectClass(fieldHolder); + JavaType type = fromClass(fieldType); if (offset != -1) { - HotSpotResolvedObjectTypeImpl resolved = holder; + HotSpotResolvedObjectType resolved = holder; return resolved.createField(name, type, offset, modifiers); } else { throw GraalInternalError.shouldNotReachHere("unresolved field " + reflectionField); @@ -286,7 +285,7 @@ @Override public long getMemorySize(JavaConstant constant) { if (constant.getKind() == Kind.Object) { - HotSpotResolvedObjectTypeImpl lookupJavaType = this.lookupJavaType(constant); + HotSpotResolvedObjectType lookupJavaType = lookupJavaType(constant); if (lookupJavaType == null) { return 0;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstant.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstant.java Wed Nov 26 21:00:02 2014 +0100 @@ -34,4 +34,6 @@ Constant uncompress(CompressEncoding encoding); HotSpotResolvedObjectType asResolvedJavaType(); + + long rawValue(); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstantImpl.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaspaceConstantImpl.java Wed Nov 26 21:00:02 2014 +0100 @@ -87,4 +87,8 @@ } return null; } + + public long rawValue() { + return asLong(); + } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java Wed Nov 26 21:00:02 2014 +0100 @@ -176,7 +176,7 @@ */ private long readUnsignedInt(int position, int offsetInBytes) { long fullOffsetInBytes = computeFullOffset(position, offsetInBytes); - return unsafeReadWord(metaspaceMethodData + fullOffsetInBytes) & 0xFFFFFFFFL; + return unsafe.getAddress(metaspaceMethodData + fullOffsetInBytes) & 0xFFFFFFFFL; } private int readUnsignedIntAsSignedInt(int position, int offsetInBytes) { @@ -191,12 +191,12 @@ */ private int readInt(int position, int offsetInBytes) { long fullOffsetInBytes = computeFullOffset(position, offsetInBytes); - return (int) unsafeReadWord(metaspaceMethodData + fullOffsetInBytes); + return (int) unsafe.getAddress(metaspaceMethodData + fullOffsetInBytes); } private long readWord(int position, int offsetInBytes) { long fullOffsetInBytes = computeFullOffset(position, offsetInBytes); - return unsafeReadWord(metaspaceMethodData + fullOffsetInBytes); + return unsafe.getAddress(metaspaceMethodData + fullOffsetInBytes); } private static int truncateLongToInt(long value) { @@ -332,7 +332,11 @@ return data.readUnsignedByte(position, config.dataLayoutFlagsOffset); } - protected int getDynamicSize(@SuppressWarnings("unused") HotSpotMethodData data, @SuppressWarnings("unused") int position) { + /** + * @param data + * @param position + */ + protected int getDynamicSize(HotSpotMethodData data, int position) { return 0; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodUnresolved.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodUnresolved.java Wed Nov 26 21:00:02 2014 +0100 @@ -33,10 +33,10 @@ private final Signature signature; protected JavaType holder; - public HotSpotMethodUnresolved(String name, String signature, JavaType holder) { + public HotSpotMethodUnresolved(String name, Signature signature, JavaType holder) { super(name); this.holder = holder; - this.signature = new HotSpotSignature(signature); + this.signature = signature; } @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Wed Nov 26 21:00:02 2014 +0100 @@ -43,6 +43,11 @@ boolean isCompressed(); /** + * Gets the resolved Java type of the object represented by this constant. + */ + HotSpotResolvedObjectType getType(); + + /** * Gets the result of {@link Class#getClassLoader()} for the {@link Class} object represented by * this constant. *
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java Wed Nov 26 21:00:02 2014 +0100 @@ -22,6 +22,8 @@ */ package com.oracle.graal.hotspot.meta; +import static com.oracle.graal.hotspot.meta.HotSpotResolvedObjectTypeImpl.*; + import java.lang.invoke.*; import com.oracle.graal.api.code.*; @@ -43,7 +45,7 @@ return forObject(object, false); } - public static JavaConstant forObject(Object object, boolean compressed) { + static JavaConstant forObject(Object object, boolean compressed) { if (object == null) { return compressed ? HotSpotCompressedNullConstant.COMPRESSED_NULL : JavaConstant.NULL_POINTER; } else { @@ -51,7 +53,7 @@ } } - public static JavaConstant forStableArray(Object object, int stableDimension, boolean isDefaultStable) { + static JavaConstant forStableArray(Object object, int stableDimension, boolean isDefaultStable) { if (object == null) { return JavaConstant.NULL_POINTER; } else { @@ -68,7 +70,7 @@ } } - public static Object asBoxedValue(Constant constant) { + static Object asBoxedValue(Constant constant) { if (JavaConstant.isNull(constant)) { return null; } else if (constant instanceof HotSpotObjectConstantImpl) { @@ -135,6 +137,10 @@ return new HotSpotObjectConstantImpl(object, false, stableDimension, isDefaultStable); } + public HotSpotResolvedObjectType getType() { + return fromObjectClass(object.getClass()); + } + public JavaConstant getClassLoader() { if (object instanceof Class) { /*
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java Wed Nov 26 21:00:02 2014 +0100 @@ -604,7 +604,7 @@ String localName = getConstantPool().lookupUtf8(nameCpIndex); String localType = getConstantPool().lookupUtf8(typeCpIndex); - locals[i] = new LocalImpl(localName, localType, holder, startBci, endBci, slot); + locals[i] = new LocalImpl(localName, runtime().lookupType(localType, holder, false), startBci, endBci, slot); // Go to the next LocalVariableTableElement localVariableTableElement += config.localVariableTableElementSize;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Wed Nov 26 21:00:02 2014 +0100 @@ -91,4 +91,6 @@ HotSpotResolvedObjectType getEnclosingType(); ResolvedJavaMethod getClassInitializer(); + + ResolvedJavaField createField(String name, JavaType type, long offset, int modifiers); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectTypeImpl.java Wed Nov 26 21:00:02 2014 +0100 @@ -859,11 +859,6 @@ } @Override - public JavaConstant newArray(int length) { - return HotSpotObjectConstantImpl.forObject(Array.newInstance(mirror(), length)); - } - - @Override public String toString() { return "HotSpotType<" + getName() + ", resolved>"; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Wed Nov 26 21:00:02 2014 +0100 @@ -284,11 +284,6 @@ } @Override - public JavaConstant newArray(int length) { - return HotSpotObjectConstantImpl.forObject(Array.newInstance(mirror(), length)); - } - - @Override public boolean isTrustedInterfaceType() { return false; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSignature.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSignature.java Wed Nov 26 21:00:02 2014 +0100 @@ -22,8 +22,6 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; - import java.util.*; import com.oracle.graal.api.meta.*; @@ -41,8 +39,10 @@ private final String originalString; private ResolvedJavaType[] parameterTypes; private ResolvedJavaType returnTypeCache; + private final HotSpotGraalRuntimeProvider runtime; - public HotSpotSignature(String signature) { + public HotSpotSignature(HotSpotGraalRuntimeProvider runtime, String signature) { + this.runtime = runtime; assert signature.length() > 0; this.originalString = signature; @@ -63,7 +63,8 @@ } } - public HotSpotSignature(ResolvedJavaType returnType, ResolvedJavaType... parameterTypes) { + public HotSpotSignature(HotSpotGraalRuntimeProvider runtime, ResolvedJavaType returnType, ResolvedJavaType... parameterTypes) { + this.runtime = runtime; this.parameterTypes = parameterTypes.clone(); this.returnTypeCache = returnType; this.returnType = returnType.getName(); @@ -74,7 +75,7 @@ } sb.append(")").append(returnType.getName()); this.originalString = sb.toString(); - assert new HotSpotSignature(originalString).equals(this); + assert new HotSpotSignature(runtime, originalString).equals(this); } private static int parseSignature(String signature, int start) { @@ -129,12 +130,12 @@ return true; } - private static JavaType getUnresolvedOrPrimitiveType(String name) { + private static JavaType getUnresolvedOrPrimitiveType(HotSpotGraalRuntimeProvider runtime, String name) { if (name.length() == 1) { Kind kind = Kind.fromPrimitiveOrVoidTypeChar(name.charAt(0)); - return HotSpotResolvedPrimitiveType.fromKind(kind); + return runtime.getHostProviders().getMetaAccess().lookupJavaType(kind.toJavaClass()); } - return new HotSpotUnresolvedJavaType(name); + return new HotSpotUnresolvedJavaType(name, runtime); } @Override @@ -142,7 +143,7 @@ if (accessingClass == null) { // Caller doesn't care about resolution context so return an unresolved // or primitive type (primitive type resolution is context free) - return getUnresolvedOrPrimitiveType(parameters.get(index)); + return getUnresolvedOrPrimitiveType(runtime, parameters.get(index)); } if (parameterTypes == null) { parameterTypes = new ResolvedJavaType[parameters.size()]; @@ -150,7 +151,7 @@ ResolvedJavaType type = parameterTypes[index]; if (!checkValidCache(type, accessingClass)) { - type = (ResolvedJavaType) runtime().lookupType(parameters.get(index), (HotSpotResolvedObjectTypeImpl) accessingClass, true); + type = (ResolvedJavaType) runtime.lookupType(parameters.get(index), (HotSpotResolvedObjectType) accessingClass, true); parameterTypes[index] = type; } return type; @@ -172,10 +173,10 @@ if (accessingClass == null) { // Caller doesn't care about resolution context so return an unresolved // or primitive type (primitive type resolution is context free) - return getUnresolvedOrPrimitiveType(returnType); + return getUnresolvedOrPrimitiveType(runtime, returnType); } if (!checkValidCache(returnTypeCache, accessingClass)) { - returnTypeCache = (ResolvedJavaType) runtime().lookupType(returnType, (HotSpotResolvedObjectTypeImpl) accessingClass, true); + returnTypeCache = (ResolvedJavaType) runtime.lookupType(returnType, (HotSpotResolvedObjectType) accessingClass, true); } return returnTypeCache; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotUnresolvedJavaType.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotUnresolvedJavaType.java Wed Nov 26 21:00:02 2014 +0100 @@ -22,9 +22,8 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; - import com.oracle.graal.api.meta.*; +import com.oracle.graal.hotspot.*; /** * Implementation of {@link JavaType} for unresolved HotSpot classes. @@ -32,28 +31,30 @@ public class HotSpotUnresolvedJavaType extends HotSpotJavaType { private static final long serialVersionUID = -2320936267633521314L; + private final HotSpotGraalRuntimeProvider runtime; - public HotSpotUnresolvedJavaType(String name) { + public HotSpotUnresolvedJavaType(String name, HotSpotGraalRuntimeProvider runtime) { super(name); assert name.charAt(0) == '[' || name.charAt(name.length() - 1) == ';' : name; + this.runtime = runtime; } /** * Creates an unresolved type for a valid {@link JavaType#getName() type name}. */ - public static HotSpotUnresolvedJavaType create(String name) { - return new HotSpotUnresolvedJavaType(name); + public static HotSpotUnresolvedJavaType create(HotSpotGraalRuntimeProvider runtime, String name) { + return new HotSpotUnresolvedJavaType(name, runtime); } @Override public JavaType getComponentType() { assert getName().charAt(0) == '[' : "no array class" + getName(); - return new HotSpotUnresolvedJavaType(getName().substring(1)); + return new HotSpotUnresolvedJavaType(getName().substring(1), runtime); } @Override public JavaType getArrayClass() { - return new HotSpotUnresolvedJavaType('[' + getName()); + return new HotSpotUnresolvedJavaType('[' + getName(), runtime); } @Override @@ -85,6 +86,6 @@ @Override public ResolvedJavaType resolve(ResolvedJavaType accessingClass) { - return (ResolvedJavaType) runtime().lookupType(getName(), (HotSpotResolvedObjectTypeImpl) accessingClass, true); + return (ResolvedJavaType) runtime.lookupType(getName(), (HotSpotResolvedObjectType) accessingClass, true); } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Wed Nov 26 21:00:02 2014 +0100 @@ -58,7 +58,7 @@ @Override public boolean inferStamp() { if (stamp() == defaultStamp && hub.isConstant()) { - updateStamp(StampFactory.exactNonNull(HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(hub.asConstant()))); + updateStamp(StampFactory.exactNonNull(((HotSpotMetaspaceConstant) hub.asJavaConstant()).asResolvedJavaType())); return true; } return false;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Wed Nov 26 21:00:02 2014 +0100 @@ -56,7 +56,7 @@ @Override public boolean inferStamp() { if (stamp() == defaultStamp && hub.isConstant()) { - updateStamp(StampFactory.exactNonNull(HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(hub.asConstant()))); + updateStamp(StampFactory.exactNonNull(((HotSpotMetaspaceConstant) hub.asJavaConstant()).asResolvedJavaType())); return true; } return false;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java Wed Nov 26 21:00:02 2014 +0100 @@ -60,7 +60,7 @@ @Override public boolean inferStamp() { if (stamp() == defaultStamp && hub.isConstant()) { - updateStamp(StampFactory.exactNonNull(HotSpotResolvedObjectTypeImpl.fromMetaspaceKlass(hub.asConstant()))); + updateStamp(StampFactory.exactNonNull(((HotSpotMetaspaceConstant) hub.asJavaConstant()).asResolvedJavaType())); return true; } return false;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Wed Nov 26 21:00:02 2014 +0100 @@ -24,7 +24,6 @@ import static com.oracle.graal.api.meta.DeoptimizationAction.*; import static com.oracle.graal.api.meta.DeoptimizationReason.*; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; import static com.oracle.graal.hotspot.replacements.InstanceOfSnippets.Options.*; import static com.oracle.graal.hotspot.replacements.TypeCheckSnippetUtils.*; @@ -70,15 +69,15 @@ * 100000 executions are for an object whose type is not one of the top N profiled types (where * {@code N == } {@link Options#TypeCheckMaxHints}). */ - public static double hintHitProbabilityThresholdForDeoptimizingSnippet() { - return 1.0D - (1.0D / (runtime().getConfig().compileThreshold * 10)); + public static double hintHitProbabilityThresholdForDeoptimizingSnippet(long compilationThreshold) { + return 1.0D - (1.0D / (compilationThreshold * 10)); } /** * A test against a set of hints derived from a profile with very close to 100% precise coverage * of seen types. This snippet deoptimizes on hint miss paths. * - * @see #hintHitProbabilityThresholdForDeoptimizingSnippet() + * @see #hintHitProbabilityThresholdForDeoptimizingSnippet(long) */ @Snippet public static Object instanceofWithProfile(Object object, @VarargsParameter KlassPointer[] hints, @VarargsParameter boolean[] hintIsPositive, Object trueValue, Object falseValue, @@ -215,9 +214,11 @@ private final SnippetInfo instanceofPrimary = snippet(InstanceOfSnippets.class, "instanceofPrimary"); private final SnippetInfo instanceofSecondary = snippet(InstanceOfSnippets.class, "instanceofSecondary"); private final SnippetInfo instanceofDynamic = snippet(InstanceOfSnippets.class, "instanceofDynamic"); + private final long compilationThreshold; - public Templates(HotSpotProviders providers, TargetDescription target) { + public Templates(HotSpotProviders providers, TargetDescription target, long compilationThreshold) { super(providers, providers.getSnippetReflection(), target); + this.compilationThreshold = compilationThreshold; } @Override @@ -232,7 +233,7 @@ Arguments args; StructuredGraph graph = instanceOf.graph(); - if (hintInfo.hintHitProbability >= hintHitProbabilityThresholdForDeoptimizingSnippet() && hintInfo.exact == null) { + if (hintInfo.hintHitProbability >= hintHitProbabilityThresholdForDeoptimizingSnippet(compilationThreshold) && hintInfo.exact == null) { Hints hints = createHints(hintInfo, providers.getMetaAccess(), false, graph); args = new Arguments(instanceofWithProfile, graph.getGuardsStage(), tool.getLoweringStage()); args.add("object", object); @@ -257,7 +258,7 @@ } args.add("trueValue", replacer.trueValue); args.add("falseValue", replacer.falseValue); - if (hintInfo.hintHitProbability >= hintHitProbabilityThresholdForDeoptimizingSnippet() && hintInfo.exact == null) { + if (hintInfo.hintHitProbability >= hintHitProbabilityThresholdForDeoptimizingSnippet(compilationThreshold) && hintInfo.exact == null) { args.addConst("nullSeen", hintInfo.profile.getNullSeen() != TriState.FALSE); } return args;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Wed Nov 26 21:00:02 2014 +0100 @@ -479,7 +479,6 @@ private static int instanceSize(HotSpotResolvedObjectType type) { int size = type.instanceSize(); - assert (size % wordSize()) == 0; assert size >= 0; return size; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Wed Nov 26 11:10:26 2014 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Wed Nov 26 21:00:02 2014 +0100 @@ -52,6 +52,8 @@ */ public class ForeignCallStub extends Stub { + private final HotSpotGraalRuntimeProvider runtime; + /** * The target of the call. */ @@ -75,10 +77,11 @@ * be re-executed. * @param killedLocations the memory locations killed by the stub call */ - public ForeignCallStub(HotSpotProviders providers, long address, ForeignCallDescriptor descriptor, boolean prependThread, Transition transition, boolean reexecutable, - LocationIdentity... killedLocations) { + public ForeignCallStub(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers, long address, ForeignCallDescriptor descriptor, boolean prependThread, Transition transition, + boolean reexecutable, LocationIdentity... killedLocations) { super(providers, HotSpotForeignCallLinkageImpl.create(providers.getMetaAccess(), providers.getCodeCache(), providers.getForeignCalls(), descriptor, 0L, PRESERVES_REGISTERS, JavaCall, JavaCallee, transition, reexecutable, killedLocations)); + this.runtime = runtime; this.prependThread = prependThread; Class<?>[] targetParameterTypes = createTargetParameters(descriptor); ForeignCallDescriptor targetSig = new ForeignCallDescriptor(descriptor.getName() + ":C", descriptor.getResultType(), targetParameterTypes); @@ -121,7 +124,7 @@ for (int i = 0; i < arguments.length; i++) { parameters[i] = metaAccess.lookupJavaType(arguments[i]); } - return new HotSpotSignature(metaAccess.lookupJavaType(d.getResultType()), parameters); + return new HotSpotSignature(runtime, metaAccess.lookupJavaType(d.getResultType()), parameters); } public String getName() {