< prev index next >

src/hotspot/share/c1/c1_IR.cpp

Print this page
*** 169,20 ***
    return my_max + callee_max;
  }
  
  
  bool IRScopeDebugInfo::should_reexecute() {
    ciMethod* cur_method = scope()->method();
    int       cur_bci    = bci();
    if (cur_method != nullptr && cur_bci != SynchronizationEntryBCI) {
      Bytecodes::Code code = cur_method->java_code_at_bci(cur_bci);
      return Interpreter::bytecode_should_reexecute(code);
    } else
      return false;
  }
  
- 
  // Implementation of CodeEmitInfo
  
  // Stack must be NON-null
  CodeEmitInfo::CodeEmitInfo(ValueStack* stack, XHandlers* exception_handlers, bool deoptimize_on_exception)
    : _scope_debug_info(nullptr)
--- 169,22 ---
    return my_max + callee_max;
  }
  
  
  bool IRScopeDebugInfo::should_reexecute() {
+   if (_should_reexecute) {
+     return true;
+   }
    ciMethod* cur_method = scope()->method();
    int       cur_bci    = bci();
    if (cur_method != nullptr && cur_bci != SynchronizationEntryBCI) {
      Bytecodes::Code code = cur_method->java_code_at_bci(cur_bci);
      return Interpreter::bytecode_should_reexecute(code);
    } else
      return false;
  }
  
  // Implementation of CodeEmitInfo
  
  // Stack must be NON-null
  CodeEmitInfo::CodeEmitInfo(ValueStack* stack, XHandlers* exception_handlers, bool deoptimize_on_exception)
    : _scope_debug_info(nullptr)

*** 212,15 ***
      _exception_handlers = new XHandlers(info->_exception_handlers);
    }
  }
  
  
! void CodeEmitInfo::record_debug_info(DebugInformationRecorder* recorder, int pc_offset) {
    // record the safepoint before recording the debug info for enclosing scopes
    recorder->add_safepoint(pc_offset, _oop_map->deep_copy());
    bool reexecute = _force_reexecute || _scope_debug_info->should_reexecute();
!   _scope_debug_info->record_debug_info(recorder, pc_offset, reexecute, _is_method_handle_invoke);
    recorder->end_safepoint(pc_offset);
  }
  
  
  void CodeEmitInfo::add_register_oop(LIR_Opr opr) {
--- 214,15 ---
      _exception_handlers = new XHandlers(info->_exception_handlers);
    }
  }
  
  
! void CodeEmitInfo::record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool maybe_return_as_fields) {
    // record the safepoint before recording the debug info for enclosing scopes
    recorder->add_safepoint(pc_offset, _oop_map->deep_copy());
    bool reexecute = _force_reexecute || _scope_debug_info->should_reexecute();
!   _scope_debug_info->record_debug_info(recorder, pc_offset, reexecute, _is_method_handle_invoke, maybe_return_as_fields);
    recorder->end_safepoint(pc_offset);
  }
  
  
  void CodeEmitInfo::add_register_oop(LIR_Opr opr) {
< prev index next >