< prev index next >

src/hotspot/share/runtime/deoptimization.hpp

Print this page
rev 54697 : imported patch 8221734-v2-merge


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



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




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

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




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


< prev index next >