This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [openmp] Fix openmp 5.0 builtin function types
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Tom de Vries <tdevries at suse dot de>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Wed, 12 Dec 2018 10:27:59 +0100
- Subject: Re: [openmp] Fix openmp 5.0 builtin function types
- References: <20181108172450.GP11625@tucnak> <7637b38b-4107-08f3-9037-9a34a92b8e69@suse.de>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
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