Mercurial > hg > graal-compiler
changeset 1445:a7b84a5e16c6
Remove caching for constant pool entries (same index can be used to retrieve e.g. type and field). Fast fail on bailout in C1X.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Tue, 09 Nov 2010 13:42:06 +0100 |
parents | c0e244017dad |
children | 5f1100e1cb12 8cfe3537a0d3 |
files | c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotConstantPool.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntries.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMEntriesNative.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExits.java c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java c1x4hotspotsrc/hotspot/hotspot SciMark.launch src/share/vm/c1x/c1x_VMEntries.cpp src/share/vm/oops/instanceKlass.cpp |
diffstat | 8 files changed, 27 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- 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<Integer, Object> cache = new HashMap<Integer, Object>(); + 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); } }
--- 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 }
--- 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 }
--- 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);
--- 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; } }
--- 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 @@ <stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="r10-(format)" val="4"/></contentList>"/> <stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <globalVariableList/> "/> <stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList/> "/> -<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-client -C1X:-DetailedAsserts -XX:+UseC1X -XX:+PrintGC -Xms1g -Xmx1g -Xbootclasspath/p:${workspace_loc:hotspot}/../../../maxine/C1X/bin:${workspace_loc:hotspot}/../../../maxine/CRI/bin:${workspace_loc:hotspot}/../../../maxine/Base/bin:${workspace_loc:hotspot}/../../../maxine/Assembler/bin:${workspace_loc:hotspot}/../HotSpotVM/bin -Xbootclasspath/a:/home/tw/Benchmarks/scimark/ -classpath "/home/tw/Benchmarks/scimark" -C1X:-PrintCFGToFile -C1X:-PrintAssembly -XX:+PrintCompilation -C1X:+PrintCompilation -XX:+BackgroundCompilation -XX:CompileOnly=*.visitIf -C1X:+PrintTimers jnt.scimark2.commandline -large"/> +<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-client -C1X:-DetailedAsserts -XX:+UseC1X -XX:+PrintGC -Xms1g -Xmx1g -Xbootclasspath/p:${workspace_loc:hotspot}/../../../maxine/C1X/bin:${workspace_loc:hotspot}/../../../maxine/CRI/bin:${workspace_loc:hotspot}/../../../maxine/Base/bin:${workspace_loc:hotspot}/../../../maxine/Assembler/bin:${workspace_loc:hotspot}/../HotSpotVM/bin -Xbootclasspath/a:/home/tw/Benchmarks/scimark/ -classpath "/home/tw/Benchmarks/scimark" -C1X:-PrintCFGToFile -C1X:-PrintAssembly -XX:+PrintCompilation -C1X:+PrintCompilation -XX:+BackgroundCompilation -C1X:+PrintTimers jnt.scimark2.commandline -large"/> <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="/home/tw/Projects/jre1.7.0/bin/java"/> <stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="hotspot"/> <stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="cdt.managedbuild.toolchain.gnu.solaris.base.945602881"/>
--- 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() {
--- 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());