summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2014-06-30 20:14:42 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2014-06-30 20:14:42 +0000
commit9f4ec746affbde185eedfc5de139e8617061bbe3 (patch)
tree175c0fc497121c92660a49b3a816d2a4d4d565f2
parentca03cf1b133d66eb978c68f6dbc345e9aabcba88 (diff)
downloadgcc-9f4ec746affbde185eedfc5de139e8617061bbe3.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@212172 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/bb-reorder.c19
-rw-r--r--gcc/passes.def11
3 files changed, 24 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a571eef7fa0..671fc6ce072 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2014-06-30 Richard Henderson <rth@redhat.com>
+
+ 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 <ubizjak@gmail.com>
* except.c (emit_note_eh_region_end): New helper function.
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index 61b0caba8b8..cd68fee4d77 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 280cf166be3..f13df6cff26 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);