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

nathan
2015-06-26  Nathan Sidwell  <nat...@codesourcery.com>

	* 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.

@@ -2802,3 +2809,8 @@ Copyright (C) 2013-2015 Free Software Fo
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
 notice and this notice are preserved.
+
+Local Variables:
+mode: change-log
+change-log-default-name: "ChangeLog.gomp"
+End:
Index: config/nvptx/nvptx.md
===================================================================
--- 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[] =
Index: omp-builtins.def
===================================================================
--- 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",

Reply via email to