Message ID | bb7615fb-d245-2037-ce5c-3427e06b1d6c@mentor.com |
---|---|
State | New |
Headers | show |
Series | [openacc,committed] Fix diff_type in expand_oacc_collapse_init | expand |
Hi Tom, > this patch fixes an 8 regression in an openacc testcase. > > The regression was introduced by r250925, a fix for PR78266, a bug in the > handling of a loop with iteration variable type range smaller than the size > of the parallel dimension the loop is assigned to. > > The fix for the regression is to apply the r250925 fix (in expand_oacc_for) > to expand_oacc_collapse_init as well. > > Build and reg-tested on x86_64 with nvptx accelerator. > > Committed to stage4 trunk. [...] > * testsuite/libgomp.oacc-c-c++-common/pr84217.c: New test. this test FAILs when compiled as C++: +FAIL: libgomp.oacc-c++/../libgomp.oacc-c-c++-common/pr84217.c -DACC_DEVICE_TYPE_host=1 -DACC_MEM_SHARED=1 -O2 (test for excess errors) +UNRESOLVED: libgomp.oacc-c++/../libgomp.oacc-c-c++-common/pr84217.c -DACC_DEVIC E_TYPE_host=1 -DACC_MEM_SHARED=1 -O2 compilation failed to produce executable Excess errors: Undefined first referenced symbol in file abort() /var/tmp//ccSsAnFc.o (seen on i386-pc-solaris2.11 and sparc-sun-solaris2.11). Fixed as follows, tested with the appropriate runtest invocations, installed on mainline. Rainer
On 02/07/2018 08:37 PM, Rainer Orth wrote: > Hi Tom, > >> this patch fixes an 8 regression in an openacc testcase. >> >> The regression was introduced by r250925, a fix for PR78266, a bug in the >> handling of a loop with iteration variable type range smaller than the size >> of the parallel dimension the loop is assigned to. >> >> The fix for the regression is to apply the r250925 fix (in expand_oacc_for) >> to expand_oacc_collapse_init as well. >> >> Build and reg-tested on x86_64 with nvptx accelerator. >> >> Committed to stage4 trunk. > [...] >> * testsuite/libgomp.oacc-c-c++-common/pr84217.c: New test. > > this test FAILs when compiled as C++: > > +FAIL: libgomp.oacc-c++/../libgomp.oacc-c-c++-common/pr84217.c -DACC_DEVICE_TYPE_host=1 -DACC_MEM_SHARED=1 -O2 (test for excess errors) > +UNRESOLVED: libgomp.oacc-c++/../libgomp.oacc-c-c++-common/pr84217.c -DACC_DEVIC > E_TYPE_host=1 -DACC_MEM_SHARED=1 -O2 compilation failed to produce executable > > Excess errors: > Undefined first referenced > symbol in file > abort() /var/tmp//ccSsAnFc.o > > (seen on i386-pc-solaris2.11 and sparc-sun-solaris2.11). > > Fixed as follows, tested with the appropriate runtest invocations, > installed on mainline. > > Rainer > Hi Rainer, thanks for fixing this oversight of mine. - Tom > > libgomp-pr84217-c++.patch > > > # HG changeset patch > # Parent e5c3e710215181503b228de2f9277e543392df2a > Fix libgomp.oacc-c-c++-common/pr84217.c for C++ > > diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/pr84217.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr84217.c > --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/pr84217.c > +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr84217.c > @@ -1,4 +1,8 @@ > -extern void abort (void); > +extern > +#ifdef __cplusplus > +"C" > +#endif > +void abort (void); > > #define N 10 > >
[openacc] Fix diff_type in expand_oacc_collapse_init 2018-02-07 Tom de Vries <tom@codesourcery.com> PR libgomp/84217 * omp-expand.c (expand_oacc_collapse_init): Ensure diff_type is large enough. * c-c++-common/goacc/pr84217.c: New test. * gfortran.dg/goacc/pr84217.f90: New test. * testsuite/libgomp.oacc-c-c++-common/pr84217.c: New test. --- gcc/omp-expand.c | 2 ++ gcc/testsuite/c-c++-common/goacc/pr84217.c | 8 ++++++++ gcc/testsuite/gfortran.dg/goacc/pr84217.f90 | 9 +++++++++ .../testsuite/libgomp.oacc-c-c++-common/pr84217.c | 22 ++++++++++++++++++++++ 4 files changed, 41 insertions(+) diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 90e0631..bb20490 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -1433,6 +1433,8 @@ expand_oacc_collapse_init (const struct omp_for_data *fd, plus_type = sizetype; if (POINTER_TYPE_P (diff_type) || TYPE_UNSIGNED (diff_type)) diff_type = signed_type_for (diff_type); + if (TYPE_PRECISION (diff_type) < TYPE_PRECISION (integer_type_node)) + diff_type = integer_type_node; if (tiling) { diff --git a/gcc/testsuite/c-c++-common/goacc/pr84217.c b/gcc/testsuite/c-c++-common/goacc/pr84217.c new file mode 100644 index 0000000..c4f2920 --- /dev/null +++ b/gcc/testsuite/c-c++-common/goacc/pr84217.c @@ -0,0 +1,8 @@ +void +foo (void) +{ +#pragma acc parallel loop tile (2, 3) + for (short i = 0; i < 10; ++i) + for (short j = 0; j < 10; ++j) + ; +} diff --git a/gcc/testsuite/gfortran.dg/goacc/pr84217.f90 b/gcc/testsuite/gfortran.dg/goacc/pr84217.f90 new file mode 100644 index 0000000..cee49e9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/pr84217.f90 @@ -0,0 +1,9 @@ +subroutine foo + integer(2) :: i, j + !$acc parallel loop tile(2,3) + do i = 1, 10 + do j = 1, 10 + end do + end do + !$acc end parallel loop +end diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/pr84217.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr84217.c new file mode 100644 index 0000000..18ff66a --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/pr84217.c @@ -0,0 +1,22 @@ +extern void abort (void); + +#define N 10 + +int +main (void) +{ + int a[N]; + + for (short i = 0; i < N; ++i) + a[i] = -1; + +#pragma acc parallel loop tile (2) + for (short i = 0; i < N; ++i) + a[i] = i; + + for (short i = 0; i < N; ++i) + if (a[i] != i) + abort (); + + return 0; +}