(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
pr106449.c
       1  /* PR middle-end/106449 */
       2  /* { dg-do run } */
       3  
       4  void
       5  foo (void)
       6  {
       7    int a[1024], *b[65536];
       8    int *p, *q, **r = &b[0], i;
       9    #pragma omp simd collapse(2) linear(r : 2)
      10    for (p = &a[0]; p < &a[512]; p++)
      11      for (q = p + 64; q < p + 128; q++)
      12        {
      13          *r++ = p;
      14          *r++ = q;
      15        }
      16    for (i = 0; i < 32768; i++)
      17      if (b[2 * i] != &a[i / 64] || b[2 * i + 1] != &a[(i / 64) + 64 + (i % 64)])
      18        __builtin_abort ();
      19  }
      20  
      21  void
      22  bar (int n, int m)
      23  {
      24    int a[1024], *b[65536];
      25    int *p, *q, **r = &b[0], i;
      26    #pragma omp parallel for simd collapse(2) linear(r : 2)
      27    for (p = &a[0]; p < &a[512]; p++)
      28      for (q = p + n; q < p + m; q++)
      29        {
      30          *r++ = p;
      31          *r++ = q;
      32        }
      33    for (i = 0; i < 32768; i++)
      34      if (b[2 * i] != &a[i / 64] || b[2 * i + 1] != &a[(i / 64) + 64 + (i % 64)])
      35        __builtin_abort ();
      36  }
      37  
      38  void
      39  baz (int n, int m)
      40  {
      41    int a[1024], *b[8192];
      42    int *p, *q, **r = &b[0], i;
      43    #pragma omp parallel for simd collapse(2) linear(r : 2)
      44    for (p = &a[0]; p < &a[512]; p += 4)
      45      for (q = p + n; q < p + m; q += 2)
      46        {
      47          *r++ = p;
      48          *r++ = q;
      49        }
      50    for (i = 0; i < 4096; i++)
      51      if (b[2 * i] != &a[(i / 32) * 4] || b[2 * i + 1] != &a[(i / 32) * 4 + 64 + (i % 32) * 2])
      52        __builtin_abort ();
      53  }
      54  
      55  int
      56  main ()
      57  {
      58    foo ();
      59    bar (64, 128);
      60    baz (64, 128);
      61    return 0;
      62  }