This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[openacc, committed] Fix diff_type in expand_oacc_collapse_init


Hi,

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.

Thanks,
- Tom
[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;
+}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]