134 // Deoptimizes a frame lazily. nmethod gets patched deopt happens on return to the frame
135 static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map);
136 static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map, DeoptReason reason);
137
138 private:
139 // Does the actual work for deoptimizing a single frame
140 static void deoptimize_single_frame(JavaThread* thread, frame fr, DeoptReason reason);
141
142 // Helper function to revoke biases of all monitors in frame if UseBiasedLocking
143 // is enabled
144 static void revoke_biases_of_monitors(JavaThread* thread, frame fr, RegisterMap* map);
145 // Helper function to revoke biases of all monitors in frames
146 // executing in a particular CodeBlob if UseBiasedLocking is enabled
147 static void revoke_biases_of_monitors(CodeBlob* cb);
148
149 #if defined(COMPILER2) || INCLUDE_JVMCI
150 JVMCI_ONLY(public:)
151
152 // Support for restoring non-escaping objects
153 static bool realloc_objects(JavaThread* thread, frame* fr, GrowableArray<ScopeValue*>* objects, TRAPS);
154 static void reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type);
155 static void reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj);
156 static void reassign_value_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, valueArrayOop obj, ValueArrayKlass* vak, TRAPS);
157 static void reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal, TRAPS);
158 static void relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread, bool realloc_failures);
159 static void pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array);
160 NOT_PRODUCT(static void print_objects(GrowableArray<ScopeValue*>* objects, bool realloc_failures);)
161 #endif // COMPILER2 || INCLUDE_JVMCI
162
163 public:
164 static vframeArray* create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk, bool realloc_failures);
165
166 // Interface used for unpacking deoptimized frames
167
168 // UnrollBlock is returned by fetch_unroll_info() to the deoptimization handler (blob).
169 // This is only a CheapObj to ease debugging after a deopt failure
170 class UnrollBlock : public CHeapObj<mtCompiler> {
171 friend class VMStructs;
172 friend class JVMCIVMStructs;
173 private:
|
134 // Deoptimizes a frame lazily. nmethod gets patched deopt happens on return to the frame
135 static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map);
136 static void deoptimize(JavaThread* thread, frame fr, RegisterMap *reg_map, DeoptReason reason);
137
138 private:
139 // Does the actual work for deoptimizing a single frame
140 static void deoptimize_single_frame(JavaThread* thread, frame fr, DeoptReason reason);
141
142 // Helper function to revoke biases of all monitors in frame if UseBiasedLocking
143 // is enabled
144 static void revoke_biases_of_monitors(JavaThread* thread, frame fr, RegisterMap* map);
145 // Helper function to revoke biases of all monitors in frames
146 // executing in a particular CodeBlob if UseBiasedLocking is enabled
147 static void revoke_biases_of_monitors(CodeBlob* cb);
148
149 #if defined(COMPILER2) || INCLUDE_JVMCI
150 JVMCI_ONLY(public:)
151
152 // Support for restoring non-escaping objects
153 static bool realloc_objects(JavaThread* thread, frame* fr, GrowableArray<ScopeValue*>* objects, TRAPS);
154 static bool realloc_value_type_result(ValueKlass* vk, const RegisterMap& map, GrowableArray<Handle>& return_oops, TRAPS);
155 static void reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type);
156 static void reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj);
157 static void reassign_value_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, valueArrayOop obj, ValueArrayKlass* vak, TRAPS);
158 static void reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal, TRAPS);
159 static void relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread, bool realloc_failures);
160 static void pop_frames_failed_reallocs(JavaThread* thread, vframeArray* array);
161 NOT_PRODUCT(static void print_objects(GrowableArray<ScopeValue*>* objects, bool realloc_failures);)
162 #endif // COMPILER2 || INCLUDE_JVMCI
163
164 public:
165 static vframeArray* create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk, bool realloc_failures);
166
167 // Interface used for unpacking deoptimized frames
168
169 // UnrollBlock is returned by fetch_unroll_info() to the deoptimization handler (blob).
170 // This is only a CheapObj to ease debugging after a deopt failure
171 class UnrollBlock : public CHeapObj<mtCompiler> {
172 friend class VMStructs;
173 friend class JVMCIVMStructs;
174 private:
|