aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-04-04 12:12:00 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-04-04 12:12:00 +0000
commit0b9066cf56f688034561c58adb5cadaf102abb26 (patch)
tree13d32354865b2db700fa6e4a168efb3e44ba9d0e
parentc1a969777ff9f9dc0a92b69a261df0232e376009 (diff)
downloadgcc-0b9066cf56f688034561c58adb5cadaf102abb26.zip
gcc-0b9066cf56f688034561c58adb5cadaf102abb26.tar.gz
gcc-0b9066cf56f688034561c58adb5cadaf102abb26.tar.bz2
re PR bootstrap/52808 (LTO bootstrap failed with bootstrap-profiled)
2012-04-04 Richard Guenther <rguenther@suse.de> PR tree-optimization/52808 * tracer.c (tail_duplicate): Do not tail-duplicate loop header blocks. * Makefile.in (tracer.o): Depend on $(CFGLOOP_H). From-SVN: r186135
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/Makefile.in2
-rw-r--r--gcc/tracer.c9
3 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 970fb7f..70f59a4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2012-04-04 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/52808
+ * tracer.c (tail_duplicate): Do not tail-duplicate loop header
+ blocks.
+ * Makefile.in (tracer.o): Depend on $(CFGLOOP_H).
+
2012-04-04 Tristan Gingold <gingold@adacore.com>
* expr.c (expand_expr_real_2): Handle larger sizetype in
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 8fd8208..9c4d4fe 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3391,7 +3391,7 @@ bb-reorder.o : bb-reorder.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
tracer.o : tracer.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(TREE_H) $(BASIC_BLOCK_H) hard-reg-set.h output.h $(CFGLAYOUT_H) \
$(FLAGS_H) $(TIMEVAR_H) $(PARAMS_H) $(COVERAGE_H) $(FIBHEAP_H) \
- $(TREE_PASS_H) $(TREE_FLOW_H) $(TREE_INLINE_H)
+ $(TREE_PASS_H) $(TREE_FLOW_H) $(TREE_INLINE_H) $(CFGLOOP_H)
cfglayout.o : cfglayout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(TREE_H) insn-config.h $(BASIC_BLOCK_H) hard-reg-set.h output.h \
$(FUNCTION_H) $(CFGLAYOUT_H) $(CFGLOOP_H) $(TARGET_H) gt-cfglayout.h \
diff --git a/gcc/tracer.c b/gcc/tracer.c
index 8fb9817..ce95f56 100644
--- a/gcc/tracer.c
+++ b/gcc/tracer.c
@@ -52,6 +52,7 @@
#include "tree-pass.h"
#include "tree-flow.h"
#include "tree-inline.h"
+#include "cfgloop.h"
static int count_insns (basic_block);
static bool ignore_bb_p (const_basic_block);
@@ -307,7 +308,13 @@ tail_duplicate (void)
}
traced_insns += bb2->frequency * counts [bb2->index];
if (EDGE_COUNT (bb2->preds) > 1
- && can_duplicate_block_p (bb2))
+ && can_duplicate_block_p (bb2)
+ /* We have the tendency to duplicate the loop header
+ of all do { } while loops. Do not do that - it is
+ not profitable and it might create a loop with multiple
+ entries or at least rotate the loop. */
+ && (!current_loops
+ || bb2->loop_father->header != bb2))
{
edge e;
basic_block copy;