# HG changeset patch # User Thomas Wuerthinger # Date 1289306526 -3600 # Node ID a7b84a5e16c6e7fdb27cf5f781616367bc4fd3fc # Parent c0e244017dad0fb91934cfc844f033f0b9aac286 Remove caching for constant pool entries (same index can be used to retrieve e.g. type and field). Fast fail on bailout in C1X. diff -r c0e244017dad -r a7b84a5e16c6 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotConstantPool.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotConstantPool.java Tue Nov 09 12:30:21 2010 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotConstantPool.java Tue Nov 09 13:42:06 2010 +0100 @@ -32,8 +32,7 @@ */ public class HotSpotConstantPool implements RiConstantPool, CompilerObject { - long vmId; - HashMap cache = new HashMap(); + private final long vmId; public HotSpotConstantPool(long vmId) { this.vmId = vmId; @@ -47,52 +46,27 @@ @Override public Object lookupConstant(int cpi) { - Object value = cache.get(cpi); - if (value == null) { - value = Compiler.getVMEntries().RiConstantPool_lookupConstant(vmId, cpi); - cache.put(cpi, value); - } - return value; + return Compiler.getVMEntries().RiConstantPool_lookupConstant(vmId, cpi); } @Override public RiMethod lookupMethod(int cpi, int byteCode) { - RiMethod value = (RiMethod) cache.get(cpi); - if (value == null) { - value = Compiler.getVMEntries().RiConstantPool_lookupMethod(vmId, cpi, (byte) byteCode); - cache.put(cpi, value); - } - return value; + return Compiler.getVMEntries().RiConstantPool_lookupMethod(vmId, cpi, (byte) byteCode); } @Override public RiSignature lookupSignature(int cpi) { - RiSignature value = (RiSignature) cache.get(cpi); - if (value == null) { - value = Compiler.getVMEntries().RiConstantPool_lookupSignature(vmId, cpi); - cache.put(cpi, value); - } - return value; + return Compiler.getVMEntries().RiConstantPool_lookupSignature(vmId, cpi); } @Override public RiType lookupType(int cpi, int opcode) { - RiType value = (RiType) cache.get(cpi); - if (value == null) { - value = Compiler.getVMEntries().RiConstantPool_lookupType(vmId, cpi); - cache.put(cpi, value); - } - return value; + return Compiler.getVMEntries().RiConstantPool_lookupType(vmId, cpi); } @Override public RiField lookupField(int cpi, int opcode) { - RiField value = (RiField) cache.get(cpi); - if (value == null) { - value = Compiler.getVMEntries().RiConstantPool_lookupField(vmId, cpi); - cache.put(cpi, value); - } - return value; + return Compiler.getVMEntries().RiConstantPool_lookupField(vmId, cpi); } } diff -r c0e244017dad -r a7b84a5e16c6 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java Tue Nov 09 12:30:21 2010 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java Tue Nov 09 13:42:06 2010 +0100 @@ -81,5 +81,7 @@ boolean RiMethod_hasBalancedMonitors(long vmId); + void recordBailout(String reason); + // Checkstyle: resume } diff -r c0e244017dad -r a7b84a5e16c6 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java Tue Nov 09 12:30:21 2010 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java Tue Nov 09 13:42:06 2010 +0100 @@ -103,5 +103,9 @@ @Override public native boolean RiMethod_hasBalancedMonitors(long vmId); + + @Override + public native void recordBailout(String reason); + // Checkstyle: resume } diff -r c0e244017dad -r a7b84a5e16c6 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExits.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExits.java Tue Nov 09 12:30:21 2010 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExits.java Tue Nov 09 13:42:06 2010 +0100 @@ -33,7 +33,7 @@ boolean setOption(String option); - void compileMethod(long methodVmId, String name, int entryBCI); + void compileMethod(long methodVmId, String name, int entryBCI) throws Throwable; RiMethod createRiMethodResolved(long vmId, String name); diff -r c0e244017dad -r a7b84a5e16c6 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java Tue Nov 09 12:30:21 2010 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java Tue Nov 09 13:42:06 2010 +0100 @@ -103,7 +103,7 @@ } @Override - public void compileMethod(long methodVmId, String name, int entryBCI) { + public void compileMethod(long methodVmId, String name, int entryBCI) throws Throwable { if (!compileMethods) { return; @@ -118,6 +118,7 @@ StringWriter out = new StringWriter(); result.bailout().printStackTrace(new PrintWriter(out)); Logger.info("Bailout:\n" + out.toString()); + Compiler.getVMEntries().recordBailout(result.bailout().getMessage()); } else { Logger.log("Compilation result: " + result.targetMethod()); HotSpotTargetMethod.installMethod(riMethod, result.targetMethod()); @@ -126,6 +127,7 @@ StringWriter out = new StringWriter(); t.printStackTrace(new PrintWriter(out)); Logger.info("Compilation interrupted:\n" + out.toString()); + throw t; } } diff -r c0e244017dad -r a7b84a5e16c6 c1x4hotspotsrc/hotspot/hotspot SciMark.launch --- a/c1x4hotspotsrc/hotspot/hotspot SciMark.launch Tue Nov 09 12:30:21 2010 +0100 +++ b/c1x4hotspotsrc/hotspot/hotspot SciMark.launch Tue Nov 09 13:42:06 2010 +0100 @@ -38,7 +38,7 @@ - + diff -r c0e244017dad -r a7b84a5e16c6 src/share/vm/c1x/c1x_VMEntries.cpp --- a/src/share/vm/c1x/c1x_VMEntries.cpp Tue Nov 09 12:30:21 2010 +0100 +++ b/src/share/vm/c1x/c1x_VMEntries.cpp Tue Nov 09 13:42:06 2010 +0100 @@ -449,6 +449,11 @@ return id; } +// public void recordBailout(String reason); +JNIEXPORT void JNICALL Java_com_sun_hotspot_c1x_VMEntries_recordBailout(JNIEnv *jniEnv, jobject) { + fatal("Bailout in C1X"); +} + @@ -495,7 +500,8 @@ {CC"getType", CC"("CLASS")"TYPE, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getType)}, {CC"getConfiguration", CC"()"CONFIG, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getConfiguration)}, {CC"installMethod", CC"("TARGET_METHOD")V", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_installMethod)}, - {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_installStub)} + {CC"installStub", CC"("TARGET_METHOD")"PROXY, FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_installStub)}, + {CC"recordBailout", CC"("STRING")V", FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_recordBailout)} }; int VMEntries_methods_count() { diff -r c0e244017dad -r a7b84a5e16c6 src/share/vm/oops/instanceKlass.cpp --- a/src/share/vm/oops/instanceKlass.cpp Tue Nov 09 12:30:21 2010 +0100 +++ b/src/share/vm/oops/instanceKlass.cpp Tue Nov 09 13:42:06 2010 +0100 @@ -572,7 +572,9 @@ } objArrayOop instanceKlass::allocate_objArray(int n, int length, TRAPS) { - if (length < 0) THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); + if (length < 0) { + THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); + } if (length > arrayOopDesc::max_array_length(T_OBJECT)) { report_java_out_of_memory("Requested array size exceeds VM limit"); THROW_OOP_0(Universe::out_of_memory_error_array_size());