Commit 11c4c4ba by Chung-Lin Tang Committed by Chung-Lin Tang

omp-low.c (lower_oacc_reductions): Adjust variable lookup to use maybe_lookup_decl...

2016-08-17  Chung-Lin Tang  <cltang@codesourcery.com>

	* omp-low.c (lower_oacc_reductions): Adjust variable lookup to use
	maybe_lookup_decl, to handle nested acc loop directives.

	testsuite/
	* c-c++-common/goacc/reduction-6.c: New testcase.

From-SVN: r239530
parent 661d6efd
2016-08-17 Chung-Lin Tang <cltang@codesourcery.com>
* omp-low.c (lower_oacc_reductions): Adjust variable lookup to use
maybe_lookup_decl, to handle nested acc loop directives.
2016-08-17 Richard Biener <rguenther@suse.de>
PR tree-optimization/76490
......
......@@ -5660,10 +5660,19 @@ lower_oacc_reductions (location_t loc, tree clauses, tree level, bool inner,
outgoing = var;
incoming = omp_reduction_init_op (loc, rcode, type);
}
else if (ctx->outer)
incoming = outgoing = lookup_decl (orig, ctx->outer);
else
incoming = outgoing = orig;
{
/* Try to look at enclosing contexts for reduction var,
use original if no mapping found. */
tree t = NULL_TREE;
omp_context *c = ctx->outer;
while (c && !t)
{
t = maybe_lookup_decl (orig, c);
c = c->outer;
}
incoming = outgoing = (t ? t : orig);
}
has_outer_reduction:;
}
......
2016-08-17 Chung-Lin Tang <cltang@codesourcery.com>
* c-c++-common/goacc/reduction-6.c: New testcase.
2016-08-17 Richard Biener <rguenther@suse.de>
PR tree-optimization/76490
......
/* Check if different occurences of the reduction clause on
OpenACC loop nests will compile. */
int foo (int N)
{
int a = 0, b = 0, c = 0, d = 0, e = 0;
#pragma acc parallel
{
#pragma acc loop
for (int i = 0; i < N; i++)
{
#pragma acc loop reduction(+:a)
for (int j = 0; j < N; j++)
a += 1;
}
}
#pragma acc parallel
{
#pragma acc loop reduction(+:b)
for (int i = 0; i < N; i++)
{
#pragma acc loop
for (int j = 0; j < N; j++)
b += 1;
}
}
#pragma acc parallel
{
#pragma acc loop reduction(+:c)
for (int i = 0; i < N; i++)
{
#pragma acc loop reduction(+:c)
for (int j = 0; j < N; j++)
c += 1;
}
}
#pragma acc parallel loop
for (int i = 0; i < N; i++)
{
#pragma acc loop reduction(+:d)
for (int j = 0; j < N; j++)
d += 1;
}
#pragma acc parallel loop reduction(+:e)
for (int i = 0; i < N; i++)
{
#pragma acc loop reduction(+:e)
for (int j = 0; j < N; j++)
e += 1;
}
return a + b + c + d + e;
}
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