OpenMP: Fix folding with simd's linear clause [PR106492]
gcc/ChangeLog:
PR middle-end/106492
* omp-low.cc (lower_rec_input_clauses): Add missing folding
to data type of linear-clause list item.
gcc/testsuite/ChangeLog:
PR middle-end/106492
* g++.dg/gomp/pr106492.C: New test.
(cherry picked from commit 8a16b9f983
)
This commit is contained in:
parent
ab2ca2dbd5
commit
68b8c55c7e
|
@ -6205,10 +6205,10 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (POINTER_TYPE_P (TREE_TYPE (x)))
|
if (POINTER_TYPE_P (TREE_TYPE (x)))
|
||||||
x = fold_build2 (POINTER_PLUS_EXPR,
|
x = fold_build_pointer_plus (x, t);
|
||||||
TREE_TYPE (x), x, t);
|
|
||||||
else
|
else
|
||||||
x = fold_build2 (PLUS_EXPR, TREE_TYPE (x), x, t);
|
x = fold_build2 (PLUS_EXPR, TREE_TYPE (x), x,
|
||||||
|
fold_convert (TREE_TYPE (x), t));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((OMP_CLAUSE_CODE (c) != OMP_CLAUSE_LINEAR
|
if ((OMP_CLAUSE_CODE (c) != OMP_CLAUSE_LINEAR
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* PR middle-end/106492 */
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct S {
|
||||||
|
T a : 12;
|
||||||
|
S () : a(0)
|
||||||
|
{
|
||||||
|
#pragma omp for simd linear(a)
|
||||||
|
for (int k = 0; k < 64; ++k)
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct U {
|
||||||
|
int a : 12;
|
||||||
|
U () : a(0)
|
||||||
|
{
|
||||||
|
#pragma omp for simd linear(a)
|
||||||
|
for (int k = 0; k < 64; ++k)
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
S<int> s;
|
||||||
|
U u;
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct Sptr {
|
||||||
|
T a;
|
||||||
|
Sptr (T init) : a(init)
|
||||||
|
{
|
||||||
|
#pragma omp for simd linear(a)
|
||||||
|
for (int k = 0; k < 64; ++k)
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct Uptr {
|
||||||
|
int *a;
|
||||||
|
Uptr (int *init) : a(init)
|
||||||
|
{
|
||||||
|
#pragma omp for simd linear(a)
|
||||||
|
for (int k = 0; k < 64; ++k)
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int i[1024];
|
||||||
|
Sptr<int *> sptr(i);
|
||||||
|
Uptr uptr(&i[100]);
|
Loading…
Reference in New Issue