src/share/vm/c1/c1_IR.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/share/vm/c1/c1_IR.cpp
src/share/vm/c1/c1_IR.cpp
Print this page
rev 6086 : 8032410: compiler/uncommontrap/TestStackBangRbp.java times out on Solaris-Sparc V9
Summary: make compiled code bang the stack by the worst case size of the interpreter frame at deoptimization points.
Reviewed-by:
*** 225,236 ****
VMReg name = frame_map()->regname(opr);
_oop_map->set_oop(name);
}
!
!
// Implementation of IR
IR::IR(Compilation* compilation, ciMethod* method, int osr_bci) :
_locals_size(in_WordSize(-1))
--- 225,272 ----
VMReg name = frame_map()->regname(opr);
_oop_map->set_oop(name);
}
! // Mirror the stack size calculation in the deopt code
! // How much stack space would we need at this point in the program in
! // case of deoptimization?
! int CodeEmitInfo::interpreter_frame_size() const {
! ValueStack* state = _stack;
! int size = 0;
! int callee_parameters = 0;
! int callee_locals = 0;
! int popframe_extra_args = 0;
!
! if (JvmtiExport::can_pop_frame() && state->kind() != ValueStack::StateBefore) {
! ciMethod* method = state->scope()->method();
! int bci = state->bci();
! popframe_extra_args = MAX2(-method->stack_effect_if_at_invoke(bci), 0);
! }
!
! while (state != NULL) {
! int locks = state->locks_size();
! int temps = state->stack_size();
! bool is_top_frame = (state->caller_state() == NULL);
! ciMethod* method = state->scope()->method();
!
! int frame_size = BytesPerWord * Interpreter::size_activation<ciMethod>(method,
! temps + callee_parameters,
! popframe_extra_args,
! locks,
! callee_parameters,
! callee_locals,
! is_top_frame);
! size += frame_size;
!
! callee_parameters = method->size_of_parameters();
! callee_locals = method->max_locals();
! popframe_extra_args = 0;
! state = state->caller_state();
! }
! return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord;
! }
// Implementation of IR
IR::IR(Compilation* compilation, ciMethod* method, int osr_bci) :
_locals_size(in_WordSize(-1))
src/share/vm/c1/c1_IR.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File