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