aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2013-11-18 22:38:51 +0000
committerTeresa Johnson <tejohnson@gcc.gnu.org>2013-11-18 22:38:51 +0000
commit4ca1930986eb7cb7eae67b74b74bd0ed3717ad83 (patch)
tree5c71565f2ef787716805387748dca8ac915527bb
parent38f4f02fd6a83607aada3b3270469143bd9ffc7a (diff)
downloadgcc-4ca1930986eb7cb7eae67b74b74bd0ed3717ad83.zip
gcc-4ca1930986eb7cb7eae67b74b74bd0ed3717ad83.tar.gz
gcc-4ca1930986eb7cb7eae67b74b74bd0ed3717ad83.tar.bz2
This patch fixes an lto profiledbootstrap failure with -freorder-blocks-and-partition enabled.
This patch fixes an lto profiledbootstrap failure with -freorder-blocks-and-partition enabled. Currently compgotos is the only pass that goes into cfglayout mode after bb reordering, which is undesireable (and in the case of -freorder-blocks-and-partition can cause illegal partitioning) because of the optimizations performed on the cfg when going into cfglayout mode. Moved compgoto before bb reordering to avoid these problems. 2013-11-18 Teresa Johnson <tejohnson@google.com> * gcc/cfgrtl.c (cfg_layout_initialize): Assert if we try to go into cfglayout after bb reordering. * gcc/passes.def: Move compgotos before bb reordering since it goes into cfglayout. From-SVN: r204985
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cfgrtl.c9
-rw-r--r--gcc/passes.def2
3 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 498f780..d49af50 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-18 Teresa Johnson <tejohnson@google.com>
+
+ * gcc/cfgrtl.c (cfg_layout_initialize): Assert if we
+ try to go into cfglayout after bb reordering.
+ * gcc/passes.def: Move compgotos before bb reordering
+ since it goes into cfglayout.
+
2013-11-18 Bernd Schmidt <bernds@codesourcery.com>
* cgraphunit.c (ipa_passes): Don't execute all_lto_gen_passes.
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index c7ee7ee..1f99aa1df 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -4204,6 +4204,15 @@ cfg_layout_initialize (unsigned int flags)
rtx x;
basic_block bb;
+ /* Once bb reordering is complete, cfg layout mode should not be re-entered.
+ Entering cfg layout mode will perform optimizations on the cfg that
+ could affect the bb layout negatively or even require fixups. An
+ example of the latter is if edge forwarding performed when optimizing
+ the cfg layout required moving a block from the hot to the cold section
+ under -freorder-blocks-and-partition. This would create an illegal
+ partitioning unless some manual fixup was performed. */
+ gcc_assert (!crtl->bb_reorder_complete);
+
initialize_original_copy_tables ();
cfg_layout_rtl_register_cfg_hooks ();
diff --git a/gcc/passes.def b/gcc/passes.def
index 8480991..0aba1d9 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -382,6 +382,7 @@ along with GCC; see the file COPYING3. If not see
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);
NEXT_PASS (pass_branch_target_load_optimize2);
NEXT_PASS (pass_leaf_regs);
@@ -393,7 +394,6 @@ along with GCC; see the file COPYING3. If not see
NEXT_PASS (pass_stack_regs_run);
POP_INSERT_PASSES ()
NEXT_PASS (pass_compute_alignments);
- NEXT_PASS (pass_duplicate_computed_gotos);
NEXT_PASS (pass_variable_tracking);
NEXT_PASS (pass_free_cfg);
NEXT_PASS (pass_machine_reorg);