comparison src/share/vm/c1/c1_GraphBuilder.cpp @ 4116:973293defacd

7112085: assert(fr.interpreter_frame_expression_stack_size()==0) failed: only handle empty stacks Summary: Move the inlinee invoke notification callback into inlinee preamble Reviewed-by: kvn, never
author iveresov
date Wed, 16 Nov 2011 19:42:58 -0800
parents 940513efe83a
children 2f5980b127e3
comparison
equal deleted inserted replaced
4115:1bd45abaa507 4116:973293defacd
3493 compilation()->set_would_profile(true); 3493 compilation()->set_would_profile(true);
3494 3494
3495 if (profile_calls()) { 3495 if (profile_calls()) {
3496 profile_call(recv, holder_known ? callee->holder() : NULL); 3496 profile_call(recv, holder_known ? callee->holder() : NULL);
3497 } 3497 }
3498 if (profile_inlined_calls()) {
3499 profile_invocation(callee, copy_state_before());
3500 }
3501 } 3498 }
3502 3499
3503 // Introduce a new callee continuation point - if the callee has 3500 // Introduce a new callee continuation point - if the callee has
3504 // more than one return instruction or the return does not allow 3501 // more than one return instruction or the return does not allow
3505 // fall-through of control flow, all return instructions of the 3502 // fall-through of control flow, all return instructions of the
3567 3564
3568 if (compilation()->env()->dtrace_method_probes()) { 3565 if (compilation()->env()->dtrace_method_probes()) {
3569 Values* args = new Values(1); 3566 Values* args = new Values(1);
3570 args->push(append(new Constant(new ObjectConstant(method())))); 3567 args->push(append(new Constant(new ObjectConstant(method()))));
3571 append(new RuntimeCall(voidType, "dtrace_method_entry", CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), args)); 3568 append(new RuntimeCall(voidType, "dtrace_method_entry", CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), args));
3569 }
3570
3571 if (profile_inlined_calls()) {
3572 profile_invocation(callee, copy_state_before_with_bci(SynchronizationEntryBCI));
3572 } 3573 }
3573 3574
3574 BlockBegin* callee_start_block = block_at(0); 3575 BlockBegin* callee_start_block = block_at(0);
3575 if (callee_start_block != NULL) { 3576 if (callee_start_block != NULL) {
3576 assert(callee_start_block->is_set(BlockBegin::parser_loop_header_flag), "must be loop header"); 3577 assert(callee_start_block->is_set(BlockBegin::parser_loop_header_flag), "must be loop header");