230 IRScopeDebugInfo* caller() { return _caller; }
231
232 //Whether we should reexecute this bytecode for deopt
233 bool should_reexecute();
234
235 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost, bool is_method_handle_invoke = false) {
236 if (caller() != NULL) {
237 // Order is significant: Must record caller first.
238 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
239 }
240 DebugToken* locvals = recorder->create_scope_values(locals());
241 DebugToken* expvals = recorder->create_scope_values(expressions());
242 DebugToken* monvals = recorder->create_monitor_values(monitors());
243 // reexecute allowed only for the topmost frame
244 bool reexecute = topmost ? should_reexecute() : false;
245 bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis.
246 bool rethrow_exception = false;
247 bool not_global_escape_in_scope = false;
248 bool arg_escape = false;
249 recorder->describe_scope(pc_offset, methodHandle(), scope()->method(), bci(),
250 reexecute, rethrow_exception, is_method_handle_invoke, return_oop, not_global_escape_in_scope, arg_escape,
251 locvals, expvals, monvals);
252 }
253 };
254
255
256 class CodeEmitInfo: public CompilationResourceObj {
257 friend class LinearScan;
258 private:
259 IRScopeDebugInfo* _scope_debug_info;
260 IRScope* _scope;
261 XHandlers* _exception_handlers;
262 OopMap* _oop_map;
263 ValueStack* _stack; // used by deoptimization (contains also monitors
264 bool _is_method_handle_invoke; // true if the associated call site is a MethodHandle call site.
265 bool _deoptimize_on_exception;
266
267 FrameMap* frame_map() const { return scope()->compilation()->frame_map(); }
268 Compilation* compilation() const { return scope()->compilation(); }
269
270 public:
271
|
230 IRScopeDebugInfo* caller() { return _caller; }
231
232 //Whether we should reexecute this bytecode for deopt
233 bool should_reexecute();
234
235 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost, bool is_method_handle_invoke = false) {
236 if (caller() != NULL) {
237 // Order is significant: Must record caller first.
238 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
239 }
240 DebugToken* locvals = recorder->create_scope_values(locals());
241 DebugToken* expvals = recorder->create_scope_values(expressions());
242 DebugToken* monvals = recorder->create_monitor_values(monitors());
243 // reexecute allowed only for the topmost frame
244 bool reexecute = topmost ? should_reexecute() : false;
245 bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis.
246 bool rethrow_exception = false;
247 bool not_global_escape_in_scope = false;
248 bool arg_escape = false;
249 recorder->describe_scope(pc_offset, methodHandle(), scope()->method(), bci(),
250 reexecute, rethrow_exception, is_method_handle_invoke, return_oop,
251 not_global_escape_in_scope, arg_escape, locvals, expvals, monvals);
252 }
253 };
254
255
256 class CodeEmitInfo: public CompilationResourceObj {
257 friend class LinearScan;
258 private:
259 IRScopeDebugInfo* _scope_debug_info;
260 IRScope* _scope;
261 XHandlers* _exception_handlers;
262 OopMap* _oop_map;
263 ValueStack* _stack; // used by deoptimization (contains also monitors
264 bool _is_method_handle_invoke; // true if the associated call site is a MethodHandle call site.
265 bool _deoptimize_on_exception;
266
267 FrameMap* frame_map() const { return scope()->compilation()->frame_map(); }
268 Compilation* compilation() const { return scope()->compilation(); }
269
270 public:
271
|