< prev index next >

src/hotspot/share/runtime/deoptimization.hpp

Print this page
rev 56098 : imported patch 8226705-8221734-baseline
rev 56100 : imported patch 8226705-inflate-on-deopt
rev 56101 : [mq]: 8226705-refactor


 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).
 180   // This is only a CheapObj to ease debugging after a deopt failure
 181   class UnrollBlock : public CHeapObj<mtCompiler> {
 182     friend class VMStructs;




 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 
 147   // Revoke biased locks at deopt.
 148   static void revoke_from_deopt_handler(JavaThread* thread, frame fr, RegisterMap* map);
 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 *reg_map, DeoptReason reason = Reason_constraint);

 153 
 154 #if INCLUDE_JVMCI
 155   static address deoptimize_for_missing_exception_handler(CompiledMethod* cm);
 156   static oop get_cached_box(AutoBoxObjectValue* bv, frame* fr, RegisterMap* reg_map, TRAPS);
 157 #endif
 158 
 159   private:
 160   // Does the actual work for deoptimizing a single frame
 161   static void deoptimize_single_frame(JavaThread* thread, frame fr, DeoptReason reason);
 162 




 163 #if COMPILER2_OR_JVMCI
 164  public:
 165 
 166   // Support for restoring non-escaping objects
 167   static bool realloc_objects(JavaThread* thread, frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, TRAPS);
 168   static void reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type);
 169   static void reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj);
 170   static void reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal);
 171   static void relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread, bool realloc_failures);
 172   static void pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array);
 173   NOT_PRODUCT(static void print_objects(GrowableArray<ScopeValue*>* objects, bool realloc_failures);)
 174 #endif // COMPILER2_OR_JVMCI
 175 
 176   public:
 177   static vframeArray* create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk, bool realloc_failures);
 178 
 179   // Interface used for unpacking deoptimized frames
 180 
 181   // UnrollBlock is returned by fetch_unroll_info() to the deoptimization handler (blob).
 182   // This is only a CheapObj to ease debugging after a deopt failure
 183   class UnrollBlock : public CHeapObj<mtCompiler> {
 184     friend class VMStructs;


< prev index next >