http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60418
--- Comment #6 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to Richard Biener from comment #4) > > That's odd. What's the code generation difference in the end > for the minimal range {to, from} that still shows a difference > of the result? In this particular case, loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS) returns false: (gdb) bt #0 tree_forwarder_block_p (bb=0x7f69144186e8, phi_wanted=false) at ../../../../gcc/gcc/tree-cfgcleanup.c:357 #1 0x0000000000a9a07c in cleanup_tree_cfg_bb (bb=0x7f69144186e8) at ../../../../gcc/gcc/tree-cfgcleanup.c:666 #2 0x0000000000a9a19c in cleanup_tree_cfg_1 () at ../../../../gcc/gcc/tree-cfgcleanup.c:709 #3 0x0000000000a9a2d4 in cleanup_tree_cfg_noloop () at ../../../../gcc/gcc/tree-cfgcleanup.c:765 #4 0x0000000000a9a3e0 in cleanup_tree_cfg () at ../../../../gcc/gcc/tree-cfgcleanup.c:820 #5 0x0000000000967f20 in execute_function_todo (data=0x834) at ../../../../gcc/gcc/passes.c:1811 #6 0x000000000096732a in do_per_function ( callback=0x967ee1 <execute_function_todo(void*)>, data=0x834) at ../../../../gcc/gcc/passes.c:1574 #7 0x0000000000968176 in execute_todo (flags=2100) at ../../../../gcc/gcc/passes.c:1887 #8 0x0000000000968c05 in execute_one_pass (pass=0x29469b0) at ../../../../gcc/gcc/passes.c:2243 #9 0x0000000000968d8f in execute_pass_list (pass=0x29469b0) at ../../../../gcc/gcc/passes.c:2282 #10 0x0000000000968dc0 in execute_pass_list (pass=0x2945ed0) at ../../../../gcc/gcc/passes.c:2283 ---Type <return> to continue, or q <return> to quit---q Quit (gdb) f 5 #5 0x0000000000967f20 in execute_function_todo (data=0x834) at ../../../../gcc/gcc/passes.c:1811 1811 cleanup_tree_cfg (); (gdb) f 6 #6 0x000000000096732a in do_per_function ( callback=0x967ee1 <execute_function_todo(void*)>, data=0x834) at ../../../../gcc/gcc/passes.c:1574 1574 callback (data); (gdb) f 8 #8 0x0000000000968c05 in execute_one_pass (pass=0x29469b0) at ../../../../gcc/gcc/passes.c:2243 2243 execute_todo (todo_after | pass->todo_flags_finish); (gdb) p *pass $4 = {<pass_data> = {type = GIMPLE_PASS, name = 0x1300470 "phicprop", optinfo_flags = 0, has_gate = true, has_execute = true, tv_id = TV_TREE_PHI_CPROP, properties_required = 40, properties_provided = 0, properties_destroyed = 0, todo_flags_start = 524288, todo_flags_finish = 2100}, _vptr.opt_pass = 0x13003d0 <vtable for (anonymous namespace)::pass_phi_only_cprop+16>, sub = 0x0, next = 0x2946a10, static_pass_number = 85, graph_dump_initialized = false, m_ctxt = 0x29214e0} Is this OK for the phicprop pass to remove loop pre-headers when loop_optimizer_init isn't called?