changeset 15059:4df6d7c966a2

fixed performance regression in hosted mode execution caused by 5e6f29f287d6
author Doug Simon <doug.simon@oracle.com>
date Thu, 10 Apr 2014 17:48:23 +0200
parents 895e9ecedfe8
children 858d2b91c1f8
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/FastNodeClassRegistry.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompiler.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeSubstitutions.java src/share/vm/graal/graalCompiler.cpp src/share/vm/graal/graalCompilerToVM.cpp src/share/vm/graal/graalVMToCompiler.cpp src/share/vm/graal/graalVMToCompiler.hpp
diffstat 10 files changed, 24 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java	Thu Apr 10 16:52:02 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java	Thu Apr 10 17:48:23 2014 +0200
@@ -284,8 +284,6 @@
 
     Class<?> getJavaMirror(long metaspaceKlass);
 
-    NodeClass getNodeClass(Class<?> c);
-
     void setNodeClass(Class<?> c, NodeClass nodeClass);
 
     long readUnsafeKlassPointer(Object o);
@@ -332,7 +330,7 @@
     /**
      * Fetch the time stamp used for printing inside hotspot. It's relative to VM start to that all
      * events can be ordered.
-     * 
+     *
      * @return milliseconds since VM start
      */
     long getTimeStamp();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java	Thu Apr 10 16:52:02 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java	Thu Apr 10 17:48:23 2014 +0200
@@ -145,9 +145,6 @@
     public native Class<?> getJavaMirror(long metaspaceKlass);
 
     @Override
-    public native NodeClass getNodeClass(Class<?> c);
-
-    @Override
     public native void setNodeClass(Class<?> c, NodeClass nodeClass);
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/FastNodeClassRegistry.java	Thu Apr 10 16:52:02 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/FastNodeClassRegistry.java	Thu Apr 10 17:48:23 2014 +0200
@@ -23,9 +23,12 @@
 package com.oracle.graal.hotspot.bridge;
 
 import com.oracle.graal.graph.*;
+import com.oracle.graal.hotspot.replacements.*;
 
 /**
- * Direct access to the {@code InstanceKlass::_graal_node_class} field.
+ * Updates the {@code InstanceKlass::_graal_node_class} field when a {@link NodeClass} is created so
+ * that the {@link HotSpotNodeClassSubstitutions} and {@link HotSpotNodeSubstitutions}
+ * intrinsifications can read it.
  */
 class FastNodeClassRegistry extends NodeClass.Registry {
 
@@ -41,11 +44,6 @@
     }
 
     @Override
-    public NodeClass get(Class<? extends Node> key) {
-        return vm.getNodeClass(key);
-    }
-
-    @Override
     protected void registered(Class<? extends Node> key, NodeClass value) {
         vm.setNodeClass(key, value);
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompiler.java	Thu Apr 10 16:52:02 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompiler.java	Thu Apr 10 17:48:23 2014 +0200
@@ -38,7 +38,11 @@
 
     void shutdownCompiler() throws Exception;
 
-    void startCompiler(boolean bootstrapEnabled) throws Throwable;
+    /**
+     * @param hostedOnly specifies if the Graal compiler is only being used in hosted mode (i.e., it
+     *            will never compile itself)
+     */
+    void startCompiler(boolean bootstrapEnabled, boolean hostedOnly) throws Throwable;
 
     void bootstrap() throws Throwable;
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Thu Apr 10 16:52:02 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Thu Apr 10 17:48:23 2014 +0200
@@ -142,9 +142,11 @@
         this.runtime = runtime;
     }
 
-    public void startCompiler(boolean bootstrapEnabled) throws Throwable {
+    public void startCompiler(boolean bootstrapEnabled, boolean hostedOnly) throws Throwable {
 
-        FastNodeClassRegistry.initialize(runtime.getCompilerToVM());
+        if (!hostedOnly) {
+            FastNodeClassRegistry.initialize(runtime.getCompilerToVM());
+        }
 
         bootstrapRunning = bootstrapEnabled;
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeSubstitutions.java	Thu Apr 10 16:52:02 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeSubstitutions.java	Thu Apr 10 17:48:23 2014 +0200
@@ -34,7 +34,7 @@
 
     /**
      * Partial substitution of {@link Node#getNodeClass()} that returns the value of the
-     * InstanceKlass::_graal_node_class C++ field if it is non-null.
+     * {@code InstanceKlass::_graal_node_class} field if it is non-null.
      */
     @MethodSubstitution(isStatic = false)
     public static NodeClass getNodeClass(final Node thisObj) {
--- a/src/share/vm/graal/graalCompiler.cpp	Thu Apr 10 16:52:02 2014 +0200
+++ b/src/share/vm/graal/graalCompiler.cpp	Thu Apr 10 17:48:23 2014 +0200
@@ -101,10 +101,12 @@
       _external_deopt_i2c_entry = create_external_deopt_i2c();
 #ifdef COMPILERGRAAL
       bool bootstrap = FLAG_IS_DEFAULT(BootstrapGraal) ? !TieredCompilation : BootstrapGraal;
+      bool hostedOnly = false;
 #else
       bool bootstrap = false;
+      bool hostedOnly = true;
 #endif
-      VMToCompiler::startCompiler(bootstrap);
+      VMToCompiler::startCompiler(bootstrap, hostedOnly);
       _initialized = true;
       CompilationPolicy::completed_vm_startup();
       if (bootstrap) {
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Thu Apr 10 16:52:02 2014 +0200
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Thu Apr 10 17:48:23 2014 +0200
@@ -732,12 +732,6 @@
   return JNIHandles::make_local(klass->java_mirror());
 C2V_END
 
-C2V_VMENTRY(jobject, getNodeClass, (JNIEnv *env, jobject, jobject java_class_handle))
-  oop java_class = JNIHandles::resolve(java_class_handle);
-  InstanceKlass* iklass = (InstanceKlass*) java_lang_Class::as_Klass(java_class);
-  return JNIHandles::make_local(iklass->graal_node_class());
-C2V_END
-
 C2V_VMENTRY(void, setNodeClass, (JNIEnv *env, jobject, jobject java_class_handle, jobject value))
   oop java_class = JNIHandles::resolve(java_class_handle);
   InstanceKlass* iklass = (InstanceKlass*) java_lang_Class::as_Klass(java_class);
@@ -853,7 +847,6 @@
   {CC"reprofile",                                    CC"("METASPACE_METHOD")V",                                        FN_PTR(reprofile)},
   {CC"invalidateInstalledCode",                      CC"("HS_INSTALLED_CODE")V",                                       FN_PTR(invalidateInstalledCode)},
   {CC"getJavaMirror",                                CC"("METASPACE_KLASS")"CLASS,                                     FN_PTR(getJavaMirror)},
-  {CC"getNodeClass",                                 CC"("CLASS")"NODE_CLASS,                                          FN_PTR(getNodeClass)},
   {CC"setNodeClass",                                 CC"("CLASS NODE_CLASS")V",                                        FN_PTR(setNodeClass)},
   {CC"readUnsafeKlassPointer",                       CC"("OBJECT")J",                                                  FN_PTR(readUnsafeKlassPointer)},
   {CC"collectCounters",                              CC"()[J",                                                         FN_PTR(collectCounters)},
--- a/src/share/vm/graal/graalVMToCompiler.cpp	Thu Apr 10 16:52:02 2014 +0200
+++ b/src/share/vm/graal/graalVMToCompiler.cpp	Thu Apr 10 17:48:23 2014 +0200
@@ -144,13 +144,15 @@
   }
 }
 
-void VMToCompiler::startCompiler(jboolean bootstrap_enabled) {
+void VMToCompiler::startCompiler(jboolean bootstrap_enabled, jboolean hosted_only) {
   JavaThread* THREAD = JavaThread::current();
   JavaValue result(T_VOID);
   JavaCallArguments args;
   args.push_oop(instance());
   args.push_int(bootstrap_enabled);
-  JavaCalls::call_interface(&result, vmToCompilerKlass(), vmSymbols::startCompiler_name(), vmSymbols::bool_void_signature(), &args, THREAD);
+  args.push_int(hosted_only);
+  TempNewSymbol bool_bool_void = SymbolTable::new_symbol("(ZZ)V", CHECK);
+  JavaCalls::call_interface(&result, vmToCompilerKlass(), vmSymbols::startCompiler_name(), bool_bool_void, &args, THREAD);
   check_pending_exception("Error while calling startCompiler");
 }
 
--- a/src/share/vm/graal/graalVMToCompiler.hpp	Thu Apr 10 16:52:02 2014 +0200
+++ b/src/share/vm/graal/graalVMToCompiler.hpp	Thu Apr 10 17:48:23 2014 +0200
@@ -66,8 +66,8 @@
   // public abstract void shutdownCompiler();
   static void shutdownCompiler();
   
-  // public abstract void startCompiler(boolean bootstrapEnabled);
-  static void startCompiler(jboolean bootstrap_enabled);
+  // public abstract void startCompiler(boolean bootstrapEnabled, boolean hostedOnly);
+  static void startCompiler(jboolean bootstrap_enabled, jboolean hosted_only);
   
   // public abstract void bootstrap();
   static void bootstrap();