changeset 3020:9fed07e4a375

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).
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Sat, 18 Jun 2011 21:23:40 +0200
parents 77bb196828cb
children a197fd9e273c
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java src/share/vm/graal/graalCompiler.cpp src/share/vm/graal/graalJavaAccess.hpp src/share/vm/graal/graalVMEntries.cpp
diffstat 6 files changed, 17 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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
--- 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;
--- 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<Handle>(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();
 }
--- 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)                                         \
--- 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<constantPoolOop>(vmId);