Trivial for loop header copying and vector lowering. Remaining ones done for an empty function at -O1 are DOM and the related phicprop, both a little more interesting to fix (we usually defer to CFG cleanup to optimize control stmts with known target).
Bootstrap running on x86_64-unknown-linux-gnu, testing in progress. Richard. 2015-03-13 Richard Biener <rguent...@suse.de> * tree-sssa-loop-ch.c (pass_data_ch): Remove TODO_cleanup_cfg. (pass_ch::execute): Cleanup the CFG only if we did sth. * tree-vect-generic.c (pass_data_lower_vector): Remove TODO_cleanup_cfg. (pass_data_lower_vector_ssa): Likewise. Index: gcc/tree-ssa-loop-ch.c =================================================================== --- gcc/tree-ssa-loop-ch.c (revision 221411) +++ gcc/tree-ssa-loop-ch.c (working copy) @@ -159,7 +159,7 @@ const pass_data pass_data_ch = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_cleanup_cfg, /* todo_flags_finish */ + 0, /* todo_flags_finish */ }; class pass_ch : public gimple_opt_pass @@ -184,6 +184,7 @@ pass_ch::execute (function *fun) basic_block *bbs, *copied_bbs; unsigned n_bbs; unsigned bbs_size; + bool changed = false; loop_optimizer_init (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_SIMPLE_LATCHES); @@ -291,6 +292,8 @@ pass_ch::execute (function *fun) are not now, since there was the loop exit condition. */ split_edge (loop_preheader_edge (loop)); split_edge (loop_latch_edge (loop)); + + changed = true; } update_ssa (TODO_update_ssa); @@ -298,7 +301,7 @@ pass_ch::execute (function *fun) free (copied_bbs); loop_optimizer_finalize (); - return 0; + return changed ? TODO_cleanup_cfg : 0; } } // anon namespace Index: gcc/tree-vect-generic.c =================================================================== --- gcc/tree-vect-generic.c (revision 221411) +++ gcc/tree-vect-generic.c (working copy) @@ -1681,8 +1681,7 @@ const pass_data pass_data_lower_vector = PROP_gimple_lvec, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - ( TODO_update_ssa - | TODO_cleanup_cfg ), /* todo_flags_finish */ + TODO_update_ssa, /* todo_flags_finish */ }; class pass_lower_vector : public gimple_opt_pass @@ -1725,8 +1724,7 @@ const pass_data pass_data_lower_vector_s PROP_gimple_lvec, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - ( TODO_update_ssa - | TODO_cleanup_cfg ), /* todo_flags_finish */ + TODO_update_ssa, /* todo_flags_finish */ }; class pass_lower_vector_ssa : public gimple_opt_pass