< prev index next >

src/hotspot/share/runtime/deoptimization.hpp

Print this page
rev 56098 : imported patch 8226705-8221734-baseline


 120   };
 121 
 122   enum {
 123     _action_bits = 3,
 124     _reason_bits = 5,
 125     _debug_id_bits = 23,
 126     _action_shift = 0,
 127     _reason_shift = _action_shift+_action_bits,
 128     _debug_id_shift = _reason_shift+_reason_bits,
 129     BC_CASE_LIMIT = PRODUCT_ONLY(1) NOT_PRODUCT(4) // for _deoptimization_hist
 130   };
 131 
 132   enum UnpackType {
 133     Unpack_deopt                = 0, // normal deoptimization, use pc computed in unpack_vframe_on_stack
 134     Unpack_exception            = 1, // exception is pending
 135     Unpack_uncommon_trap        = 2, // redo last byte code (C2 only)
 136     Unpack_reexecute            = 3, // reexecute bytecode (C1 only)
 137     Unpack_LIMIT                = 4
 138   };
 139 



 140   // Checks all compiled methods. Invalid methods are deleted and
 141   // corresponding activations are deoptimized.
 142   static int deoptimize_dependents();



 143 

 144   // Deoptimizes a frame lazily. nmethod gets patched deopt happens on return to the frame
 145   static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map);
 146   static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map, DeoptReason reason);
 147 
 148 #if INCLUDE_JVMCI
 149   static address deoptimize_for_missing_exception_handler(CompiledMethod* cm);
 150   static oop get_cached_box(AutoBoxObjectValue* bv, frame* fr, RegisterMap* reg_map, TRAPS);
 151 #endif
 152 
 153   private:
 154   // Does the actual work for deoptimizing a single frame
 155   static void deoptimize_single_frame(JavaThread* thread, frame fr, DeoptReason reason);
 156 
 157   // Helper function to revoke biases of all monitors in frame if UseBiasedLocking
 158   // is enabled
 159   static void revoke_biases_of_monitors(JavaThread* thread, frame fr, RegisterMap* map);


 160 
 161 #if COMPILER2_OR_JVMCI
 162 JVMCI_ONLY(public:)
 163 
 164   // Support for restoring non-escaping objects
 165   static bool realloc_objects(JavaThread* thread, frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, TRAPS);
 166   static void reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type);
 167   static void reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj);
 168   static void reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal);
 169   static void relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread, bool realloc_failures);
 170   static void pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array);
 171   NOT_PRODUCT(static void print_objects(GrowableArray<ScopeValue*>* objects, bool realloc_failures);)
 172 #endif // COMPILER2_OR_JVMCI
 173 
 174   public:
 175   static vframeArray* create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk, bool realloc_failures);
 176 
 177   // Interface used for unpacking deoptimized frames
 178 
 179   // UnrollBlock is returned by fetch_unroll_info() to the deoptimization handler (blob).




 120   };
 121 
 122   enum {
 123     _action_bits = 3,
 124     _reason_bits = 5,
 125     _debug_id_bits = 23,
 126     _action_shift = 0,
 127     _reason_shift = _action_shift+_action_bits,
 128     _debug_id_shift = _reason_shift+_reason_bits,
 129     BC_CASE_LIMIT = PRODUCT_ONLY(1) NOT_PRODUCT(4) // for _deoptimization_hist
 130   };
 131 
 132   enum UnpackType {
 133     Unpack_deopt                = 0, // normal deoptimization, use pc computed in unpack_vframe_on_stack
 134     Unpack_exception            = 1, // exception is pending
 135     Unpack_uncommon_trap        = 2, // redo last byte code (C2 only)
 136     Unpack_reexecute            = 3, // reexecute bytecode (C1 only)
 137     Unpack_LIMIT                = 4
 138   };
 139 
 140   static void deoptimize_all_marked();
 141 
 142  private:
 143   // Checks all compiled methods. Invalid methods are deleted and
 144   // corresponding activations are deoptimized.
 145   static int deoptimize_dependents();
 146   static void revoke_using_handshake(JavaThread* thread, frame fr, RegisterMap* map);
 147   static void revoke_using_safepoint(JavaThread* thread, frame fr, RegisterMap* map);
 148   static void deopt_thread(bool in_handshake, JavaThread* thread, frame fr, RegisterMap *map, DeoptReason reason);
 149 
 150  public:
 151   // Deoptimizes a frame lazily. nmethod gets patched deopt happens on return to the frame
 152   static void deoptimize(JavaThread* thread, frame fr, RegisterMap *map, bool in_handshake = false);
 153   static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map, DeoptReason reason);
 154 
 155 #if INCLUDE_JVMCI
 156   static address deoptimize_for_missing_exception_handler(CompiledMethod* cm);
 157   static oop get_cached_box(AutoBoxObjectValue* bv, frame* fr, RegisterMap* reg_map, TRAPS);
 158 #endif
 159 
 160   private:
 161   // Does the actual work for deoptimizing a single frame
 162   static void deoptimize_single_frame(JavaThread* thread, frame fr, DeoptReason reason);
 163 
 164   // Helper function to revoke biases of all monitors in frame if UseBiasedLocking
 165   // is enabled
 166   static void revoke_biases_of_monitors(JavaThread* thread, frame fr, RegisterMap* map) {
 167     revoke_using_safepoint(thread, fr, map);
 168   }
 169 
 170 #if COMPILER2_OR_JVMCI
 171 JVMCI_ONLY(public:)
 172 
 173   // Support for restoring non-escaping objects
 174   static bool realloc_objects(JavaThread* thread, frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, TRAPS);
 175   static void reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type);
 176   static void reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj);
 177   static void reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal);
 178   static void relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread, bool realloc_failures);
 179   static void pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array);
 180   NOT_PRODUCT(static void print_objects(GrowableArray<ScopeValue*>* objects, bool realloc_failures);)
 181 #endif // COMPILER2_OR_JVMCI
 182 
 183   public:
 184   static vframeArray* create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk, bool realloc_failures);
 185 
 186   // Interface used for unpacking deoptimized frames
 187 
 188   // UnrollBlock is returned by fetch_unroll_info() to the deoptimization handler (blob).


< prev index next >