On Wed, Mar 08, 2023 at 02:31:38PM +0800, Hongyu Wang wrote:
> Hi,
> 
> When OMP_WAIT_POLICY is not specified, current implementation will cause
> icv flag GOMP_ICV_WAIT_POLICY unset, so global variable wait_policy
> will remain its uninitialized value. Set it to -1 when the flag is not
> specified to keep GOMP_SPINCOUNT behavior consistent with its description.
> 
> Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?
> 
> libgomp/ChangeLog:
> 
>       PR libgomp/109062
>       * env.c (initialize_env): Set wait_policy to -1 if
>       OMP_WAIT_POLICY is not specified.
>       * testsuite/libgomp.c-c++-common/pr109062.c: New test.

I think the right spot to fix this would be instead in initialize_icvs,
change the
  icvs->wait_policy = 0;
in there to
  icvs->wait_policy = -1;
That way it will be the default for all the devices, not just the
initial one.

Ok for trunk with that change if it works.

> diff --git a/libgomp/env.c b/libgomp/env.c
> index c41c1f852cc..fa36a8697d6 100644
> --- a/libgomp/env.c
> +++ b/libgomp/env.c
> @@ -2249,6 +2249,8 @@ initialize_env (void)
>      wait_policy = none->icvs.wait_policy;
>    else if (all != NULL && gomp_get_icv_flag (all->flags, 
> GOMP_ICV_WAIT_POLICY))
>      wait_policy = all->icvs.wait_policy;
> +  else
> +    wait_policy = -1;
>  
>    if (!parse_spincount ("GOMP_SPINCOUNT", &gomp_spin_count_var))
>      {
> diff --git a/libgomp/testsuite/libgomp.c-c++-common/pr109062.c 
> b/libgomp/testsuite/libgomp.c-c++-common/pr109062.c
> new file mode 100644
> index 00000000000..5c7c287dafd
> --- /dev/null
> +++ b/libgomp/testsuite/libgomp.c-c++-common/pr109062.c
> @@ -0,0 +1,14 @@
> +/* { dg-do run } */
> +
> +#include <omp.h>
> +#include <stdlib.h>
> +
> +int
> +main ()
> +{
> +  omp_display_env (1);
> +
> +  return 0;
> +}
> +
> +/* { dg-output ".*\\\[host] GOMP_SPINCOUNT = '300000'.*" { target native } } 
> */
> -- 
> 2.31.1

        Jakub

Reply via email to