Remove outermost loop parameter.

2010-08-18  Vladimir Kargov  <kargov@gmail.com>

	* graphite-scop-detection.c (graphite_can_represent_scev,
	graphite_can_represent_expr, stmt_has_simple_data_refs_p,
	graphite_can_represent_loop): Remove outermost_loop.

From-SVN: r164786
This commit is contained in:
Vladimir Kargov 2010-09-30 21:18:09 +00:00 committed by Sebastian Pop
parent b4c8119fe2
commit 56f30f653e
3 changed files with 28 additions and 22 deletions

View file

@ -1,3 +1,9 @@
2010-09-30 Vladimir Kargov <kargov@gmail.com>
* graphite-scop-detection.c (graphite_can_represent_scev,
graphite_can_represent_expr, stmt_has_simple_data_refs_p,
graphite_can_represent_loop): Remove outermost_loop.
2010-09-30 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/45229

View file

@ -1,3 +1,9 @@
2010-08-18 Vladimir Kargov <kargov@gmail.com>
* graphite-scop-detection.c (graphite_can_represent_scev,
graphite_can_represent_expr, stmt_has_simple_data_refs_p,
graphite_can_represent_loop): Remove outermost_loop.
2010-08-17 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/45229

View file

@ -202,12 +202,10 @@ graphite_can_represent_init (tree e)
1 i + 20 j + (-2) m + 25
Something like "i * n" or "n * m" is not allowed.
OUTERMOST_LOOP defines the outermost loop that can variate. */
Something like "i * n" or "n * m" is not allowed. */
static bool
graphite_can_represent_scev (tree scev, int outermost_loop)
graphite_can_represent_scev (tree scev)
{
if (chrec_contains_undetermined (scev))
return false;
@ -216,8 +214,8 @@ graphite_can_represent_scev (tree scev, int outermost_loop)
{
case PLUS_EXPR:
case MINUS_EXPR:
return graphite_can_represent_scev (TREE_OPERAND (scev, 0), outermost_loop)
&& graphite_can_represent_scev (TREE_OPERAND (scev, 1), outermost_loop);
return graphite_can_represent_scev (TREE_OPERAND (scev, 0))
&& graphite_can_represent_scev (TREE_OPERAND (scev, 1));
case MULT_EXPR:
return !CONVERT_EXPR_CODE_P (TREE_CODE (TREE_OPERAND (scev, 0)))
@ -225,8 +223,8 @@ graphite_can_represent_scev (tree scev, int outermost_loop)
&& !(chrec_contains_symbols (TREE_OPERAND (scev, 0))
&& chrec_contains_symbols (TREE_OPERAND (scev, 1)))
&& graphite_can_represent_init (scev)
&& graphite_can_represent_scev (TREE_OPERAND (scev, 0), outermost_loop)
&& graphite_can_represent_scev (TREE_OPERAND (scev, 1), outermost_loop);
&& graphite_can_represent_scev (TREE_OPERAND (scev, 0))
&& graphite_can_represent_scev (TREE_OPERAND (scev, 1));
case POLYNOMIAL_CHREC:
/* Check for constant strides. With a non constant stride of
@ -253,19 +251,18 @@ graphite_can_represent_scev (tree scev, int outermost_loop)
This means an expression can be represented, if it is linear with
respect to the loops and the strides are non parametric.
LOOP is the place where the expr will be evaluated and OUTERMOST_LOOP
defindes the outermost loop that can variate. SCOP_ENTRY defines the
LOOP is the place where the expr will be evaluated. SCOP_ENTRY defines the
entry of the region we analyse. */
static bool
graphite_can_represent_expr (basic_block scop_entry, loop_p loop,
loop_p outermost_loop, tree expr)
tree expr)
{
tree scev = analyze_scalar_evolution (loop, expr);
scev = instantiate_scev (scop_entry, loop, scev);
return graphite_can_represent_scev (scev, outermost_loop->num);
return graphite_can_represent_scev (scev);
}
/* Return true if the data references of STMT can be represented by
@ -278,14 +275,13 @@ stmt_has_simple_data_refs_p (loop_p outermost_loop, gimple stmt)
unsigned i;
int j;
bool res = true;
int loop = outermost_loop->num;
VEC (data_reference_p, heap) *drs = VEC_alloc (data_reference_p, heap, 5);
graphite_find_data_references_in_stmt (outermost_loop, stmt, &drs);
FOR_EACH_VEC_ELT (data_reference_p, drs, j, dr)
for (i = 0; i < DR_NUM_DIMENSIONS (dr); i++)
if (!graphite_can_represent_scev (DR_ACCESS_FN (dr, i), loop))
if (!graphite_can_represent_scev (DR_ACCESS_FN (dr, i)))
{
res = false;
goto done;
@ -349,8 +345,7 @@ stmt_simple_for_scop_p (basic_block scop_entry, loop_p outermost_loop,
return false;
FOR_EACH_SSA_TREE_OPERAND (op, stmt, op_iter, SSA_OP_ALL_USES)
if (!graphite_can_represent_expr (scop_entry, loop, outermost_loop,
op)
if (!graphite_can_represent_expr (scop_entry, loop, op)
/* We can not handle REAL_TYPE. Failed for pr39260. */
|| TREE_CODE (TREE_TYPE (op)) == REAL_TYPE)
return false;
@ -389,12 +384,11 @@ harmful_stmt_in_bb (basic_block scop_entry, loop_p outer_loop, basic_block bb)
}
/* Return true when it is not possible to represent LOOP in the
polyhedral representation. This is evaluated taking SCOP_ENTRY and
OUTERMOST_LOOP in mind. */
polyhedral representation. This is evaluated taking SCOP_ENTRY
in mind. */
static bool
graphite_can_represent_loop (basic_block scop_entry, loop_p outermost_loop,
loop_p loop)
graphite_can_represent_loop (basic_block scop_entry, loop_p loop)
{
tree niter = number_of_latch_executions (loop);
@ -403,7 +397,7 @@ graphite_can_represent_loop (basic_block scop_entry, loop_p outermost_loop,
return false;
/* Number of iterations not affine. */
if (!graphite_can_represent_expr (scop_entry, loop, outermost_loop, niter))
if (!graphite_can_represent_expr (scop_entry, loop, niter))
return false;
return true;
@ -476,7 +470,7 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop,
sinfo = build_scops_1 (bb, outermost_loop, &regions, loop);
if (!graphite_can_represent_loop (entry_block, outermost_loop, loop))
if (!graphite_can_represent_loop (entry_block, loop))
result.difficult = true;
result.difficult |= sinfo.difficult;