(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
reduction-16.c
       1  /* { dg-do run } */
       2  /* { dg-additional-options "-foffload-options=nvptx-none=-latomic" { target offload_target_nvptx } } */
       3  
       4  #include <stdlib.h>
       5  
       6  #define N 512
       7  
       8  #define GENERATE_TEST(T)	\
       9  int test_##T (void)		\
      10  {				\
      11    T a[N], res = 0;		\
      12  				\
      13    for (int i = 0; i < N; ++i)	\
      14      a[i] = i & 1;		\
      15  				\
      16  _Pragma("omp target teams distribute reduction(||:res) defaultmap(tofrom:scalar)") \
      17    for (int i = 0; i < N; ++i)	\
      18      res = res || a[i];		\
      19  				\
      20    /* res should be non-zero.  */\
      21    if (!res)			\
      22      return 1;			\
      23  				\
      24  _Pragma("omp target teams distribute reduction(&&:res) defaultmap(tofrom:scalar)") \
      25    for (int i = 0; i < N; ++i)	\
      26      res = res && a[i];		\
      27  				\
      28    /* res should be zero.  */	\
      29    return res;			\
      30  }
      31  
      32  GENERATE_TEST(char)
      33  GENERATE_TEST(short)
      34  GENERATE_TEST(int)
      35  GENERATE_TEST(long)
      36  #ifdef __SIZEOF_INT128__
      37  GENERATE_TEST(__int128)
      38  #endif
      39  
      40  int main(void)
      41  {
      42    if (test_char ())
      43      abort ();
      44    if (test_short ())
      45      abort ();
      46    if (test_int ())
      47      abort ();
      48    if (test_long ())
      49      abort ();
      50  #ifdef __SIZEOF_INT128__
      51    if (test___int128 ())
      52      abort ();
      53  #endif
      54  }