diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ChangeLog.graphite | 6 | ||||
-rw-r--r-- | 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,5 +1,11 @@ 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. (graphite_legal_transform_bb): Same. (poly_drs_may_alias_p): Same. diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 662e0859500..d7d1a6a56f3 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,5 +1,11 @@ 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. (graphite_legal_transform_bb): Same. (poly_drs_may_alias_p): Same. 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, |