mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-26 08:53:59 +08:00
re PR c/79940 (OpenMP pragma - internal compiler error with taskloop)
PR c/79940 * gimplify.c (gimplify_omp_for): Replace index var in outer taskloop statement with an artificial variable and add OMP_CLAUSE_PRIVATE clause for it. * testsuite/libgomp.c/pr79940.c: New test. From-SVN: r245980
This commit is contained in:
parent
a46586c34f
commit
eebc5e2dde
@ -1,3 +1,10 @@
|
||||
2017-03-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/79940
|
||||
* gimplify.c (gimplify_omp_for): Replace index var in outer
|
||||
taskloop statement with an artificial variable and add
|
||||
OMP_CLAUSE_PRIVATE clause for it.
|
||||
|
||||
2017-03-08 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/79955
|
||||
|
@ -10232,8 +10232,9 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
|
||||
gimple_omp_for_set_combined_into_p (gfor, true);
|
||||
for (i = 0; i < (int) gimple_omp_for_collapse (gfor); i++)
|
||||
{
|
||||
t = unshare_expr (gimple_omp_for_index (gfor, i));
|
||||
gimple_omp_for_set_index (gforo, i, t);
|
||||
tree type = TREE_TYPE (gimple_omp_for_index (gfor, i));
|
||||
tree v = create_tmp_var (type);
|
||||
gimple_omp_for_set_index (gforo, i, v);
|
||||
t = unshare_expr (gimple_omp_for_initial (gfor, i));
|
||||
gimple_omp_for_set_initial (gforo, i, t);
|
||||
gimple_omp_for_set_cond (gforo, i,
|
||||
@ -10241,7 +10242,13 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
|
||||
t = unshare_expr (gimple_omp_for_final (gfor, i));
|
||||
gimple_omp_for_set_final (gforo, i, t);
|
||||
t = unshare_expr (gimple_omp_for_incr (gfor, i));
|
||||
gcc_assert (TREE_OPERAND (t, 0) == gimple_omp_for_index (gfor, i));
|
||||
TREE_OPERAND (t, 0) = v;
|
||||
gimple_omp_for_set_incr (gforo, i, t);
|
||||
t = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
|
||||
OMP_CLAUSE_DECL (t) = v;
|
||||
OMP_CLAUSE_CHAIN (t) = gimple_omp_for_clauses (gforo);
|
||||
gimple_omp_for_set_clauses (gforo, t);
|
||||
}
|
||||
gimplify_seq_add_stmt (pre_p, gforo);
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-03-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/79940
|
||||
* testsuite/libgomp.c/pr79940.c: New test.
|
||||
|
||||
2017-02-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* testsuite/libgomp.c/pr48591.c: Enable on all __float128
|
||||
|
47
libgomp/testsuite/libgomp.c/pr79940.c
Normal file
47
libgomp/testsuite/libgomp.c/pr79940.c
Normal file
@ -0,0 +1,47 @@
|
||||
/* PR c/79940 */
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int i, j, l, m;
|
||||
int a[10000], b[10000], c[10000];
|
||||
for (i = 0; i < 10000; i++)
|
||||
{
|
||||
a[i] = i;
|
||||
b[i] = i & 31;
|
||||
}
|
||||
#pragma omp parallel shared(a, b, c)
|
||||
#pragma omp single
|
||||
#pragma omp taskloop shared(a, b, c)
|
||||
for (i = 0; i < 10000; i++)
|
||||
c[i] = a[i] + b[i];
|
||||
#pragma omp parallel
|
||||
#pragma omp single
|
||||
{
|
||||
#pragma omp taskloop shared(a, b, c) lastprivate (i)
|
||||
for (i = 0; i < 10000; i++)
|
||||
c[i] += a[i] + b[i];
|
||||
l = i;
|
||||
}
|
||||
#pragma omp parallel
|
||||
#pragma omp single
|
||||
#pragma omp taskloop shared(a, b, c) collapse(2)
|
||||
for (i = 0; i < 100; i++)
|
||||
for (j = 0; j < 100; j++)
|
||||
c[i * 100 + j] += a[i * 100 + j] + b[i * 100 + j];
|
||||
#pragma omp parallel
|
||||
#pragma omp single
|
||||
{
|
||||
#pragma omp taskloop shared(a, b, c) lastprivate (i, j)
|
||||
for (i = 0; i < 100; i++)
|
||||
for (j = 0; j < 100; j++)
|
||||
c[i * 100 + j] += a[i * 100 + j] + b[i * 100 + j];
|
||||
m = i * 100 + j;
|
||||
}
|
||||
for (i = 0; i < 10000; i++)
|
||||
if (a[i] != i || b[i] != (i & 31) || c[i] != 4 * i + 4 * (i & 31))
|
||||
__builtin_abort ();
|
||||
if (l != 10000 || m != 10100)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user