# HG changeset patch # User Thomas Wuerthinger # Date 1308425020 -7200 # Node ID 9fed07e4a375cb8f01f533658bd8ac6d84d9c775 # Parent 77bb196828cb3fa50eeb269555223fca476e540d Changed from method/reflect object back to methodOop, because using method/reflection can create deadlock with the user application (test with -Xcomp). Disabled method caching by default and created a flag -G:StoreResultGraph (otherwise eclipse will fail because of being out of memory). diff -r 77bb196828cb -r 9fed07e4a375 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java Sat Jun 18 19:46:14 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java Sat Jun 18 21:23:40 2011 +0200 @@ -38,6 +38,7 @@ // inlining settings public static boolean Inline = true; + public static boolean StoreResultGraph = ____; public static boolean InlineWithTypeCheck = ____; public static int MaximumInstructionCount = 37000; public static float MaximumInlineRatio = 0.90f; diff -r 77bb196828cb -r 9fed07e4a375 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Sat Jun 18 19:46:14 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Sat Jun 18 21:23:40 2011 +0200 @@ -126,7 +126,7 @@ this.constantPool = runtime.getConstantPool(method); this.createUnwind = createUnwind; - this.storeResultGraph = true; + this.storeResultGraph = GraalOptions.StoreResultGraph; } @Override diff -r 77bb196828cb -r 9fed07e4a375 graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java Sat Jun 18 19:46:14 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java Sat Jun 18 21:23:40 2011 +0200 @@ -33,7 +33,9 @@ */ public final class HotSpotMethodResolvedImpl extends HotSpotMethod implements HotSpotMethodResolved { - private AccessibleObject javaMirror; + // Do not use as a Java object! + @Deprecated + private Object javaMirror; // cached values private final int codeSize; diff -r 77bb196828cb -r 9fed07e4a375 src/share/vm/graal/graalCompiler.cpp --- a/src/share/vm/graal/graalCompiler.cpp Sat Jun 18 19:46:14 2011 +0200 +++ b/src/share/vm/graal/graalCompiler.cpp Sat Jun 18 21:23:40 2011 +0200 @@ -206,23 +206,24 @@ instanceKlass::cast(HotSpotMethodResolved::klass())->initialize(CHECK_NULL); Handle obj = instanceKlass::cast(HotSpotMethodResolved::klass())->allocate_instance(CHECK_NULL); assert(obj() != NULL, "must succeed in allocating instance"); - + HotSpotMethodResolved::set_compiler(obj, VMExits::compilerInstance()()); - oop reflected = getReflectedMethod(method(), CHECK_NULL); - HotSpotMethodResolved::set_javaMirror(obj, reflected); + // (tw) Cannot use reflection here, because the compiler thread could dead lock with the running application. + // oop reflected = getReflectedMethod(method(), CHECK_NULL); + HotSpotMethodResolved::set_javaMirror(obj, method()); HotSpotMethodResolved::set_name(obj, name()); - + KlassHandle klass = method->method_holder(); Handle holder_name = VmIds::toString(klass->name(), CHECK_NULL); oop holder = GraalCompiler::createHotSpotTypeResolved(klass, holder_name, CHECK_NULL); HotSpotMethodResolved::set_holder(obj, holder); - + HotSpotMethodResolved::set_codeSize(obj, method->code_size()); HotSpotMethodResolved::set_accessFlags(obj, method->access_flags().as_int()); HotSpotMethodResolved::set_maxLocals(obj, method->max_locals()); HotSpotMethodResolved::set_maxStackSize(obj, method->max_stack()); HotSpotMethodResolved::set_invocationCount(obj, method->invocation_count()); - + method->set_graal_mirror(obj()); return obj(); } diff -r 77bb196828cb -r 9fed07e4a375 src/share/vm/graal/graalJavaAccess.hpp --- a/src/share/vm/graal/graalJavaAccess.hpp Sat Jun 18 19:46:14 2011 +0200 +++ b/src/share/vm/graal/graalJavaAccess.hpp Sat Jun 18 21:23:40 2011 +0200 @@ -63,7 +63,7 @@ oop_field(HotSpotMethodResolved, compiler, "Lcom/oracle/max/graal/runtime/Compiler;") \ oop_field(HotSpotMethodResolved, name, "Ljava/lang/String;") \ oop_field(HotSpotMethodResolved, holder, "Lcom/sun/cri/ri/RiType;") \ - oop_field(HotSpotMethodResolved, javaMirror, "Ljava/lang/reflect/AccessibleObject;") \ + oop_field(HotSpotMethodResolved, javaMirror, "Ljava/lang/Object;") \ int_field(HotSpotMethodResolved, codeSize) \ int_field(HotSpotMethodResolved, accessFlags) \ int_field(HotSpotMethodResolved, maxLocals) \ diff -r 77bb196828cb -r 9fed07e4a375 src/share/vm/graal/graalVMEntries.cpp --- a/src/share/vm/graal/graalVMEntries.cpp Sat Jun 18 19:46:14 2011 +0200 +++ b/src/share/vm/graal/graalVMEntries.cpp Sat Jun 18 21:23:40 2011 +0200 @@ -39,7 +39,10 @@ methodOop getMethodFromHotSpotMethod(oop hotspot_method) { oop reflected = HotSpotMethodResolved::javaMirror(hotspot_method); assert(reflected != NULL, "NULL not expected"); + return (methodOop)reflected; + // (tw) Cannot use reflection code, because then the compiler can dead lock with the user application (test using -Xcomp). + /* // method is a handle to a java.lang.reflect.Method object oop mirror = NULL; int slot = 0; @@ -58,7 +61,7 @@ // assert(instanceKlass::cast(k)->is_initialized(), "only initialized classes expected"); methodOop m = instanceKlass::cast(k)->method_with_idnum(slot); assert(m != NULL, "deleted method?"); - return m; + return m;*/ } oop getReflectedMethod(methodOop method, TRAPS) { @@ -368,7 +371,6 @@ JNIEXPORT jobject JNICALL Java_com_oracle_graal_runtime_VMEntries_RiConstantPool_1lookupMethod(JNIEnv *env, jobject, jlong vmId, jint index, jbyte byteCode) { TRACE_graal_3("VMEntries::RiConstantPool_lookupMethod"); VM_ENTRY_MARK; - index = GraalCompiler::to_cp_index_u2(index); constantPoolHandle cp = VmIds::get(vmId);