< prev index next >
src/share/vm/c1/c1_LIRAssembler.hpp
Print this page
@@ -43,11 +43,12 @@
Compilation* _compilation;
FrameMap* _frame_map;
BlockBegin* _current_block;
Instruction* _pending_non_safepoint;
- int _pending_non_safepoint_offset;
+ int _pending_non_safepoint_begin_offset;
+ int _pending_non_safepoint_end_offset;
Label _unwind_handler_entry;
#ifdef ASSERT
BlockList _branch_target_blocks;
@@ -60,12 +61,17 @@
BlockBegin* current_block() const { return _current_block; }
// non-safepoint debug info management
void flush_debug_info(int before_pc_offset) {
if (_pending_non_safepoint != NULL) {
- if (_pending_non_safepoint_offset < before_pc_offset)
+ if (_pending_non_safepoint_end_offset < before_pc_offset) {
record_non_safepoint_debug_info();
+ } else if (_pending_non_safepoint_begin_offset < before_pc_offset) {
+ // stretch as far as possible before the conflict
+ _pending_non_safepoint_end_offset = before_pc_offset - 1;
+ record_non_safepoint_debug_info();
+ }
_pending_non_safepoint = NULL;
}
}
void process_debug_info(LIR_Op* op);
void record_non_safepoint_debug_info();
@@ -144,10 +150,11 @@
// stubs
void emit_slow_case_stubs();
void emit_static_call_stub();
void append_code_stub(CodeStub* op);
void add_call_info_here(CodeEmitInfo* info) { add_call_info(code_offset(), info); }
+ void add_non_safepoint_debug_info_here(CodeEmitInfo* info);
// code patterns
int emit_exception_handler();
int emit_unwind_handler();
void emit_exception_entries(ExceptionInfoList* info_list);
< prev index next >