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 12-12-18 10:27, Jakub Jelinek wrote:
> 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 

It does, I get "Call has wrong number of parameters" errors for these 3
mismatches:
...
.extern .func (.param .u32 %value_out)
GOMP_loop_nonmonotonic_runtime_start (.param .u64 %in_ar0, .param .u64
%in_ar1, .param .u64 %in_ar2, .param .u64 %in_ar3, .param .u64 %in_ar4,
.param .u64 %in_ar5);

call
(%value_in),GOMP_loop_nonmonotonic_runtime_start,(%out_arg1,%out_arg2,%out_arg3,%out_arg4,%out_arg5);

.extern .func (.param .u32 %value_out)
GOMP_loop_ull_nonmonotonic_runtime_start (.param .u32 %in_ar0, .param
.u64 %in_ar1, .param .u64 %in_ar2, .param .u64 %in_ar3, .param .u64
%in_ar4, .param .u64 %in_ar5, .param .u64 %in_ar6);

call
(%value_in),GOMP_loop_ull_nonmonotonic_runtime_start,(%out_arg1,%out_arg2,%out_arg3,%out_arg4,%out_arg5,%out_arg6);

.extern .func GOMP_parallel_loop_nonmonotonic_runtime (.param .u64
%in_ar0, .param .u64 %in_ar1, .param .u32 %in_ar2, .param .u64 %in_ar3,
.param .u64 %in_ar4, .param .u64 %in_ar5, .param .u64 %in_ar6, .param
.u32 %in_ar7);

call
GOMP_parallel_loop_nonmonotonic_runtime,(%out_arg1,%out_arg2,%out_arg3,%out_arg4,%out_arg5,%out_arg6,%out_arg7);
...

and after rebuilding the test passes.

> (sorry, don't have nvptx offloading set up right now,
> should fix that soon)?
> 

Np.

Thanks,
- Tom


> 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]