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]

Re: [openmp] Fix openmp 5.0 builtin function types


On Wed, Dec 12, 2018 at 09:25:06AM +0100, Tom de Vries wrote:
> [openmp] Fix openmp 5.0 builtin function types
> 
> Fix some openmp 5.0 builtin functions to match the type used in the
> implementation of those functions.
> 
> This fixes some libgomp testsuite failures for x86_64 with nvptx accelerator.
> 
> Build on x86_64 with nvptx accelerator, tested libgomp.
> 
> 2018-12-12  Tom de Vries  <tdevries@suse.de>
> 
> 	* omp-builtins.def
> 	(BUILT_IN_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_START)
> 	(BUILT_IN_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_START)
> 	(BUILT_IN_GOMP_PARALLEL_LOOP_MAYBE_NONMONOTONIC_RUNTIME): Fix
> 	function type.

Good catch, but it looks insufficient, the builtins without _maybe have the
same bug (copy and paste from the preceding dynamic/guided calls that do
have that extra argument - chunk_size), so if you've caught only these,
it seems we have insufficient testsuite covergate in the target regions.

Does the following testcase show also the remaining three bugs on unpatched
nvptx offloading (sorry, don't have nvptx offloading set up right now,
should fix that soon)?

2018-12-12  Tom de Vries  <tdevries@suse.de>
	    Jakub Jelinek  <jakub@redhat.com>

	* omp-builtins.def (BUILT_IN_GOMP_LOOP_NONMONOTONIC_RUNTIME_START,
	BUILT_IN_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_START,
	BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_RUNTIME_START,
	BUILT_IN_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_START,
	BUILT_IN_GOMP_PARALLEL_LOOP_NONMONOTONIC_RUNTIME,
	BUILT_IN_GOMP_PARALLEL_LOOP_MAYBE_NONMONOTONIC_RUNTIME): Fix up
	function types - remove one argument.

	* testsuite/libgomp.c-c++-common/for-16.c: New test.

--- gcc/omp-builtins.def.jj	2018-11-08 18:07:56.345070635 +0100
+++ gcc/omp-builtins.def	2018-12-12 10:03:14.355354282 +0100
@@ -126,11 +126,11 @@ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_NON
 		  ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_NONMONOTONIC_RUNTIME_START,
 		  "GOMP_loop_nonmonotonic_runtime_start",
-		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
 		  ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_START,
 		  "GOMP_loop_maybe_nonmonotonic_runtime_start",
-		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
 		  ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
 		  "GOMP_loop_ordered_static_start",
@@ -234,11 +234,11 @@ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL
 		  ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_RUNTIME_START,
 		  "GOMP_loop_ull_nonmonotonic_runtime_start",
-		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
 		  ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_START,
 		  "GOMP_loop_ull_maybe_nonmonotonic_runtime_start",
-		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
 		  ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_START,
 		  "GOMP_loop_ull_ordered_static_start",
@@ -349,11 +349,11 @@ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL
 		  ATTR_NOTHROW_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_NONMONOTONIC_RUNTIME,
 		  "GOMP_parallel_loop_nonmonotonic_runtime",
-		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
 		  ATTR_NOTHROW_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_MAYBE_NONMONOTONIC_RUNTIME,
 		  "GOMP_parallel_loop_maybe_nonmonotonic_runtime",
-		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
 		  ATTR_NOTHROW_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END, "GOMP_loop_end",
 		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
--- libgomp/testsuite/libgomp.c-c++-common/for-16.c.jj	2018-12-12 10:19:50.640074341 +0100
+++ libgomp/testsuite/libgomp.c-c++-common/for-16.c	2018-12-12 10:19:22.100540708 +0100
@@ -0,0 +1,114 @@
+extern
+#ifdef __cplusplus
+"C"
+#endif
+void abort (void);
+
+unsigned long long int k = 16;
+#pragma omp declare target to (k)
+
+int
+main ()
+{
+  unsigned char a[144], b[144], c[144];
+  int l;
+  #pragma omp target map(from:a, b, c)
+  {
+    int i;
+    unsigned long long int j;
+    #pragma omp parallel for schedule (runtime)
+    for (i = 0; i < 16; i++)
+      a[i] = i;
+    #pragma omp parallel for schedule (monotonic: runtime)
+    for (i = 0; i < 16; i++)
+      a[i + 16] = i + 16;
+    #pragma omp parallel for schedule (nonmonotonic: runtime)
+    for (i = 0; i < 16; i++)
+      a[i + 32] = i + 32;
+    #pragma omp parallel
+    {
+      #pragma omp for schedule (runtime)
+      for (i = 0; i < 16; i++)
+        a[i + 48] = i + 48;
+      #pragma omp for schedule (monotonic: runtime)
+      for (i = 0; i < 16; i++)
+        a[i + 64] = i + 64;
+      #pragma omp for schedule (nonmonotonic: runtime)
+      for (i = 0; i < 16; i++)
+        a[i + 80] = i + 80;
+      #pragma omp for schedule (runtime)
+      for (j = 0; j < k; j++)
+        a[j + 96] = j + 96;
+      #pragma omp for schedule (monotonic: runtime)
+      for (j = 0; j < k; j++)
+        a[j + 112] = j + 112;
+      #pragma omp for schedule (nonmonotonic: runtime)
+      for (j = 0; j < k; j++)
+        a[j + 128] = j + 128;
+    }
+    #pragma omp parallel for schedule (dynamic)
+    for (i = 0; i < 16; i++)
+      b[i] = i;
+    #pragma omp parallel for schedule (monotonic: dynamic)
+    for (i = 0; i < 16; i++)
+      b[i + 16] = i + 16;
+    #pragma omp parallel for schedule (nonmonotonic: dynamic)
+    for (i = 0; i < 16; i++)
+      b[i + 32] = i + 32;
+    #pragma omp parallel
+    {
+      #pragma omp for schedule (dynamic)
+      for (i = 0; i < 16; i++)
+        b[i + 48] = i + 48;
+      #pragma omp for schedule (monotonic: dynamic)
+      for (i = 0; i < 16; i++)
+        b[i + 64] = i + 64;
+      #pragma omp for schedule (nonmonotonic: dynamic)
+      for (i = 0; i < 16; i++)
+        b[i + 80] = i + 80;
+      #pragma omp for schedule (dynamic)
+      for (j = 0; j < k; j++)
+        b[j + 96] = j + 96;
+      #pragma omp for schedule (monotonic: dynamic)
+      for (j = 0; j < k; j++)
+        b[j + 112] = j + 112;
+      #pragma omp for schedule (nonmonotonic: dynamic)
+      for (j = 0; j < k; j++)
+        b[j + 128] = j + 128;
+    }
+    #pragma omp parallel for schedule (guided)
+    for (i = 0; i < 16; i++)
+      c[i] = i;
+    #pragma omp parallel for schedule (monotonic: guided)
+    for (i = 0; i < 16; i++)
+      c[i + 16] = i + 16;
+    #pragma omp parallel for schedule (nonmonotonic: guided)
+    for (i = 0; i < 16; i++)
+      c[i + 32] = i + 32;
+    #pragma omp parallel
+    {
+      #pragma omp for schedule (guided)
+      for (i = 0; i < 16; i++)
+        c[i + 48] = i + 48;
+      #pragma omp for schedule (monotonic: guided)
+      for (i = 0; i < 16; i++)
+        c[i + 64] = i + 64;
+      #pragma omp for schedule (nonmonotonic: guided)
+      for (i = 0; i < 16; i++)
+        c[i + 80] = i + 80;
+      #pragma omp for schedule (guided)
+      for (j = 0; j < k; j++)
+        c[j + 96] = j + 96;
+      #pragma omp for schedule (monotonic: guided)
+      for (j = 0; j < k; j++)
+        c[j + 112] = j + 112;
+      #pragma omp for schedule (nonmonotonic: guided)
+      for (j = 0; j < k; j++)
+        c[j + 128] = j + 128;
+    }
+  }
+  for (l = 0; l < 144; ++l)
+    if (a[l] != l || b[l] != l || c[l] != l)
+      abort ();
+  return 0;
+}


	Jakub


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