changeset 6674:fd71ca8c5f88

VM infrstructure for OnStackReplacement
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 07 Nov 2012 13:18:04 +0100
parents a52320a6bbda
children 6eb83c6eb177
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompilationResult.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java src/cpu/x86/vm/c1_Runtime1_x86.cpp src/cpu/x86/vm/c1_globals_x86.hpp src/share/vm/c1/c1_Runtime1.cpp src/share/vm/c1/c1_Runtime1.hpp src/share/vm/classfile/systemDictionary.hpp src/share/vm/classfile/vmSymbols.hpp src/share/vm/graal/graalCodeInstaller.cpp src/share/vm/graal/graalCompiler.hpp src/share/vm/graal/graalCompilerToVM.cpp src/share/vm/graal/graalJavaAccess.hpp src/share/vm/runtime/compilationPolicy.cpp
diffstat 15 files changed, 193 insertions(+), 174 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java	Wed Nov 07 12:18:37 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java	Wed Nov 07 13:18:04 2012 +0100
@@ -150,7 +150,7 @@
             @Override
             public void run() {
                 final CodeInfo[] info = Debug.isDumpEnabled() ? new CodeInfo[1] : null;
-                graalRuntime.getRuntime().installMethod(method, tm, info);
+                graalRuntime.getRuntime().installMethod(method, -1, tm, info);
                 if (info != null) {
                     Debug.dump(new Object[] {tm, info[0]}, "After code installation");
                 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompilationResult.java	Wed Nov 07 12:18:37 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompilationResult.java	Wed Nov 07 13:18:04 2012 +0100
@@ -36,14 +36,16 @@
     private static final long serialVersionUID = 7807321392203253218L;
     public final CompilationResult comp;
     public final HotSpotResolvedJavaMethod method; // used only for methods
+    public final int entryBCI; // used only for methods
     public final String name; // used only for stubs
 
     public final Site[] sites;
     public final ExceptionHandler[] exceptionHandlers;
 
-    public HotSpotCompilationResult(HotSpotResolvedJavaMethod method, CompilationResult comp) {
+    public HotSpotCompilationResult(HotSpotResolvedJavaMethod method, int entryBCI, CompilationResult comp) {
         this.method = method;
         this.comp = comp;
+        this.entryBCI = entryBCI;
         this.name = null;
 
         sites = getSortedSites(comp);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java	Wed Nov 07 12:18:37 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java	Wed Nov 07 13:18:04 2012 +0100
@@ -179,6 +179,7 @@
     public long vmErrorStub;
     public long deoptimizeStub;
     public long unwindExceptionStub;
+    public long osrMigrationEndStub;
     public long registerFinalizerStub;
     public long setDeoptInfoStub;
     public long createNullPointerExceptionStub;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java	Wed Nov 07 12:18:37 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java	Wed Nov 07 13:18:04 2012 +0100
@@ -667,15 +667,15 @@
         return hsInfo;
     }
 
-    public void installMethod(ResolvedJavaMethod method, CompilationResult compResult, CodeInfo[] info) {
+    public void installMethod(ResolvedJavaMethod method, int entryBCI, CompilationResult compResult, CodeInfo[] info) {
         HotSpotCodeInfo hsInfo = makeInfo(method, compResult, info);
-        graalRuntime.getCompilerToVM().installMethod(new HotSpotCompilationResult((HotSpotResolvedJavaMethod) method, compResult), true, hsInfo);
+        graalRuntime.getCompilerToVM().installMethod(new HotSpotCompilationResult((HotSpotResolvedJavaMethod) method, entryBCI, compResult), true, hsInfo);
     }
 
     @Override
     public InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult, CodeInfo[] info) {
         HotSpotCodeInfo hsInfo = makeInfo(method, compResult, info);
-        return graalRuntime.getCompilerToVM().installMethod(new HotSpotCompilationResult((HotSpotResolvedJavaMethod) method, compResult), false, hsInfo);
+        return graalRuntime.getCompilerToVM().installMethod(new HotSpotCompilationResult((HotSpotResolvedJavaMethod) method, -1, compResult), false, hsInfo);
     }
 
     @Override
--- a/src/cpu/x86/vm/c1_Runtime1_x86.cpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/cpu/x86/vm/c1_Runtime1_x86.cpp	Wed Nov 07 13:18:04 2012 +0100
@@ -1889,6 +1889,17 @@
       break;
     }
 
+    case graal_OSR_migration_end_id: {
+    __ enter();
+    save_live_registers(sasm, 0);
+    __ movptr(c_rarg0, j_rarg0);
+    __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_end)));
+    restore_live_registers(sasm);
+    __ leave();
+    __ ret(0);
+      break;
+    }
+
     case graal_set_deopt_info_id: {
     __ movptr(Address(r15_thread, JavaThread::graal_deopt_info_offset()), rscratch1);
     __ ret(0);
--- a/src/cpu/x86/vm/c1_globals_x86.hpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/cpu/x86/vm/c1_globals_x86.hpp	Wed Nov 07 13:18:04 2012 +0100
@@ -51,7 +51,7 @@
 
 #ifdef GRAAL
 define_pd_global(bool, ProfileTraps,                 true );
-define_pd_global(bool, UseOnStackReplacement,        false);
+define_pd_global(bool, UseOnStackReplacement,        true);
 define_pd_global(intx, CompileThreshold,             2500 );
 define_pd_global(intx, InitialCodeCacheSize,         4*M  );
 define_pd_global(intx, ReservedCodeCacheSize,        64*M );
--- a/src/share/vm/c1/c1_Runtime1.cpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/c1/c1_Runtime1.cpp	Wed Nov 07 13:18:04 2012 +0100
@@ -208,6 +208,7 @@
 #ifdef GRAAL
     case graal_verify_oop_id:
     case graal_unwind_exception_call_id:
+    case graal_OSR_migration_end_id:
     case graal_arithmetic_frem_id:
     case graal_arithmetic_drem_id:
     case graal_set_deopt_info_id:
--- a/src/share/vm/c1/c1_Runtime1.hpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/c1/c1_Runtime1.hpp	Wed Nov 07 13:18:04 2012 +0100
@@ -71,6 +71,7 @@
   stub(fpu2long_stub)                \
   stub(counter_overflow)             \
   stub(graal_unwind_exception_call)  \
+  stub(graal_OSR_migration_end)      \
   stub(graal_arithmetic_frem)        \
   stub(graal_arithmetic_drem)        \
   stub(graal_monitorenter)           \
--- a/src/share/vm/classfile/systemDictionary.hpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/classfile/systemDictionary.hpp	Wed Nov 07 13:18:04 2012 +0100
@@ -200,13 +200,13 @@
   template(BytecodePosition_klass,                com_oracle_graal_api_code_BytecodePosition,                   Opt) \
   template(DebugInfo_klass,                       com_oracle_graal_api_code_DebugInfo,                          Opt) \
   template(BytecodeFrame_klass,                   com_oracle_graal_api_code_BytecodeFrame,                      Opt) \
-  template(InstalledCode_klass,                   com_oracle_graal_api_code_InstalledCode,                      Opt) \
-  template(InstalledCode_Call_klass,              com_oracle_graal_api_code_InstalledCode_Call,                 Opt) \
-  template(InstalledCode_DataPatch_klass,         com_oracle_graal_api_code_InstalledCode_DataPatch,            Opt) \
-  template(InstalledCode_ExceptionHandler_klass,  com_oracle_graal_api_code_InstalledCode_ExceptionHandler,     Opt) \
-  template(InstalledCode_Mark_klass,              com_oracle_graal_api_code_InstalledCode_Mark,                 Opt) \
-  template(InstalledCode_Safepoint_klass,         com_oracle_graal_api_code_InstalledCode_Safepoint,            Opt) \
-  template(InstalledCode_Site_klass,              com_oracle_graal_api_code_InstalledCode_Site,                 Opt) \
+  template(CompilationResult_klass,               com_oracle_graal_api_code_CompilationResult,                  Opt) \
+  template(CompilationResult_Call_klass,          com_oracle_graal_api_code_CompilationResult_Call,             Opt) \
+  template(CompilationResult_DataPatch_klass,     com_oracle_graal_api_code_CompilationResult_DataPatch,        Opt) \
+  template(CompilationResult_ExceptionHandler_klass, com_oracle_graal_api_code_CompilationResult_ExceptionHandler, Opt) \
+  template(CompilationResult_Mark_klass,          com_oracle_graal_api_code_CompilationResult_Mark,             Opt) \
+  template(CompilationResult_Safepoint_klass,     com_oracle_graal_api_code_CompilationResult_Safepoint,        Opt) \
+  template(CompilationResult_Site_klass,          com_oracle_graal_api_code_CompilationResult_Site,             Opt) \
   template(code_MonitorValue_klass,               com_oracle_graal_api_code_MonitorValue,                       Opt) \
   template(code_Register_klass,                   com_oracle_graal_api_code_Register,                           Opt) \
   template(RegisterValue_klass,                   com_oracle_graal_api_code_RegisterValue,                      Opt) \
--- a/src/share/vm/classfile/vmSymbols.hpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/classfile/vmSymbols.hpp	Wed Nov 07 13:18:04 2012 +0100
@@ -303,13 +303,13 @@
   template(com_oracle_graal_api_code_Assumptions_MethodContents,     "com/oracle/graal/api/code/Assumptions$MethodContents")          \
   template(com_oracle_graal_api_code_Assumptions_ConcreteSubtype,    "com/oracle/graal/api/code/Assumptions$ConcreteSubtype")         \
   template(com_oracle_graal_api_code_Assumptions_ConcreteMethod,     "com/oracle/graal/api/code/Assumptions$ConcreteMethod")          \
-  template(com_oracle_graal_api_code_InstalledCode,                  "com/oracle/graal/api/code/CompilationResult")                   \
-  template(com_oracle_graal_api_code_InstalledCode_Call,             "com/oracle/graal/api/code/CompilationResult$Call")              \
-  template(com_oracle_graal_api_code_InstalledCode_DataPatch,        "com/oracle/graal/api/code/CompilationResult$DataPatch")         \
-  template(com_oracle_graal_api_code_InstalledCode_ExceptionHandler, "com/oracle/graal/api/code/CompilationResult$ExceptionHandler")  \
-  template(com_oracle_graal_api_code_InstalledCode_Mark,             "com/oracle/graal/api/code/CompilationResult$Mark")              \
-  template(com_oracle_graal_api_code_InstalledCode_Safepoint,        "com/oracle/graal/api/code/CompilationResult$Safepoint")         \
-  template(com_oracle_graal_api_code_InstalledCode_Site,             "com/oracle/graal/api/code/CompilationResult$Site")              \
+  template(com_oracle_graal_api_code_CompilationResult,              "com/oracle/graal/api/code/CompilationResult")                   \
+  template(com_oracle_graal_api_code_CompilationResult_Call,         "com/oracle/graal/api/code/CompilationResult$Call")              \
+  template(com_oracle_graal_api_code_CompilationResult_DataPatch,    "com/oracle/graal/api/code/CompilationResult$DataPatch")         \
+  template(com_oracle_graal_api_code_CompilationResult_ExceptionHandler, "com/oracle/graal/api/code/CompilationResult$ExceptionHandler") \
+  template(com_oracle_graal_api_code_CompilationResult_Mark,         "com/oracle/graal/api/code/CompilationResult$Mark")              \
+  template(com_oracle_graal_api_code_CompilationResult_Safepoint,    "com/oracle/graal/api/code/CompilationResult$Safepoint")         \
+  template(com_oracle_graal_api_code_CompilationResult_Site,         "com/oracle/graal/api/code/CompilationResult$Site")              \
   template(com_oracle_graal_api_code_BytecodeFrame,                  "com/oracle/graal/api/code/BytecodeFrame")                       \
   template(com_oracle_graal_api_code_BytecodePosition,               "com/oracle/graal/api/code/BytecodePosition")                    \
   template(com_oracle_graal_api_code_DebugInfo,                      "com/oracle/graal/api/code/DebugInfo")                           \
--- a/src/share/vm/graal/graalCodeInstaller.cpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/graal/graalCodeInstaller.cpp	Wed Nov 07 13:18:04 2012 +0100
@@ -247,7 +247,7 @@
   _env->set_oop_recorder(_oop_recorder);
   _env->set_dependencies(_dependencies);
   _dependencies = new Dependencies(_env);
-  Handle assumptions_handle = InstalledCode::assumptions(HotSpotCompilationResult::comp(target_method));
+  Handle assumptions_handle = CompilationResult::assumptions(HotSpotCompilationResult::comp(target_method));
   if (!assumptions_handle.is_null()) {
     objArrayHandle assumptions(Thread::current(), (objArrayOop)Assumptions::list(assumptions_handle()));
     int length = assumptions->length();
@@ -275,6 +275,7 @@
   GraalCompiler::initialize_buffer_blob();
   CodeBuffer buffer(JavaThread::current()->get_buffer_blob());
   jobject comp_result_obj = JNIHandles::make_local(comp_result());
+  jint entry_bci = HotSpotCompilationResult::entryBCI(comp_result);
   initialize_assumptions(JNIHandles::resolve(comp_result_obj));
 
   {
@@ -287,7 +288,7 @@
   int stack_slots = _total_frame_size / HeapWordSize; // conversion to words
   methodHandle method = getMethodFromHotSpotMethod(HotSpotCompilationResult::method(JNIHandles::resolve(comp_result_obj))); 
 
-  nm = GraalEnv::register_method(method, -1, &_offsets, _custom_stack_area_offset, &buffer, stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table,
+  nm = GraalEnv::register_method(method, entry_bci, &_offsets, _custom_stack_area_offset, &buffer, stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table,
     &_implicit_exception_table, GraalCompiler::instance(), _debug_recorder, _dependencies, NULL, -1, true, false, install_code);
 
   method->clear_queued_for_compilation();
@@ -326,11 +327,11 @@
   _sites = (arrayOop) HotSpotCompilationResult::sites(comp_result);
   _exception_handlers = (arrayOop) HotSpotCompilationResult::exceptionHandlers(comp_result);
 
-  _code = (arrayOop) InstalledCode::targetCode(_comp_result);
-  _code_size = InstalledCode::targetCodeSize(_comp_result);
+  _code = (arrayOop) CompilationResult::targetCode(_comp_result);
+  _code_size = CompilationResult::targetCodeSize(_comp_result);
   // The frame size we get from the target method does not include the return address, so add one word for it here.
-  _total_frame_size = InstalledCode::frameSize(_comp_result) + HeapWordSize;
-  _custom_stack_area_offset = InstalledCode::customStackAreaOffset(_comp_result);
+  _total_frame_size = CompilationResult::frameSize(_comp_result) + HeapWordSize;
+  _custom_stack_area_offset = CompilationResult::customStackAreaOffset(_comp_result);
 
   // (very) conservative estimate: each site needs a constant section entry
   _constants_size = _sites->length() * (BytesPerLong*2);
@@ -363,18 +364,18 @@
   oop* sites = (oop*) _sites->base(T_OBJECT);
   for (int i = 0; i < _sites->length(); i++) {
     oop site = sites[i];
-    jint pc_offset = InstalledCode_Site::pcOffset(site);
+    jint pc_offset = CompilationResult_Site::pcOffset(site);
 
-    if (site->is_a(InstalledCode_Call::klass())) {
+    if (site->is_a(CompilationResult_Call::klass())) {
       TRACE_graal_4("call at %i", pc_offset);
       site_Call(buffer, pc_offset, site);
-    } else if (site->is_a(InstalledCode_Safepoint::klass())) {
+    } else if (site->is_a(CompilationResult_Safepoint::klass())) {
       TRACE_graal_4("safepoint at %i", pc_offset);
       site_Safepoint(buffer, pc_offset, site);
-    } else if (site->is_a(InstalledCode_DataPatch::klass())) {
+    } else if (site->is_a(CompilationResult_DataPatch::klass())) {
       TRACE_graal_4("datapatch at %i", pc_offset);
       site_DataPatch(buffer, pc_offset, site);
-    } else if (site->is_a(InstalledCode_Mark::klass())) {
+    } else if (site->is_a(CompilationResult_Mark::klass())) {
       TRACE_graal_4("mark at %i", pc_offset);
       site_Mark(buffer, pc_offset, site);
     } else {
@@ -426,8 +427,8 @@
     oop* exception_handlers = (oop*) _exception_handlers->base(T_OBJECT);
     for (int i = 0; i < _exception_handlers->length(); i++) {
       oop exc = exception_handlers[i];
-      jint pc_offset = InstalledCode_Site::pcOffset(exc);
-      jint handler_offset = InstalledCode_ExceptionHandler::handlerPos(exc);
+      jint pc_offset = CompilationResult_Site::pcOffset(exc);
+      jint handler_offset = CompilationResult_ExceptionHandler::handlerPos(exc);
 
       // Subtable header
       _exception_handler_table.add_entry(HandlerTableEntry(1, pc_offset, 0));
@@ -517,7 +518,7 @@
 }
 
 void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, oop site) {
-  oop debug_info = InstalledCode_Safepoint::debugInfo(site);
+  oop debug_info = CompilationResult_Safepoint::debugInfo(site);
   assert(debug_info != NULL, "debug info expected");
 
   // address instruction = _instructions->start() + pc_offset;
@@ -531,7 +532,7 @@
 }
 
 void CodeInstaller::site_Call(CodeBuffer& buffer, jint pc_offset, oop site) {
-  oop target = InstalledCode_Call::target(site);
+  oop target = CompilationResult_Call::target(site);
   instanceKlass* target_klass = instanceKlass::cast(target->klass());
 
   oop hotspot_method = NULL; // JavaMethod
@@ -543,7 +544,7 @@
     hotspot_method = target;
   }
 
-  oop debug_info = InstalledCode_Call::debugInfo(site);
+  oop debug_info = CompilationResult_Call::debugInfo(site);
 
   assert((hotspot_method ? 1 : 0) + (global_stub ? 1 : 0) == 1, "Call site needs exactly one type");
 
@@ -659,8 +660,8 @@
 }
 
 void CodeInstaller::site_DataPatch(CodeBuffer& buffer, jint pc_offset, oop site) {
-  oop constant = InstalledCode_DataPatch::constant(site);
-  int alignment = InstalledCode_DataPatch::alignment(site);
+  oop constant = CompilationResult_DataPatch::constant(site);
+  int alignment = CompilationResult_DataPatch::alignment(site);
   oop kind = Constant::kind(constant);
 
   address instruction = _instructions->start() + pc_offset;
@@ -723,8 +724,8 @@
 }
 
 void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, oop site) {
-  oop id_obj = InstalledCode_Mark::id(site);
-  arrayOop references = (arrayOop) InstalledCode_Mark::references(site);
+  oop id_obj = CompilationResult_Mark::id(site);
+  arrayOop references = (arrayOop) CompilationResult_Mark::references(site);
 
   if (id_obj != NULL) {
     assert(java_lang_boxing_object::is_instance(id_obj, T_INT), "Integer id expected");
@@ -751,7 +752,7 @@
       case MARK_STATIC_CALL_STUB: {
         assert(references->length() == 1, "static call stub needs one reference");
         oop ref = ((oop*) references->base(T_OBJECT))[0];
-        address call_pc = _instructions->start() + InstalledCode_Site::pcOffset(ref);
+        address call_pc = _instructions->start() + CompilationResult_Site::pcOffset(ref);
         _instructions->relocate(instruction, static_stub_Relocation::spec(call_pc));
         _instructions->relocate(instruction, oop_Relocation::spec_for_immediate(), Assembler::imm_operand);
         break;
@@ -805,14 +806,14 @@
         assert(references->length() == 2, "MARK_KLASS_PATCHING/MARK_ACCESS_FIELD_PATCHING needs 2 references");
         oop ref1 = ((oop*) references->base(T_OBJECT))[0];
         oop ref2 = ((oop*) references->base(T_OBJECT))[1];
-        int i_byte_count = InstalledCode_Site::pcOffset(ref2) - InstalledCode_Site::pcOffset(ref1);
+        int i_byte_count = CompilationResult_Site::pcOffset(ref2) - CompilationResult_Site::pcOffset(ref1);
         assert(i_byte_count == (unsigned char)i_byte_count, "invalid offset");
         *byte_count = i_byte_count;
         *being_initialized_entry_offset = *byte_count + *byte_skip;
 
         // we need to correct the offset of a field access - it's created with MAX_INT to ensure the correct size, and hotspot expects 0
         if (id == MARK_ACCESS_FIELD_PATCHING) {
-          NativeMovRegMem* inst = nativeMovRegMem_at(_instructions->start() + InstalledCode_Site::pcOffset(ref1));
+          NativeMovRegMem* inst = nativeMovRegMem_at(_instructions->start() + CompilationResult_Site::pcOffset(ref1));
           assert(inst->offset() == max_jint, "unexpected offset value");
           inst->set_offset(0);
         }
--- a/src/share/vm/graal/graalCompiler.hpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/graal/graalCompiler.hpp	Wed Nov 07 13:18:04 2012 +0100
@@ -50,7 +50,7 @@
 
   // Native / OSR not supported
   virtual bool supports_native()                 { return true; }
-  virtual bool supports_osr   ()                 { return false; }
+  virtual bool supports_osr   ()                 { return true; }
 
   // Pretend to be C1
   bool is_c1   ()                                { return true; }
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Wed Nov 07 13:18:04 2012 +0100
@@ -739,6 +739,7 @@
   set_long(env, config, "vmErrorStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_vm_error_id)));
   set_long(env, config, "deoptimizeStub", VmIds::addStub(SharedRuntime::deopt_blob()->uncommon_trap()));
   set_long(env, config, "unwindExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_unwind_exception_call_id)));
+  set_long(env, config, "osrMigrationEndStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_OSR_migration_end_id)));
   set_long(env, config, "registerFinalizerStub", VmIds::addStub(Runtime1::entry_for(Runtime1::register_finalizer_id)));
   set_long(env, config, "setDeoptInfoStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_set_deopt_info_id)));
   set_long(env, config, "createNullPointerExceptionStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_create_null_pointer_exception_id)));
--- a/src/share/vm/graal/graalJavaAccess.hpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/graal/graalJavaAccess.hpp	Wed Nov 07 13:18:04 2012 +0100
@@ -29,7 +29,7 @@
 #include "classfile/systemDictionary.hpp"
 #include "oops/instanceMirrorKlass.hpp"
 
-/* This macro defines the structure of the InstalledCode - classes.
+/* This macro defines the structure of the CompilationResult - classes.
  * It will generate classes with accessors similar to javaClasses.hpp, but with specializations for oops, Handles and jni handles.
  *
  * The public interface of these classes will look like this:
@@ -72,147 +72,148 @@
     int_field(HotSpotResolvedJavaMethod, maxLocals)                                         \
     int_field(HotSpotResolvedJavaMethod, maxStackSize)                                      \
     boolean_field(HotSpotResolvedJavaMethod, canBeInlined)                                  \
-  end_class                                                                             \
-  start_class(HotSpotMethodData)                                                        \
-    oop_field(HotSpotMethodData, hotspotMirror, "Ljava/lang/Object;")                   \
-    int_field(HotSpotMethodData, normalDataSize)                                        \
-    int_field(HotSpotMethodData, extraDataSize)                                         \
-  end_class                                                                             \
+  end_class                                                                                 \
+  start_class(HotSpotMethodData)                                                            \
+    oop_field(HotSpotMethodData, hotspotMirror, "Ljava/lang/Object;")                       \
+    int_field(HotSpotMethodData, normalDataSize)                                            \
+    int_field(HotSpotMethodData, extraDataSize)                                             \
+  end_class                                                                                 \
   start_class(HotSpotJavaType)                                                              \
     oop_field(HotSpotJavaType, name, "Ljava/lang/String;")                                  \
-  end_class                                                                             \
-  start_class(HotSpotResolvedJavaField)                                                             \
-    oop_field(HotSpotResolvedJavaField, constant, "Lcom/oracle/graal/api/meta/Constant;")             \
-    int_field(HotSpotResolvedJavaField, offset)                                                     \
-    int_field(HotSpotResolvedJavaField, accessFlags)                                                \
-  end_class                                                                             \
-  start_class(HotSpotCompiledMethod)                                                    \
-    long_field(HotSpotCompiledMethod, nmethod)                                          \
-    oop_field(HotSpotCompiledMethod, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;")\
-  end_class                                                                             \
-  start_class(HotSpotCodeInfo)                                                          \
-    long_field(HotSpotCodeInfo, start)                                                  \
-    oop_field(HotSpotCodeInfo, code, "[B")                                              \
-  end_class                                                                             \
-  start_class(HotSpotCompilationResult)                                                      \
+  end_class                                                                                 \
+  start_class(HotSpotResolvedJavaField)                                                     \
+    oop_field(HotSpotResolvedJavaField, constant, "Lcom/oracle/graal/api/meta/Constant;")   \
+    int_field(HotSpotResolvedJavaField, offset)                                             \
+    int_field(HotSpotResolvedJavaField, accessFlags)                                        \
+  end_class                                                                                 \
+  start_class(HotSpotCompiledMethod)                                                        \
+    long_field(HotSpotCompiledMethod, nmethod)                                              \
+    oop_field(HotSpotCompiledMethod, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \
+  end_class                                                                                 \
+  start_class(HotSpotCodeInfo)                                                              \
+    long_field(HotSpotCodeInfo, start)                                                      \
+    oop_field(HotSpotCodeInfo, code, "[B")                                                  \
+  end_class                                                                                 \
+  start_class(HotSpotCompilationResult)                                                     \
     oop_field(HotSpotCompilationResult, comp, "Lcom/oracle/graal/api/code/CompilationResult;") \
     oop_field(HotSpotCompilationResult, method, "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod;") \
-    oop_field(HotSpotCompilationResult, name, "Ljava/lang/String;")                          \
+    int_field(HotSpotCompilationResult, entryBCI)                                           \
+    oop_field(HotSpotCompilationResult, name, "Ljava/lang/String;")                         \
     oop_field(HotSpotCompilationResult, sites, "[Lcom/oracle/graal/api/code/CompilationResult$Site;") \
     oop_field(HotSpotCompilationResult, exceptionHandlers, "[Lcom/oracle/graal/api/code/CompilationResult$ExceptionHandler;") \
-  end_class                                                                             \
-  start_class(ExceptionHandler)                                                  \
-    int_field(ExceptionHandler, startBCI)                                        \
-    int_field(ExceptionHandler, endBCI)                                          \
-    int_field(ExceptionHandler, handlerBCI)                                      \
-    int_field(ExceptionHandler, catchTypeCPI)                                 \
-    oop_field(ExceptionHandler, catchType, "Lcom/oracle/graal/api/meta/JavaType;")    \
-  end_class                                                                             \
-  start_class(InstalledCode)                                                           \
-    int_field(InstalledCode, frameSize)                                                \
-    int_field(InstalledCode, customStackAreaOffset)                                    \
-    oop_field(InstalledCode, targetCode, "[B")                                         \
-    oop_field(InstalledCode, assumptions, "Lcom/oracle/graal/api/code/Assumptions;")     \
-    int_field(InstalledCode, targetCodeSize)                                           \
-  end_class                                                                             \
-  start_class(Assumptions)                                                            \
-    oop_field(Assumptions, list, "[Lcom/oracle/graal/api/code/Assumptions$Assumption;") \
-  end_class                                                                             \
-  start_class(Assumptions_MethodContents)                                             \
+  end_class                                                                                 \
+  start_class(ExceptionHandler)                                                             \
+    int_field(ExceptionHandler, startBCI)                                                   \
+    int_field(ExceptionHandler, endBCI)                                                     \
+    int_field(ExceptionHandler, handlerBCI)                                                 \
+    int_field(ExceptionHandler, catchTypeCPI)                                               \
+    oop_field(ExceptionHandler, catchType, "Lcom/oracle/graal/api/meta/JavaType;")          \
+  end_class                                                                                 \
+  start_class(CompilationResult)                                                            \
+    int_field(CompilationResult, frameSize)                                                 \
+    int_field(CompilationResult, customStackAreaOffset)                                     \
+    oop_field(CompilationResult, targetCode, "[B")                                          \
+    oop_field(CompilationResult, assumptions, "Lcom/oracle/graal/api/code/Assumptions;")    \
+    int_field(CompilationResult, targetCodeSize)                                            \
+  end_class                                                                                 \
+  start_class(Assumptions)                                                                  \
+    oop_field(Assumptions, list, "[Lcom/oracle/graal/api/code/Assumptions$Assumption;")     \
+  end_class                                                                                 \
+  start_class(Assumptions_MethodContents)                                                   \
     oop_field(Assumptions_MethodContents, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \
-  end_class                                                                             \
-  start_class(Assumptions_ConcreteSubtype)                                            \
+  end_class                                                                                 \
+  start_class(Assumptions_ConcreteSubtype)                                                  \
     oop_field(Assumptions_ConcreteSubtype, context, "Lcom/oracle/graal/api/meta/ResolvedJavaType;") \
     oop_field(Assumptions_ConcreteSubtype, subtype, "Lcom/oracle/graal/api/meta/ResolvedJavaType;") \
-  end_class                                                                             \
-  start_class(Assumptions_ConcreteMethod)                                             \
+  end_class                                                                                 \
+  start_class(Assumptions_ConcreteMethod)                                                   \
     oop_field(Assumptions_ConcreteMethod, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \
     oop_field(Assumptions_ConcreteMethod, context, "Lcom/oracle/graal/api/meta/ResolvedJavaType;") \
     oop_field(Assumptions_ConcreteMethod, impl, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;") \
-  end_class                                                                             \
-  start_class(InstalledCode_Site)                                                      \
-    int_field(InstalledCode_Site, pcOffset)                                            \
-  end_class                                                                             \
-  start_class(InstalledCode_Call)                                                      \
-    oop_field(InstalledCode_Call, target, "Ljava/lang/Object;")                        \
-    oop_field(InstalledCode_Call, debugInfo, "Lcom/oracle/graal/api/code/DebugInfo;")    \
-  end_class                                                                             \
-  start_class(InstalledCode_DataPatch)                                                 \
-    oop_field(InstalledCode_DataPatch, constant, "Lcom/oracle/graal/api/meta/Constant;") \
-    int_field(InstalledCode_DataPatch, alignment)                                      \
-  end_class                                                                             \
-  start_class(InstalledCode_Safepoint)                                                 \
-    oop_field(InstalledCode_Safepoint, debugInfo, "Lcom/oracle/graal/api/code/DebugInfo;") \
-  end_class                                                                             \
-  start_class(InstalledCode_ExceptionHandler)                                          \
-    int_field(InstalledCode_ExceptionHandler, handlerPos)                              \
-  end_class                                                                             \
-  start_class(InstalledCode_Mark)                                                      \
-    oop_field(InstalledCode_Mark, id, "Ljava/lang/Object;")                            \
-    oop_field(InstalledCode_Mark, references, "[Lcom/oracle/graal/api/code/CompilationResult$Mark;") \
-  end_class                                                                             \
-  start_class(DebugInfo)                                                              \
-    oop_field(DebugInfo, bytecodePosition, "Lcom/oracle/graal/api/code/BytecodePosition;")                \
-    oop_field(DebugInfo, registerRefMap, "Ljava/util/BitSet;")          \
-    oop_field(DebugInfo, frameRefMap, "Ljava/util/BitSet;")             \
-  end_class                                                                             \
-  start_class(GraalBitMap)                                                              \
-    oop_field(GraalBitMap, words, "[J")                                                 \
-  end_class                                                                             \
-  start_class(BytecodeFrame)                                                                  \
-    oop_field(BytecodeFrame, values, "[Lcom/oracle/graal/api/meta/Value;")                      \
-    int_field(BytecodeFrame, numLocals)                                                       \
-    int_field(BytecodeFrame, numStack)                                                        \
-    int_field(BytecodeFrame, numLocks)                                                        \
-    long_field(BytecodeFrame, leafGraphId)                                                    \
-    boolean_field(BytecodeFrame, rethrowException)                                            \
-    boolean_field(BytecodeFrame, duringCall)                                                  \
-  end_class                                                                             \
-  start_class(BytecodePosition)                                                                \
-    oop_field(BytecodePosition, caller, "Lcom/oracle/graal/api/code/BytecodePosition;")                   \
-    oop_field(BytecodePosition, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;")            \
-    int_field(BytecodePosition, bci)                                                           \
-  end_class                                                                             \
-  start_class(Constant)                                                               \
-    oop_field(Constant, kind, "Lcom/oracle/graal/api/meta/Kind;")                       \
-    oop_field(Constant, object, "Ljava/lang/Object;")                                 \
-    long_field(Constant, primitive)                                                   \
-  end_class                                                                             \
-  start_class(Kind)                                                                   \
-    char_field(Kind, typeChar)                                                        \
-    static_oop_field(Kind, Boolean, "Lcom/oracle/graal/api/meta/Kind;");                \
-    static_oop_field(Kind, Byte, "Lcom/oracle/graal/api/meta/Kind;");                   \
-    static_oop_field(Kind, Char, "Lcom/oracle/graal/api/meta/Kind;");                   \
-    static_oop_field(Kind, Short, "Lcom/oracle/graal/api/meta/Kind;");                  \
-    static_oop_field(Kind, Int, "Lcom/oracle/graal/api/meta/Kind;");                    \
-    static_oop_field(Kind, Long, "Lcom/oracle/graal/api/meta/Kind;");                   \
-  end_class                                                                             \
-  start_class(JavaMethod)                                                                 \
-  end_class                                                                             \
-  start_class(Value)                                                                  \
-    oop_field(Value, kind, "Lcom/oracle/graal/api/meta/Kind;")                          \
-    static_oop_field(Value, ILLEGAL, "Lcom/oracle/graal/api/meta/Value;");         \
-  end_class                                                                             \
-  start_class(RegisterValue)                                                          \
-    oop_field(RegisterValue, reg, "Lcom/oracle/graal/api/code/Register;")               \
-  end_class                                                                             \
-  start_class(code_Register)                                                               \
-    int_field(code_Register, number)                                                       \
-  end_class                                                                             \
-  start_class(StackSlot)                                                              \
-    int_field(StackSlot, offset)                                                      \
-    boolean_field(StackSlot, addFrameSize)                                            \
-  end_class                                                                             \
-  start_class(VirtualObject)                                                          \
-    int_field(VirtualObject, id)                                                      \
+  end_class                                                                                 \
+  start_class(CompilationResult_Site)                                                       \
+    int_field(CompilationResult_Site, pcOffset)                                             \
+  end_class                                                                                 \
+  start_class(CompilationResult_Call)                                                       \
+    oop_field(CompilationResult_Call, target, "Ljava/lang/Object;")                         \
+    oop_field(CompilationResult_Call, debugInfo, "Lcom/oracle/graal/api/code/DebugInfo;")   \
+  end_class                                                                                 \
+  start_class(CompilationResult_DataPatch)                                                  \
+    oop_field(CompilationResult_DataPatch, constant, "Lcom/oracle/graal/api/meta/Constant;") \
+    int_field(CompilationResult_DataPatch, alignment)                                       \
+  end_class                                                                                 \
+  start_class(CompilationResult_Safepoint)                                                  \
+    oop_field(CompilationResult_Safepoint, debugInfo, "Lcom/oracle/graal/api/code/DebugInfo;") \
+  end_class                                                                                 \
+  start_class(CompilationResult_ExceptionHandler)                                           \
+    int_field(CompilationResult_ExceptionHandler, handlerPos)                               \
+  end_class                                                                                 \
+  start_class(CompilationResult_Mark)                                                       \
+    oop_field(CompilationResult_Mark, id, "Ljava/lang/Object;")                             \
+    oop_field(CompilationResult_Mark, references, "[Lcom/oracle/graal/api/code/CompilationResult$Mark;") \
+  end_class                                                                                 \
+  start_class(DebugInfo)                                                                    \
+    oop_field(DebugInfo, bytecodePosition, "Lcom/oracle/graal/api/code/BytecodePosition;")  \
+    oop_field(DebugInfo, registerRefMap, "Ljava/util/BitSet;")                              \
+    oop_field(DebugInfo, frameRefMap, "Ljava/util/BitSet;")                                 \
+  end_class                                                                                 \
+  start_class(GraalBitMap)                                                                  \
+    oop_field(GraalBitMap, words, "[J")                                                     \
+  end_class                                                                                 \
+  start_class(BytecodeFrame)                                                                \
+    oop_field(BytecodeFrame, values, "[Lcom/oracle/graal/api/meta/Value;")                  \
+    int_field(BytecodeFrame, numLocals)                                                     \
+    int_field(BytecodeFrame, numStack)                                                      \
+    int_field(BytecodeFrame, numLocks)                                                      \
+    long_field(BytecodeFrame, leafGraphId)                                                  \
+    boolean_field(BytecodeFrame, rethrowException)                                          \
+    boolean_field(BytecodeFrame, duringCall)                                                \
+  end_class                                                                                 \
+  start_class(BytecodePosition)                                                             \
+    oop_field(BytecodePosition, caller, "Lcom/oracle/graal/api/code/BytecodePosition;")     \
+    oop_field(BytecodePosition, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;")   \
+    int_field(BytecodePosition, bci)                                                        \
+  end_class                                                                                 \
+  start_class(Constant)                                                                     \
+    oop_field(Constant, kind, "Lcom/oracle/graal/api/meta/Kind;")                           \
+    oop_field(Constant, object, "Ljava/lang/Object;")                                       \
+    long_field(Constant, primitive)                                                         \
+  end_class                                                                                 \
+  start_class(Kind)                                                                         \
+    char_field(Kind, typeChar)                                                              \
+    static_oop_field(Kind, Boolean, "Lcom/oracle/graal/api/meta/Kind;");                    \
+    static_oop_field(Kind, Byte, "Lcom/oracle/graal/api/meta/Kind;");                       \
+    static_oop_field(Kind, Char, "Lcom/oracle/graal/api/meta/Kind;");                       \
+    static_oop_field(Kind, Short, "Lcom/oracle/graal/api/meta/Kind;");                      \
+    static_oop_field(Kind, Int, "Lcom/oracle/graal/api/meta/Kind;");                        \
+    static_oop_field(Kind, Long, "Lcom/oracle/graal/api/meta/Kind;");                       \
+  end_class                                                                                 \
+  start_class(JavaMethod)                                                                   \
+  end_class                                                                                 \
+  start_class(Value)                                                                        \
+    oop_field(Value, kind, "Lcom/oracle/graal/api/meta/Kind;")                              \
+    static_oop_field(Value, ILLEGAL, "Lcom/oracle/graal/api/meta/Value;");                  \
+  end_class                                                                                 \
+  start_class(RegisterValue)                                                                \
+    oop_field(RegisterValue, reg, "Lcom/oracle/graal/api/code/Register;")                   \
+  end_class                                                                                 \
+  start_class(code_Register)                                                                \
+    int_field(code_Register, number)                                                        \
+  end_class                                                                                 \
+  start_class(StackSlot)                                                                    \
+    int_field(StackSlot, offset)                                                            \
+    boolean_field(StackSlot, addFrameSize)                                                  \
+  end_class                                                                                 \
+  start_class(VirtualObject)                                                                \
+    int_field(VirtualObject, id)                                                            \
     oop_field(VirtualObject, type, "Lcom/oracle/graal/api/meta/JavaType;")                  \
-    oop_field(VirtualObject, values, "[Lcom/oracle/graal/api/meta/Value;")              \
-  end_class                                                                             \
-  start_class(code_MonitorValue)                                                           \
-    oop_field(code_MonitorValue, owner, "Lcom/oracle/graal/api/meta/Value;")                 \
-    oop_field(code_MonitorValue, lockData, "Lcom/oracle/graal/api/meta/Value;")              \
-    boolean_field(code_MonitorValue, eliminated)                                           \
-  end_class                                                                             \
+    oop_field(VirtualObject, values, "[Lcom/oracle/graal/api/meta/Value;")                  \
+  end_class                                                                                 \
+  start_class(code_MonitorValue)                                                            \
+    oop_field(code_MonitorValue, owner, "Lcom/oracle/graal/api/meta/Value;")                \
+    oop_field(code_MonitorValue, lockData, "Lcom/oracle/graal/api/meta/Value;")             \
+    boolean_field(code_MonitorValue, eliminated)                                            \
+  end_class                                                                                 \
   /* end*/
 
 #define START_CLASS(name)                       \
--- a/src/share/vm/runtime/compilationPolicy.cpp	Wed Nov 07 12:18:37 2012 +0100
+++ b/src/share/vm/runtime/compilationPolicy.cpp	Wed Nov 07 13:18:04 2012 +0100
@@ -208,7 +208,7 @@
 }
 
 void NonTieredCompPolicy::reset_counter_for_back_branch_event(methodHandle m) {
-  GRAAL_ONLY(assert(false, "unexpected"));
+//  GRAAL_ONLY(assert(false, "unexpected"));
   // Delay next back-branch event but pump up invocation counter to triger
   // whole method compilation.
   InvocationCounter* i = m->invocation_counter();