Mercurial > hg > truffle
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"); |