changeset 13188:6b2d8d20ecbd

deoptimization: add helper to minimize hsx diff #resolve GRAAL-531
author Bernhard Urban <bernhard.urban@jku.at>
date Thu, 28 Nov 2013 14:12:31 +0100
parents b199147f187e
children f444a67ecbae
files src/share/vm/c1/c1_Runtime1.cpp src/share/vm/opto/runtime.cpp src/share/vm/prims/jvmtiEnv.cpp src/share/vm/prims/jvmtiEnvBase.cpp src/share/vm/prims/jvmtiImpl.cpp src/share/vm/runtime/deoptimization.cpp src/share/vm/runtime/deoptimization.hpp src/share/vm/runtime/safepoint.cpp src/share/vm/runtime/thread.cpp src/share/vm/runtime/vm_operations.cpp
diffstat 10 files changed, 25 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/c1/c1_Runtime1.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/c1/c1_Runtime1.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -169,7 +169,7 @@
     RegisterMap reg_map(thread, false);
     frame runtime_frame = thread->last_frame();
     frame caller_frame = runtime_frame.sender(&reg_map);
-    Deoptimization::deoptimize_frame(thread, caller_frame.id(), Deoptimization::Reason_constraint);
+    Deoptimization::deoptimize_frame(thread, caller_frame.id());
     assert(caller_is_deopted(), "Must be deoptimized");
   }
 }
@@ -431,7 +431,7 @@
     if (osr_nm != NULL) {
       RegisterMap map(thread, false);
       frame fr =  thread->last_frame().sender(&map);
-      Deoptimization::deoptimize_frame(thread, fr.id(), Deoptimization::Reason_constraint);
+      Deoptimization::deoptimize_frame(thread, fr.id());
     }
   JRT_BLOCK_END
   return NULL;
@@ -502,7 +502,7 @@
     // We don't really want to deoptimize the nmethod itself since we
     // can actually continue in the exception handler ourselves but I
     // don't see an easy way to have the desired effect.
-    Deoptimization::deoptimize_frame(thread, caller_frame.id(), Deoptimization::Reason_constraint);
+    Deoptimization::deoptimize_frame(thread, caller_frame.id());
     assert(caller_is_deopted(), "Must be deoptimized");
 
     return SharedRuntime::deopt_blob()->unpack_with_exception_in_tls();
@@ -696,7 +696,7 @@
   assert(CodeCache::find_nmethod(caller_frame.pc()) != NULL, "sanity");
 
   // Deoptimize the caller frame.
-  Deoptimization::deoptimize_frame(thread, caller_frame.id(), Deoptimization::Reason_constraint);
+  Deoptimization::deoptimize_frame(thread, caller_frame.id());
 
   // Return to the now deoptimized frame.
 JRT_END
@@ -932,7 +932,7 @@
       nm->make_not_entrant();
     }
 
-    Deoptimization::deoptimize_frame(thread, caller_frame.id(), Deoptimization::Reason_constraint);
+    Deoptimization::deoptimize_frame(thread, caller_frame.id());
 
     // Return to the now deoptimized frame.
   }
@@ -1434,7 +1434,7 @@
   }
 
 
-  Deoptimization::deoptimize_frame(thread, caller_frame.id(), Deoptimization::Reason_none);
+  Deoptimization::deoptimize_frame(thread, caller_frame.id());
 
 JRT_END
 
--- a/src/share/vm/opto/runtime.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/opto/runtime.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1185,7 +1186,7 @@
   frame caller_frame = stub_frame.sender(&reg_map);
 
   // Deoptimize the caller frame.
-  Deoptimization::deoptimize_frame(thread, caller_frame.id(), Deoptimization::Reason_constraint);
+  Deoptimization::deoptimize_frame(thread, caller_frame.id());
 }
 
 
--- a/src/share/vm/prims/jvmtiEnv.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/prims/jvmtiEnv.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -1442,7 +1442,7 @@
     // If any of the top 2 frames is a compiled one, need to deoptimize it
     for (int i = 0; i < 2; i++) {
       if (!is_interpreted[i]) {
-        Deoptimization::deoptimize_frame(java_thread, frame_sp[i], Deoptimization::Reason_constraint);
+        Deoptimization::deoptimize_frame(java_thread, frame_sp[i]);
       }
     }
 
--- a/src/share/vm/prims/jvmtiEnvBase.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/prims/jvmtiEnvBase.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -1338,7 +1338,7 @@
     if (!vf->fr().can_be_deoptimized()) {
       return JVMTI_ERROR_OPAQUE_FRAME;
     }
-    Deoptimization::deoptimize_frame(java_thread, jvf->fr().id(), Deoptimization::Reason_constraint);
+    Deoptimization::deoptimize_frame(java_thread, jvf->fr().id());
   }
 
   // Get information about method return type
--- a/src/share/vm/prims/jvmtiImpl.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/prims/jvmtiImpl.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -752,7 +752,7 @@
 
       // Schedule deoptimization so that eventually the local
       // update will be written to an interpreter frame.
-      Deoptimization::deoptimize_frame(_jvf->thread(), _jvf->fr().id(), Deoptimization::Reason_constraint);
+      Deoptimization::deoptimize_frame(_jvf->thread(), _jvf->fr().id());
 
       // Now store a new value for the local which will be applied
       // once deoptimization occurs. Note however that while this
--- a/src/share/vm/runtime/deoptimization.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/runtime/deoptimization.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -1214,6 +1214,10 @@
   fr.deoptimize(thread);
 }
 
+void Deoptimization::deoptimize(JavaThread* thread, frame fr, RegisterMap *map) {
+  deoptimize(thread, fr, map, Reason_constraint);
+}
+
 void Deoptimization::deoptimize(JavaThread* thread, frame fr, RegisterMap *map, DeoptReason reason) {
   // Deoptimize only if the frame comes from compile code.
   // Do not deoptimize the frame which is already patched
@@ -1253,6 +1257,9 @@
   }
 }
 
+void Deoptimization::deoptimize_frame(JavaThread* thread, intptr_t* id) {
+  deoptimize_frame(thread, id, Reason_constraint);
+}
 
 // JVMTI PopFrame support
 JRT_LEAF(void, Deoptimization::popframe_preserve_args(JavaThread* thread, int bytes_to_save, void* start_address))
--- a/src/share/vm/runtime/deoptimization.hpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/runtime/deoptimization.hpp	Thu Nov 28 14:12:31 2013 +0100
@@ -124,6 +124,7 @@
   static int deoptimize_dependents();
 
   // Deoptimizes a frame lazily. nmethod gets patched deopt happens on return to the frame
+  static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map);
   static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map, DeoptReason reason);
 
   private:
@@ -264,6 +265,7 @@
   // if thread is not the current thread then execute
   // VM_DeoptimizeFrame otherwise deoptimize directly.
   static void deoptimize_frame(JavaThread* thread, intptr_t* id, DeoptReason reason);
+  static void deoptimize_frame(JavaThread* thread, intptr_t* id);
 
   // Statistics
   static void gather_statistics(DeoptReason reason, DeoptAction action,
--- a/src/share/vm/runtime/safepoint.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/runtime/safepoint.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -1081,7 +1081,7 @@
     // as otherwise we may never deliver it.
     if (thread()->has_async_condition()) {
       ThreadInVMfromJavaNoAsyncException __tiv(thread());
-      Deoptimization::deoptimize_frame(thread(), caller_fr.id(), Deoptimization::Reason_constraint);
+      Deoptimization::deoptimize_frame(thread(), caller_fr.id());
     }
 
     // If an exception has been installed we must check for a pending deoptimization
--- a/src/share/vm/runtime/thread.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/runtime/thread.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -2265,7 +2265,7 @@
           RegisterMap reg_map(this, UseBiasedLocking);
           frame compiled_frame = f.sender(&reg_map);
           if (!StressCompiledExceptionHandlers && compiled_frame.can_be_deoptimized()) {
-            Deoptimization::deoptimize(this, compiled_frame, &reg_map, Deoptimization::Reason_constraint);
+            Deoptimization::deoptimize(this, compiled_frame, &reg_map);
           }
         }
       }
@@ -2698,7 +2698,7 @@
         trace_frames();
         trace_stack();
       }
-      Deoptimization::deoptimize(this, *fst.current(), fst.register_map(), Deoptimization::Reason_constraint);
+      Deoptimization::deoptimize(this, *fst.current(), fst.register_map());
     }
   }
 
@@ -2734,7 +2734,7 @@
                    this->name(), nm != NULL ? nm->compile_id() : -1);
       }
 
-      Deoptimization::deoptimize(this, *fst.current(), fst.register_map(), Deoptimization::Reason_constraint);
+      Deoptimization::deoptimize(this, *fst.current(), fst.register_map());
     }
   }
 }
--- a/src/share/vm/runtime/vm_operations.cpp	Thu Nov 28 13:19:58 2013 +0100
+++ b/src/share/vm/runtime/vm_operations.cpp	Thu Nov 28 14:12:31 2013 +0100
@@ -150,7 +150,7 @@
             if (fst.current()->can_be_deoptimized()) {
               if (fcount++ == fnum) {
                 fcount = 0;
-                Deoptimization::deoptimize(thread, *fst.current(), fst.register_map(), Deoptimization::Reason_constraint);
+                Deoptimization::deoptimize(thread, *fst.current(), fst.register_map());
               }
             }
           }