[nvptx, PR84028] Add exit insn after noreturn call for neutered workers
authorTom de Vries <tom@codesourcery.com>
Thu, 25 Jan 2018 10:25:14 +0000 (10:25 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Thu, 25 Jan 2018 10:25:14 +0000 (10:25 +0000)
2018-01-25  Tom de Vries  <tom@codesourcery.com>

PR target/84028
* config/nvptx/nvptx.c (nvptx_single): Add exit insn after noreturn call
for neutered workers.

* testsuite/libgomp.oacc-fortran/pr84028.f90: New test.

From-SVN: r257046

gcc/ChangeLog
gcc/config/nvptx/nvptx.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90 [new file with mode: 0644]

index c46bc6d6f9daa796b1186d8764bfe1eb4c86b2f8..69cbcc691667c84acab9e5af26f2122683979047 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-25  Tom de Vries  <tom@codesourcery.com>
+
+       PR target/84028
+       * config/nvptx/nvptx.c (nvptx_single): Add exit insn after noreturn call
+       for neutered workers.
+
 2018-01-24  Joseph Myers  <joseph@codesourcery.com>
 
        PR target/68467
index d8484120c9d25b963648f5c539fc23bb895394c5..a6f444340fd04c09c50605b33ddb00a22e87cc02 100644 (file)
@@ -4065,8 +4065,8 @@ nvptx_single (unsigned mask, basic_block from, basic_block to)
        else
          {
            rtx_insn *label_insn = emit_label_after (label, tail);
-           if (mode == GOMP_DIM_VECTOR && CALL_P (tail)
-               && find_reg_note (tail, REG_NORETURN, NULL))
+           if ((mode == GOMP_DIM_VECTOR || mode == GOMP_DIM_WORKER)
+               && CALL_P (tail) && find_reg_note (tail, REG_NORETURN, NULL))
              emit_insn_after (gen_exit (), label_insn);
          }
       }
index a0648633a784de94a020caf0530af4b51459efea..a7bbcebf5174858de7b8bba9f6c5be7ec8b014be 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-25  Tom de Vries  <tom@codesourcery.com>
+
+       PR target/84028
+       * testsuite/libgomp.oacc-fortran/pr84028.f90: New test.
+
 2018-01-24  Tom de Vries  <tom@codesourcery.com>
 
        PR target/83589
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90
new file mode 100644 (file)
index 0000000..ed6e326
--- /dev/null
@@ -0,0 +1,25 @@
+! { dg-do run }
+
+program foo
+  integer :: a(3,3,3), ll, lll
+
+  a = 1
+
+  !$acc parallel num_gangs(1) num_workers(2)
+
+  if (any(a(1:3,1:3,1:3).ne.1)) call abort
+
+  do ll=1,3
+
+     !$acc loop vector
+     do lll=1,3
+        a(1,ll,lll) = 2
+     enddo
+
+  enddo
+
+  if (a(1,1,1).ne.2) call abort
+
+  !$acc end parallel
+
+end program foo