Mercurial > hg > graal-compiler
changeset 2055:99ad52189524
Refactorings to get towards less CRI overhead.
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotField.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotField.java Thu Jan 13 17:45:17 2011 +0100 @@ -101,7 +101,7 @@ @Override public String toString() { - return "HotSpotField<" + ((HotSpotType) holder).simpleName() + "." + name + ">"; + return "HotSpotField<" + holder.name() + "." + name + ">"; } }
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotMethod.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotMethod.java Thu Jan 13 17:45:17 2011 +0100 @@ -23,6 +23,18 @@ import com.sun.cri.ri.*; -public interface HotSpotMethod extends RiMethod { +public abstract class HotSpotMethod extends CompilerObject implements RiMethod { + + protected RiType holder; + protected String name; + @Override + public final RiType holder() { + return holder; + } + + @Override + public final String name() { + return name; + } }
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotMethodResolved.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotMethodResolved.java Thu Jan 13 17:45:17 2011 +0100 @@ -30,10 +30,9 @@ * * @author Thomas Wuerthinger, Lukas Stadler */ -public class HotSpotMethodResolved extends CompilerObject implements HotSpotMethod { +public final class HotSpotMethodResolved extends HotSpotMethod { private final long vmId; - private final String name; // cached values private byte[] code; @@ -42,12 +41,12 @@ private int maxStackSize = -1; private RiExceptionHandler[] exceptionHandlers; private RiSignature signature; - private RiType holder; private Boolean hasBalancedMonitors; public HotSpotMethodResolved(long vmId, String name) { this.vmId = vmId; this.name = name; + this.holder = Compiler.getVMEntries().RiMethod_holder(vmId); } @Override @@ -88,14 +87,6 @@ } @Override - public RiType holder() { - if (holder == null) { - holder = Compiler.getVMEntries().RiMethod_holder(vmId); - } - return holder; - } - - @Override public boolean isClassInitializer() { return "<clinit>".equals(name); } @@ -151,11 +142,6 @@ } @Override - public String name() { - return name; - } - - @Override public StackTraceElement toStackTraceElement(int bci) { return CiUtil.toStackTraceElement(this, bci); }
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotMethodUnresolved.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotMethodUnresolved.java Thu Jan 13 17:45:17 2011 +0100 @@ -28,9 +28,7 @@ * * @author Lukas Stadler */ -public class HotSpotMethodUnresolved implements HotSpotMethod { - private final String name; - private final RiType holder; +public final class HotSpotMethodUnresolved extends HotSpotMethod { private final RiSignature signature; public HotSpotMethodUnresolved(String name, String signature, RiType holder) { @@ -40,16 +38,6 @@ } @Override - public String name() { - return name; - } - - @Override - public RiType holder() { - return holder; - } - - @Override public RiSignature signature() { return signature; }
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotType.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotType.java Thu Jan 13 17:45:17 2011 +0100 @@ -27,8 +27,11 @@ * * @author Lukas Stadler */ -public interface HotSpotType extends RiType { +public abstract class HotSpotType extends CompilerObject implements RiType { + protected String name; - String simpleName(); - + @Override + public final String name() { + return name; + } }
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypePrimitive.java Thu Jan 13 17:45:17 2011 +0100 @@ -28,7 +28,7 @@ * * @author Thomas Wuerthinger, Lukas Stadler */ -public final class HotSpotTypePrimitive extends CompilerObject implements HotSpotType { +public final class HotSpotTypePrimitive extends HotSpotType { private CiKind kind; @@ -44,6 +44,7 @@ private HotSpotTypePrimitive(CiKind kind) { this.kind = kind; + this.name = kind.toString(); } @Override @@ -141,16 +142,6 @@ } @Override - public String name() { - return kind.toString(); - } - - @Override - public String simpleName() { - return kind.toString(); - } - - @Override public RiMethod resolveMethodImpl(RiMethod method) { return null; }
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeResolved.java Thu Jan 13 17:45:17 2011 +0100 @@ -32,10 +32,10 @@ * * @author Thomas Wuerthinger, Lukas Stadler */ -public class HotSpotTypeResolved implements HotSpotType { +public class HotSpotTypeResolved extends HotSpotType { private Class javaMirror; - private String name; + private String simpleName; private int accessFlags; private boolean hasFinalizer; private boolean hasSubclass; @@ -55,7 +55,7 @@ @Override public RiType arrayOf() { - Logger.log("arrayOf " + name); + Logger.log("arrayOf " + simpleName); return null; //return Compiler.getVMEntries().RiType_arrayOf(vmId); } @@ -164,16 +164,6 @@ } @Override - public String name() { - return "L" + name + ";"; - } - - @Override - public String simpleName() { - return name; - } - - @Override public RiMethod resolveMethodImpl(RiMethod method) { assert method instanceof HotSpotMethod; return Compiler.getVMEntries().RiType_resolveMethodImpl(this, method.name(), method.signature().asString()); @@ -181,7 +171,7 @@ @Override public String toString() { - return "HotSpotType<" + name + ", resolved>"; + return "HotSpotType<" + simpleName + ", resolved>"; } public RiConstantPool constantPool() {
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeUnresolved.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTypeUnresolved.java Thu Jan 13 17:45:17 2011 +0100 @@ -28,9 +28,9 @@ * * @author Thomas Wuerthinger, Lukas Stadler */ -public class HotSpotTypeUnresolved implements HotSpotType { +public class HotSpotTypeUnresolved extends HotSpotType { - public final String name; + public final String simpleName; public final int dimensions; /** @@ -48,35 +48,33 @@ dimensions++; } assert name.charAt(startIndex) == 'L'; - name = name.substring(startIndex + 1, name.length() - 1); + this.simpleName = name.substring(startIndex + 1, name.length() - 1); + this.name = name; + } else { + this.simpleName = name; + this.name = getFullName(name, dimensions); } - this.name = name; this.dimensions = dimensions; } public HotSpotTypeUnresolved(String name, int dimensions) { assert dimensions >= 0; - this.name = name; + this.simpleName = name; this.dimensions = dimensions; + this.name = getFullName(name, dimensions); } - @Override - public String name() { + private String getFullName(String name, int dimensions) { StringBuilder str = new StringBuilder(); for (int i = 0; i < dimensions; i++) { str.append('['); } - str.append('L').append(name).append(';'); + str.append('L').append(simpleName).append(';'); return str.toString(); } @Override - public String simpleName() { - return name; - } - - @Override public RiType uniqueConcreteSubtype() { throw unresolved("uniqueConcreteSubtype"); } @@ -144,7 +142,7 @@ @Override public RiType componentType() { assert isArrayClass() : "no array class" + name(); - return new HotSpotTypeUnresolved(name, dimensions - 1); + return new HotSpotTypeUnresolved(simpleName, dimensions - 1); } @Override @@ -154,7 +152,7 @@ @Override public RiType arrayOf() { - return new HotSpotTypeUnresolved(name, dimensions + 1); + return new HotSpotTypeUnresolved(simpleName, dimensions + 1); } @Override @@ -168,12 +166,12 @@ } private CiUnresolvedException unresolved(String operation) { - throw new CiUnresolvedException(operation + " not defined for unresolved class " + name); + throw new CiUnresolvedException(operation + " not defined for unresolved class " + simpleName); } @Override public int hashCode() { - return name.hashCode(); + return simpleName.hashCode(); } @Override @@ -183,7 +181,7 @@ @Override public String toString() { - return "HotSpotType<" + name + ", unresolved>"; + return "HotSpotType<" + simpleName + ", unresolved>"; } @Override
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Thu Jan 13 17:45:17 2011 +0100 @@ -37,6 +37,7 @@ import com.sun.cri.xir.CiXirAssembler.XirMark; import com.sun.cri.xir.CiXirAssembler.XirOperand; import com.sun.cri.xir.CiXirAssembler.XirParameter; +import com.sun.cri.xir.CiXirAssembler.XirTemp; /** * @@ -378,6 +379,22 @@ } }; + private KindTemplates writeBarrierTemplate = new KindTemplates() { + + @Override + protected XirTemplate create(CiXirAssembler asm, long flags, CiKind kind) { + asm.restart(CiKind.Void); + XirParameter object = asm.createInputParameter("object", CiKind.Object); + + // Need temp operand, because the write barrier destroys the object pointer. + XirOperand temp = asm.createTemp("temp", CiKind.Object); + asm.mov(temp, object); + + writeBarrier(asm, temp); + return asm.finishTemplate("writeBarrier"); + } + }; + private KindTemplates putFieldTemplates = new KindTemplates(WRITE_BARRIER, NULL_CHECK, UNRESOLVED) { @Override @@ -885,6 +902,11 @@ } @Override + public XirSnippet genWriteBarrier(XirArgument object) { + return new XirSnippet(writeBarrierTemplate.get(null, CiKind.Void), object); + } + + @Override public XirSnippet genPutField(XirSite site, XirArgument object, RiField field, XirArgument value) { if (field.isResolved()) { return new XirSnippet(putFieldTemplates.get(site, field.kind()), object, value, XirArgument.forInt(((HotSpotField) field).offset()));
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java Wed Jan 12 19:14:32 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java Thu Jan 13 17:45:17 2011 +0100 @@ -152,6 +152,7 @@ Logger.info(String.format("%-10s %3d %s", type, e.getLineNumber(), current)); } } + System.out.println("BAILOUT:" + result.bailout().getMessage()); Compiler.getVMEntries().recordBailout(result.bailout().getMessage()); } else { HotSpotTargetMethod.installMethod(riMethod, result.targetMethod());
--- a/src/share/vm/c1x/c1x_Compiler.cpp Wed Jan 12 19:14:32 2011 +0100 +++ b/src/share/vm/c1x/c1x_Compiler.cpp Thu Jan 13 17:45:17 2011 +0100 @@ -143,11 +143,20 @@ } instanceKlass::cast(HotSpotTypeResolved::klass())->initialize(CHECK_NULL); - oop obj = instanceKlass::cast(HotSpotTypeResolved::klass())->allocate_instance(CHECK_NULL); - assert(obj != NULL, "must succeed in allocating instance"); + Handle obj = instanceKlass::cast(HotSpotTypeResolved::klass())->allocate_instance(CHECK_NULL); + assert(obj() != NULL, "must succeed in allocating instance"); + + + if (klass->oop_is_instance()) { + instanceKlass* ik = (instanceKlass*)klass()->klass_part(); + Handle full_name = java_lang_String::create_from_str(ik->signature_name(), CHECK_NULL); + HotSpotType::set_name(obj, full_name()); + } else { + HotSpotType::set_name(obj, name()); + } HotSpotTypeResolved::set_javaMirror(obj, klass->java_mirror()); - HotSpotTypeResolved::set_name(obj, name()); + HotSpotTypeResolved::set_simpleName(obj, name()); HotSpotTypeResolved::set_accessFlags(obj, klass->access_flags().as_int()); HotSpotTypeResolved::set_isInterface(obj, klass->is_interface()); HotSpotTypeResolved::set_isInstanceClass(obj, klass->oop_is_instance()); @@ -167,9 +176,9 @@ HotSpotTypeResolved::set_hasSubclass(obj, false); HotSpotTypeResolved::set_hasFinalizableSubclass(obj, false); - klass->set_c1x_mirror(obj); + klass->set_c1x_mirror(obj()); - return obj; + return obj(); } BasicType C1XCompiler::kindToBasicType(jchar ch) {
--- a/src/share/vm/c1x/c1x_JavaAccess.hpp Wed Jan 12 19:14:32 2011 +0100 +++ b/src/share/vm/c1x/c1x_JavaAccess.hpp Thu Jan 13 17:45:17 2011 +0100 @@ -45,7 +45,7 @@ #define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, oop_field, static_oop_field) \ start_class(HotSpotTypeResolved) \ oop_field(HotSpotTypeResolved, javaMirror, "Ljava/lang/Class;") \ - oop_field(HotSpotTypeResolved, name, "Ljava/lang/String;") \ + oop_field(HotSpotTypeResolved, simpleName, "Ljava/lang/String;") \ int_field(HotSpotTypeResolved, accessFlags) \ boolean_field(HotSpotTypeResolved, hasFinalizer) \ boolean_field(HotSpotTypeResolved, hasSubclass) \ @@ -57,6 +57,9 @@ int_field(HotSpotTypeResolved, instanceSize) \ oop_field(HotSpotTypeResolved, componentType, "Lcom/sun/cri/ri/RiType;") \ end_class \ + start_class(HotSpotType) \ + oop_field(HotSpotType, name, "Ljava/lang/String;") \ + end_class \ start_class(HotSpotField) \ oop_field(HotSpotField, constant, "Lcom/sun/cri/ci/CiConstant;") \ end_class \
--- a/src/share/vm/classfile/systemDictionary.hpp Wed Jan 12 19:14:32 2011 +0100 +++ b/src/share/vm/classfile/systemDictionary.hpp Thu Jan 13 17:45:17 2011 +0100 @@ -183,6 +183,7 @@ template(Long_klass, java_lang_Long, Pre) \ \ template(HotSpotTypeResolved_klass, com_sun_hotspot_c1x_HotSpotTypeResolved, Opt) \ + template(HotSpotType_klass, com_sun_hotspot_c1x_HotSpotType, Opt) \ template(HotSpotField_klass, com_sun_hotspot_c1x_HotSpotField, Opt) \ template(HotSpotMethodResolved_klass, com_sun_hotspot_c1x_HotSpotMethodResolved, Opt) \ template(HotSpotTargetMethod_klass, com_sun_hotspot_c1x_HotSpotTargetMethod, Opt) \
--- a/src/share/vm/classfile/vmSymbols.hpp Wed Jan 12 19:14:32 2011 +0100 +++ b/src/share/vm/classfile/vmSymbols.hpp Thu Jan 13 17:45:17 2011 +0100 @@ -267,6 +267,7 @@ template(com_sun_hotspot_c1x_HotSpotTargetMethod, "com/sun/hotspot/c1x/HotSpotTargetMethod") \ template(com_sun_hotspot_c1x_HotSpotField, "com/sun/hotspot/c1x/HotSpotField") \ template(com_sun_hotspot_c1x_HotSpotTypeResolved, "com/sun/hotspot/c1x/HotSpotTypeResolved") \ + template(com_sun_hotspot_c1x_HotSpotType, "com/sun/hotspot/c1x/HotSpotType") \ template(com_sun_hotspot_c1x_HotSpotExceptionHandler,"com/sun/hotspot/c1x/HotSpotExceptionHandler") \ template(com_sun_hotspot_c1x_HotSpotProxy, "com/sun/hotspot/c1x/HotSpotProxy") \ template(com_sun_hotspot_c1x_Compiler, "com/sun/hotspot/c1x/Compiler") \