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  <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
This commit is contained in:
Sebastian Pop 2009-08-28 20:24:51 +00:00 committed by Sebastian Pop
parent 66b466c309
commit 45e76e9f39
3 changed files with 18 additions and 6 deletions

View 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.

View 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.

View 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,