From 45e76e9f397c72fb18ea89fedad822a2c553f34b Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Fri, 28 Aug 2009 20:24:51 +0000 Subject: [PATCH] cfgloopmanip.c (create_empty_loop_on_edge): Generate upper bounds with LT_EXPR to make niter analysis more precise on code... 2009-08-28 Sebastian Pop * 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 | 6 ++++++ gcc/ChangeLog.graphite | 6 ++++++ gcc/cfgloopmanip.c | 12 ++++++------ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8ce1105992f..0105250838e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-08-28 Sebastian Pop + + * 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 * graphite-dependences.c (graphite_legal_transform_dr): Fix formatting. diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 662e0859500..d7d1a6a56f3 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,9 @@ +2009-08-18 Sebastian Pop + + * 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 * graphite-dependences.c (graphite_legal_transform_dr): Fix formatting. diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 40e3f8e9a59..a357a2fd77a 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -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, -- 2.30.2