cfgloopmanip.c (create_empty_loop_on_edge): Generate upper bounds with LT_EXPR to...
authorSebastian Pop <sebastian.pop@amd.com>
Fri, 28 Aug 2009 20:24:51 +0000 (20:24 +0000)
committerSebastian Pop <spop@gcc.gnu.org>
Fri, 28 Aug 2009 20:24:51 +0000 (20:24 +0000)
2009-08-28  Sebastian Pop  <sebastian.pop@amd.com>

* cfgloopmanip.c (create_empty_loop_on_edge): Generate upper
bounds with LT_EXPR to make niter analysis more precise on code
generated by Graphite.

From-SVN: r151180

gcc/ChangeLog
gcc/ChangeLog.graphite
gcc/cfgloopmanip.c

index 8ce1105992fef0a44986bf281bc92073e9cd3663..0105250838e10c7b913e2f0e9cb2a06704ad0b18 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-28  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * cfgloopmanip.c (create_empty_loop_on_edge): Generate upper
+       bounds with LT_EXPR to make niter analysis more precise on code
+       generated by Graphite.
+
 2009-08-28  Sebastian Pop  <sebastian.pop@amd.com>
 
        * graphite-dependences.c (graphite_legal_transform_dr): Fix formatting.
index 662e08595008c7fee158ed42202a24aa2327a1b1..d7d1a6a56f31b03af5162f2c71542df72d5055de 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-18  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * cfgloopmanip.c (create_empty_loop_on_edge): Generate upper
+       bounds with LT_EXPR to make niter analysis more precise on code
+       generated by Graphite.
+
 2009-08-18  Sebastian Pop  <sebastian.pop@amd.com>
 
        * graphite-dependences.c (graphite_legal_transform_dr): Fix formatting.
index 40e3f8e9a596db5da916b142e29ee1c87e7c955d..a357a2fd77aefc359dcdb14c89bc5f266d2d781d 100644 (file)
@@ -599,7 +599,7 @@ create_empty_if_region_on_edge (edge entry_edge, tree condition)
    |   |           |               |         |
    |    -----------                |      ---V--- loop_body ---------------
    |                               |     | iv_after = iv_before + stride   |
-   |                               |     | if (iv_after <= upper_bound)     |
+   |                               |     | if (iv_before < upper_bound)    |
    |                               |      ---|--------------\--------------
    |                               |         |               \ exit_e
    |                               |         V                \
@@ -609,9 +609,9 @@ create_empty_if_region_on_edge (edge entry_edge, tree condition)
    |                                \ ___ /
 
    Creates an empty loop as shown above, the IV_BEFORE is the SSA_NAME
-   that is used before the increment of IV. IV_BEFORE should be used for 
+   that is used before the increment of IV. IV_BEFORE should be used for
    adding code to the body that uses the IV.  OUTER is the outer loop in
-   which the new loop should be inserted.  
+   which the new loop should be inserted.
 
    Both INITIAL_VALUE and UPPER_BOUND expressions are gimplified and
    inserted on the loop entry edge.  This implies that this function
@@ -619,7 +619,7 @@ create_empty_if_region_on_edge (edge entry_edge, tree condition)
    invariant.  */
 
 struct loop *
-create_empty_loop_on_edge (edge entry_edge, 
+create_empty_loop_on_edge (edge entry_edge,
                           tree initial_value,
                           tree stride, tree upper_bound,
                           tree iv,
@@ -637,7 +637,7 @@ create_empty_loop_on_edge (edge entry_edge,
   tree exit_test;
   edge exit_e;
   int prob;
-  
+
   gcc_assert (entry_edge && initial_value && stride && upper_bound && iv);
 
   /* Create header, latch and wire up the loop.  */
@@ -696,7 +696,7 @@ create_empty_loop_on_edge (edge entry_edge,
 
   /* Insert loop exit condition.  */
   cond_expr = gimple_build_cond
-    (LE_EXPR, *iv_after, upper_bound, NULL_TREE, NULL_TREE);
+    (LT_EXPR, *iv_before, upper_bound, NULL_TREE, NULL_TREE);
 
   exit_test = gimple_cond_lhs (cond_expr);
   exit_test = force_gimple_operand_gsi (&gsi, exit_test, true, NULL,