Commit 52d676b6 by Tobias Grosser Committed by Tobias Grosser

graphite: Do not depend on 2D + 1 form in parallelism check

    PR tree-optimization/54094
    * graphite-clast-to-gimple.c (translate_clast_for_loop): Derive the
      scheduling dimension for the parallelism check from the polyhedral
      information in the AST.
    * graphite-dependences.c (carries_deps): Do not assume the schedule is
      in 2D + 1 form.

From-SVN: r200946
parent 25d7bb75
2013-07-13 Tobias Grosser <tobias@grosser.es>
PR tree-optimization/54094
* graphite-clast-to-gimple.c (translate_clast_for_loop): Derive the
scheduling dimension for the parallelism check from the polyhedral
information in the AST.
* graphite-dependences.c (carries_deps): Do not assume the schedule is
in 2D + 1 form.
2013-07-13 Jason Merrill <jason@redhat.com>
* print-tree.c (debug_vec_tree): Use debug_raw.
......
......@@ -1181,8 +1181,11 @@ translate_clast_for_loop (loop_p context_loop, struct clast_for *stmt,
redirect_edge_succ_nodup (next_e, after);
set_immediate_dominator (CDI_DOMINATORS, next_e->dest, next_e->src);
isl_set *domain = isl_set_from_cloog_domain (stmt->domain);
int scheduling_dim = isl_set_n_dim (domain);
if (flag_loop_parallelize_all
&& loop_is_parallel_p (loop, bb_pbb_mapping, level))
&& loop_is_parallel_p (loop, bb_pbb_mapping, scheduling_dim))
loop->can_be_parallel = true;
return last_e;
......
......@@ -298,7 +298,7 @@ carries_deps (__isl_keep isl_union_map *schedule,
int depth)
{
bool res;
int idx, i;
int i;
isl_space *space;
isl_map *lex, *x;
isl_constraint *ineq;
......@@ -313,13 +313,12 @@ carries_deps (__isl_keep isl_union_map *schedule,
space = isl_map_get_space (x);
ineq = isl_inequality_alloc (isl_local_space_from_space (space));
idx = 2 * depth + 1;
for (i = 0; i < idx; i++)
for (i = 0; i < depth - 1; i++)
lex = isl_map_equate (lex, isl_dim_in, i, isl_dim_out, i);
/* in + 1 <= out */
ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_out, idx, 1);
ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_in, idx, -1);
ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_out, depth - 1, 1);
ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_in, depth - 1, -1);
ineq = isl_constraint_set_constant_si (ineq, -1);
lex = isl_map_add_constraint (lex, ineq);
x = isl_map_intersect (x, lex);
......
/* { dg-options "-O2 -floop-parallelize-all -floop-nest-optimize" } */
void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas)
{
int i;
for (i=0; i<sn; i++)
b[i]=a[2*i+cas];
for (i=0; i<dn; i++)
b[sn+i]=a[(2*i+1-cas)];
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment