Hi! On Fri, 26 Jun 2015 08:39:41 -0400, Nathan Sidwell <[email protected]> wrote: > I discovered a latent bug in the openacc thread id builtin and associated > unspec. They should not be treated as constant functions, because that > causes > the compiler to consider them constant across threads. Which of course they > are > not. > > Applied to gomp4 branch
Apparently, your change:
> * config/nvptx/nvptx.md (UNSPEC_ID): Rename to ...
> (UNSPECV_ID): ... here.
> (oacc_id): Make volatile.
> * omp-builtins.def (BUILT_IN_GOACC_ID): Not a constant function.
> --- config/nvptx/nvptx.md (revision 224987)
> +++ config/nvptx/nvptx.md (working copy)
> @@ -50,7 +50,6 @@
> UNSPEC_ALLOCA
>
> UNSPEC_NID
> - UNSPEC_ID
>
> UNSPEC_SHARED_DATA
> ])
> @@ -61,6 +60,7 @@
> UNSPECV_XCHG
> UNSPECV_WARP_BCAST
> UNSPECV_BARSYNC
> + UNSPECV_ID
> ])
>
> (define_attr "subregs_ok" "false,true"
> @@ -1313,7 +1313,8 @@
>
> (define_insn "oacc_id"
> [(set (match_operand:SI 0 "nvptx_register_operand" "")
> - (unspec:SI [(match_operand:SI 1 "const_int_operand" "")] UNSPEC_ID))]
> + (unspec_volatile:SI [(match_operand:SI 1 "const_int_operand" "")]
> + UNSPECV_ID))]
> ""
> {
> static const char *const asms[] =
> --- omp-builtins.def (revision 224987)
> +++ omp-builtins.def (working copy)
> @@ -62,7 +62,7 @@ DEF_GOACC_BUILTIN (BUILT_IN_GOACC_WAIT,
> BT_FN_VOID_INT_INT_VAR,
> ATTR_NOTHROW_LIST)
> DEF_GOACC_BUILTIN (BUILT_IN_GOACC_ID, "GOACC_id",
> - BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
> + BT_FN_UINT_UINT, ATTR_NOTHROW_LEAF_LIST)
> DEF_GOACC_BUILTIN (BUILT_IN_GOACC_NID, "GOACC_nid",
> BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
> DEF_GOACC_BUILTIN (BUILT_IN_GOACC_GET_GANGLOCAL_PTR,
> "GOACC_get_ganglocal_ptr",
... was not just to fix »a latent bug«, but instead I found your changes
to cure the C-only XFAILs that we had applied earlier,
<http://news.gmane.org/find-root.php?message_id=%3C87zj3xccqv.fsf%40kepler.schwinge.homeip.net%3E>,
so I removed the XFAILs in r225515 -- but I have not made an attempt to
understand why C and C++ did behave differently, what's (been) going
on... :-/
commit 72e6113ce537cdaaf562b579becaada5e91f4fea
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue Jul 7 13:27:34 2015 +0000
libgomp: Remove C-only XFAILs added in "Tune XFAILs"
This removes the C-only XFAILs of r224614, which disappeared as of r225010.
libgomp/
* testsuite/libgomp.oacc-c++/c++.exp (check_effective_target_c):
Remove procedure.
* testsuite/libgomp.oacc-c/c.exp (check_effective_target_c):
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-1.c:
Remove/tune XFAILs.
* testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-2.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-4.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-vars-loop-gang-3.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-2.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-3.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-4.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/private-vars-par-gang-3.c:
Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gomp-4_0-branch@225515
138bc75d-0d04-0410-961f-82ee72b054a4
---
libgomp/ChangeLog.gomp | 21 +++++++++++++++++++++
libgomp/testsuite/libgomp.oacc-c++/c++.exp | 4 ----
.../private-vars-local-worker-1.c | 2 --
.../private-vars-local-worker-2.c | 2 --
.../private-vars-local-worker-4.c | 1 -
.../private-vars-loop-gang-3.c | 6 ------
.../private-vars-loop-worker-2.c | 2 --
.../private-vars-loop-worker-3.c | 2 --
.../private-vars-loop-worker-4.c | 2 --
.../private-vars-par-gang-3.c | 2 --
libgomp/testsuite/libgomp.oacc-c/c.exp | 4 ----
11 files changed, 21 insertions(+), 27 deletions(-)
diff --git libgomp/ChangeLog.gomp libgomp/ChangeLog.gomp
index 5f3dfaf..418474d 100644
--- libgomp/ChangeLog.gomp
+++ libgomp/ChangeLog.gomp
@@ -1,5 +1,26 @@
2015-07-07 Thomas Schwinge <[email protected]>
+ * testsuite/libgomp.oacc-c++/c++.exp (check_effective_target_c):
+ Remove procedure.
+ * testsuite/libgomp.oacc-c/c.exp (check_effective_target_c):
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-1.c:
+ Remove/tune XFAILs.
+ * testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-2.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-4.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/private-vars-loop-gang-3.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-2.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-3.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-4.c:
+ Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/private-vars-par-gang-3.c:
+ Likewise.
+
* testsuite/libgomp.oacc-c-c++-common/reduction-4.c:
dg-xfail-run-if openacc_nvidia_accel_selected.
diff --git libgomp/testsuite/libgomp.oacc-c++/c++.exp
libgomp/testsuite/libgomp.oacc-c++/c++.exp
index 80cb317..60f582b 100644
--- libgomp/testsuite/libgomp.oacc-c++/c++.exp
+++ libgomp/testsuite/libgomp.oacc-c++/c++.exp
@@ -14,10 +14,6 @@ if [info exists lang_include_flags] then {
unset lang_include_flags
}
-proc check_effective_target_c { } {
- return 0
-}
-
# If a testcase doesn't have special options, use these.
if ![info exists DEFAULT_CFLAGS] then {
set DEFAULT_CFLAGS "-O2"
diff --git
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-1.c
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-1.c
index 957f827..67a1518 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-1.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-1.c
@@ -1,5 +1,3 @@
-/* { dg-xfail-run-if "TODO" { c && openacc_nvidia_accel_selected } { "*" } {
"" } } */
-
#include <assert.h>
/* Test of worker-private variables declared in a local scope, broadcasting
diff --git
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-2.c
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-2.c
index 5bf3e16..0ee87be 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-2.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-2.c
@@ -1,5 +1,3 @@
-/* { dg-xfail-run-if "TODO" { c && openacc_nvidia_accel_selected } { "*" } {
"" } } */
-
#include <assert.h>
/* Test of worker-private variables declared in a local scope, broadcasting
diff --git
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-4.c
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-4.c
index 118dae8..4cec00e 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-4.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-local-worker-4.c
@@ -1,4 +1,3 @@
-/* { dg-xfail-if "TODO" { c } } */
/* { dg-xfail-run-if "TODO" { openacc_nvidia_accel_selected } { "*" } { "" } }
*/
#include <assert.h>
diff --git
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-gang-3.c
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-gang-3.c
index bc96f0d..0a77869 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-gang-3.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-gang-3.c
@@ -1,9 +1,3 @@
-/* { dg-xfail-run-if "TODO" { c && openacc_nvidia_accel_selected } { "*" } {
"" } } */
-/* Fails as of gomp-4_0-branch r224586, but for C only:
-
- private-vars-loop-gang-3.exe: [...]/private-vars-loop-gang-3.c:28: main:
Assertion `arr[i] == i + (i / 32) * 2' failed.
-*/
-
#include <assert.h>
/* Test of gang-private variables declared on loop directive, with broadcasting
diff --git
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-2.c
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-2.c
index a5f16d8..3227700 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-2.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-2.c
@@ -1,5 +1,3 @@
-/* { dg-xfail-run-if "TODO" { c && openacc_nvidia_accel_selected } { "*" } {
"" } } */
-
#include <assert.h>
/* Test of worker-private variables declared on a loop directive, broadcasting
diff --git
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-3.c
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-3.c
index 5c75f4d..65d5d4f 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-3.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-3.c
@@ -1,5 +1,3 @@
-/* { dg-xfail-run-if "TODO" { c && openacc_nvidia_accel_selected } { "*" } {
"" } } */
-
#include <assert.h>
/* Test of worker-private variables declared on a loop directive, broadcasting
diff --git
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-4.c
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-4.c
index f0d1309..42a12b2 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-4.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-loop-worker-4.c
@@ -1,5 +1,3 @@
-/* { dg-xfail-run-if "TODO" { c && openacc_nvidia_accel_selected } { "*" } {
"" } } */
-
#include <assert.h>
/* Test of worker-private variables declared on a loop directive, broadcasting
diff --git
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-par-gang-3.c
libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-par-gang-3.c
index c580d68..e5cd6fa 100644
--- libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-par-gang-3.c
+++ libgomp/testsuite/libgomp.oacc-c-c++-common/private-vars-par-gang-3.c
@@ -1,5 +1,3 @@
-/* { dg-xfail-run-if "TODO" { c && openacc_nvidia_accel_selected } { "*" } {
"" } } */
-
#include <assert.h>
/* Test of gang-private array variable declared on the parallel directive. */
diff --git libgomp/testsuite/libgomp.oacc-c/c.exp
libgomp/testsuite/libgomp.oacc-c/c.exp
index 15e8f81..8d54815 100644
--- libgomp/testsuite/libgomp.oacc-c/c.exp
+++ libgomp/testsuite/libgomp.oacc-c/c.exp
@@ -19,10 +19,6 @@ if ![info exists DEFAULT_CFLAGS] then {
set DEFAULT_CFLAGS "-O2"
}
-proc check_effective_target_c { } {
- return 1
-}
-
# Initialize dg.
dg-init
Grüße,
Thomas
signature.asc
Description: PGP signature
