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 <tdevr...@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 <tdevr...@suse.de> Jakub Jelinek <ja...@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