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