(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
lastprivate-conditional-9.c
       1  /* { dg-do run } */
       2  
       3  int v, x;
       4  
       5  __attribute__((noipa)) void
       6  foo (int *a)
       7  {
       8    #pragma omp for simd lastprivate (conditional: x) schedule(simd: static) if (simd: 0)
       9    for (int i = 0; i < 128; i++)
      10      if (a[i])
      11        x = a[i];
      12  }
      13  
      14  __attribute__((noipa)) void
      15  bar (int *a, int *b)
      16  {
      17    #pragma omp for simd lastprivate (conditional: x, v) schedule(static, 16) simdlen(1)
      18    for (int i = 16; i < 128; ++i)
      19      {
      20        if (a[i])
      21  	x = a[i];
      22        if (b[i])
      23  	v = b[i] + 10;
      24      }
      25  }
      26  
      27  __attribute__((noipa)) void
      28  baz (int *a)
      29  {
      30    #pragma omp for simd lastprivate (conditional: x) schedule(simd: dynamic, 16) if (0)
      31    for (int i = 0; i < 128; i++)
      32      if (a[i])
      33        x = a[i] + 5;
      34  }
      35  
      36  int
      37  main ()
      38  {
      39    int a[128], b[128], i;
      40    for (i = 0; i < 128; i++)
      41      {
      42        a[i] = ((i % 11) == 2) ? i + 10 : 0;
      43        asm volatile ("" : "+g" (i));
      44        b[i] = ((i % 13) == 5) ? i * 2 : 0;
      45      }
      46    #pragma omp parallel
      47    foo (a);
      48    if (x != 133)
      49      __builtin_abort ();
      50    x = -3;
      51    #pragma omp parallel
      52    bar (b, a);
      53    if (x != 244 || v != 143)
      54      __builtin_abort ();
      55    #pragma omp parallel
      56    baz (b);
      57    if (x != 249)
      58      __builtin_abort ();
      59    return 0;
      60  }