Do not clean up the merge point too early during C2 SplitIf. The cleaned merge point looks dead and confuses the lazy skip-through-dead-control-flow data structure. Clean it up after the last possible use of it. From hs_err log sent by Bond Desk: V [libjvm.so+0x322a46] Node*PhaseIdealLoop::get_ctrl_no_update(Node*)const+0x26 V [libjvm.so+0x9e7836] bool PhaseIdealLoop::split_up(Node*,Node*,Node*)+0x856 V [libjvm.so+0x405393] void PhaseIdealLoop::do_split_if(Node*)+0x153 V [libjvm.so+0x3285cd] void PhaseIdealLoop::split_if_with_blocks_post(Node*)+0x52d V [libjvm.so+0x41008a] void PhaseIdealLoop::split_if_with_blocks(VectorSet&,Node_Stack&)+0x4ca V [libjvm.so+0x902e3b] PhaseIdealLoop::PhaseIdealLoop(PhaseIterGVN&,const PhaseIdealLoop*,bool)+0xa4b V [libjvm.so+0x439826] void Compile::Optimize()+0x6b6 V [libjvm.so+0x63a49d] Compile::Compile(ciEnv*,C2Compiler*,ciMethod*,int,bool,bool)+0xc9d V [libjvm.so+0x436d07] void C2Compiler::compile_method(ciEnv*,ciMethod*,int)+0x87 V [libjvm.so+0x436866] void CompileBroker::invoke_compiler_on_method(CompileTask*)+0x746 V [libjvm.so+0x4bfcf8] void CompileBroker::compiler_thread_loop()+0x6b8 V [libjvm.so+0x4bc129] void compiler_thread_entry(JavaThread*,Thread*)+0x9 V [libjvm.so+0x47b01d] void JavaThread::thread_main_inner()+0x4d V [libjvm.so+0x47adca] void JavaThread::run()+0x10a V [libjvm.so+0x96d059] java_start+0x1f9 C [libc.so.1+0xd504b] _thr_slot_offset+0x31b C [libc.so.1+0xd5280] _thr_slot_offset+0x550
|