# HG changeset patch # User Doug Simon # Date 1397144903 -7200 # Node ID 4df6d7c966a204d11452bc27936d87671751ca12 # Parent 895e9ecedfe8507c134855483f0e2ab22f04bf3d fixed performance regression in hosted mode execution caused by 5e6f29f287d6 diff -r 895e9ecedfe8 -r 4df6d7c966a2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java --- 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(); diff -r 895e9ecedfe8 -r 4df6d7c966a2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java --- 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 diff -r 895e9ecedfe8 -r 4df6d7c966a2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/FastNodeClassRegistry.java --- 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 key) { - return vm.getNodeClass(key); - } - - @Override protected void registered(Class key, NodeClass value) { vm.setNodeClass(key, value); } diff -r 895e9ecedfe8 -r 4df6d7c966a2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompiler.java --- 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; diff -r 895e9ecedfe8 -r 4df6d7c966a2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java --- 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; diff -r 895e9ecedfe8 -r 4df6d7c966a2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeSubstitutions.java --- 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) { diff -r 895e9ecedfe8 -r 4df6d7c966a2 src/share/vm/graal/graalCompiler.cpp --- 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) { diff -r 895e9ecedfe8 -r 4df6d7c966a2 src/share/vm/graal/graalCompilerToVM.cpp --- 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)}, diff -r 895e9ecedfe8 -r 4df6d7c966a2 src/share/vm/graal/graalVMToCompiler.cpp --- 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"); } diff -r 895e9ecedfe8 -r 4df6d7c966a2 src/share/vm/graal/graalVMToCompiler.hpp --- 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();