From: Richard Henderson Date: Mon, 30 Jun 2014 20:14:42 +0000 (-0700) Subject: re PR rtl-optimization/61608 (FAIL: gcc.target/arm/epilog-1.c scan-assembler tests) X-Git-Tag: releases/gcc-5.1.0~6562 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fc56f9d2843266a0d38f52b44ca5343604fccc2f;p=thirdparty%2Fgcc.git re PR rtl-optimization/61608 (FAIL: gcc.target/arm/epilog-1.c scan-assembler tests) PR rtl-opt/61608 PR target/39284 * bb-reorder.c (pass_duplicate_computed_gotos::execute): Cleanup the cfg if there were any changes. * passes.def: Revert move of peephole2 after reorder_blocks; move duplicate_computed_gotos before peephole2. From-SVN: r212172 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a571eef7fa04..671fc6ce0724 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2014-06-30 Richard Henderson + + PR rtl-opt/61608 + PR target/39284 + * bb-reorder.c (pass_duplicate_computed_gotos::execute): Cleanup + the cfg if there were any changes. + * passes.def: Revert move of peephole2 after reorder_blocks; + move duplicate_computed_gotos before peephole2. + 2014-06-30 Uros Bizjak * except.c (emit_note_eh_region_end): New helper function. diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index 61b0caba8b8c..cd68fee4d77a 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -2520,13 +2520,20 @@ pass_duplicate_computed_gotos::execute (function *fun) changed = true; } -done: - /* Duplicating blocks above will redirect edges and may cause hot blocks - previously reached by both hot and cold blocks to become dominated only - by cold blocks. */ + done: if (changed) - fixup_partitions (); - cfg_layout_finalize (); + { + /* Duplicating blocks above will redirect edges and may cause hot + blocks previously reached by both hot and cold blocks to become + dominated only by cold blocks. */ + fixup_partitions (); + + /* Merge the duplicated blocks into predecessors, when possible. */ + cfg_layout_finalize (); + cleanup_cfg (0); + } + else + cfg_layout_finalize (); BITMAP_FREE (candidates); return 0; diff --git a/gcc/passes.def b/gcc/passes.def index 280cf166be3a..f13df6cff268 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -396,20 +396,13 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_rtl_dse2); NEXT_PASS (pass_stack_adjustments); NEXT_PASS (pass_jump2); + NEXT_PASS (pass_duplicate_computed_gotos); + NEXT_PASS (pass_peephole2); NEXT_PASS (pass_if_after_reload); NEXT_PASS (pass_regrename); NEXT_PASS (pass_cprop_hardreg); NEXT_PASS (pass_fast_rtl_dce); - NEXT_PASS (pass_duplicate_computed_gotos); NEXT_PASS (pass_reorder_blocks); - /* We need to run peephole2 pass after the duplicate- - compute-gotos and the reorder-blocks pass (PR/39284). - We have a single indirect branch in the entire function - before duplicate-compute-gotos pass. This vastly reduces - the size of the CFG. - For preventing to run peephole2 pass twice, its run after - the jump2 got removed. */ - NEXT_PASS (pass_peephole2); NEXT_PASS (pass_branch_target_load_optimize2); NEXT_PASS (pass_leaf_regs); NEXT_PASS (pass_split_before_sched2);