OSDN Git Service

PR tree-optimization/27872
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Jun 2006 08:19:50 +0000 (08:19 +0000)
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Jun 2006 08:19:50 +0000 (08:19 +0000)
* tree-ssa-loop-manip.c (tree_unroll_loop): Set EDGE_IRREDUCIBLE_LOOP
flag on the new exit edge of the unrolled loop.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114482 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-loop-manip.c

index 237393d..ea88049 100644 (file)
@@ -1,5 +1,11 @@
 2006-06-07  Zdenek Dvorak <dvorakz@suse.cz>
 
+       PR tree-optimization/27872
+       * tree-ssa-loop-manip.c (tree_unroll_loop): Set EDGE_IRREDUCIBLE_LOOP
+       flag on the new exit edge of the unrolled loop.
+
+2006-06-07  Zdenek Dvorak <dvorakz@suse.cz>
+
        PR rtl-optimization/26449
        * loop-invariant.c (move_invariant_reg): Fail if force_operand fails.
 
index 556264c..0b29c5e 100644 (file)
@@ -841,6 +841,7 @@ tree_unroll_loop (struct loops *loops, struct loop *loop, unsigned factor,
   use_operand_p op;
   bool ok;
   unsigned est_niter;
+  unsigned irr = loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP;
   sbitmap wont_exit;
 
   est_niter = expected_loop_iterations (loop);
@@ -883,7 +884,7 @@ tree_unroll_loop (struct loops *loops, struct loop *loop, unsigned factor,
   loop_split_edge_with (loop_latch_edge (loop), NULL);
   exit_bb = single_pred (loop->latch);
 
-  new_exit = make_edge (exit_bb, rest, EDGE_FALSE_VALUE);
+  new_exit = make_edge (exit_bb, rest, EDGE_FALSE_VALUE | irr);
   new_exit->count = loop_preheader_edge (loop)->count;
   est_niter = est_niter / factor + 1;
   new_exit->probability = REG_BR_PROB_BASE / est_niter;