< 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 >