(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-simd-17.c
       1  /* { dg-additional-options "-fopenmp-simd -fno-tree-vectorize" } */
       2  /* { dg-additional-options "-mavx" { target avx_runtime } } */
       3  /* { dg-final { scan-tree-dump "vectorized 1\[1-2] loops" "vect" { target i?86-*-* x86_64-*-* } } } */
       4  
       5  #include "tree-vect.h"
       6  
       7  int x, i, j;
       8  volatile int a, b, c, d, e, f, g, h;
       9  int k[11][101];
      10  
      11  __attribute__((noipa)) void
      12  doit (void)
      13  {
      14    int niters, err = 0;
      15    for (i = 1; i <= 10; i++)
      16      for (j = 1; j <= 10 * i; j++)
      17        {
      18  	k[i][j] = 1;
      19  	asm volatile ("" : : : "memory");
      20        }
      21    a = 1; b = 11; c = 1; d = 0; e = 1; f = 10; g = 1; h = 1;
      22    niters = 0; i = -100; j = -100; x = -100;
      23    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
      24    for (i = 1; i <= 10; i++)
      25      for (j = 1; j <= 10 * i; j++)
      26        {
      27  	err |= (i < 1);
      28  	err |= (i > 10);
      29  	err |= (j < 1);
      30  	err |= (j > 10 * i);
      31  	err |= (k[i][j] != 1);
      32  	k[i][j]++;
      33  	x = i * 1024 + (j & 1023);
      34  	niters++;
      35        }
      36    if (i != 11 || j != 101 || x != 10340 || niters != 550 || err)
      37      abort ();
      38    niters = 0; i = -100; j = -100; x = -100;
      39    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
      40    for (i = a; i < b; i += c)
      41      for (j = d * i + e; j < g + i * f; j += h)
      42        {
      43  	err |= (i < 1);
      44  	err |= (i > 10);
      45  	err |= (j < 1);
      46  	err |= (j > 10 * i);
      47  	err |= (k[i][j] != 2);
      48  	k[i][j]++;
      49  	x = i * 1024 + (j & 1023);
      50  	niters++;
      51        }
      52    if (i != 11 || j != 101 || x != 10340 || niters != 550 || err)
      53      abort ();
      54    for (i = 1; i <= 10; i++)
      55      for (j = 1; j <= 10 * i; j++)
      56        if (k[i][j] == 3)
      57  	k[i][j] = 0;
      58        else
      59  	abort ();
      60    for (i = 0; i < 11; i++)
      61      for (j = 0; j < 101; j++)
      62        if (k[i][j] != 0)
      63  	abort ();
      64    for (i = 0; i < 10; i++)
      65      for (j = 0; j < 10 * i; j++)
      66        {
      67          k[i][j] = 1;
      68  	asm volatile ("" : : : "memory");
      69        }
      70    a = 0; b = 10; c = 1; d = 0; e = 0; f = 10; g = 0; h = 1;
      71    niters = 0; i = -100; j = -100; x = -100;
      72    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
      73    for (i = 0; i < 10; i++)
      74      for (j = 0; j < 10 * i; j++)
      75        {
      76  	err |= (i < 0);
      77  	err |= (i >= 10);
      78  	err |= (j < 0);
      79  	err |= (j >= 10 * i);
      80  	err |= (k[i][j] != 1);
      81  	k[i][j]++;
      82  	x = i * 1024 + (j & 1023);
      83  	niters++;
      84        }
      85    if (i != 10 || j != 90 || x != 9305 || niters != 450 || err)
      86      abort ();
      87    niters = 0; i = -100; j = -100; x = -100;
      88    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
      89    for (i = a; i < b; i += c)
      90      for (j = d * i + e; j < g + i * f; j += h)
      91        {
      92  	err |= (i < 0);
      93  	err |= (i >= 10);
      94  	err |= (j < 0);
      95  	err |= (j >= 10 * i);
      96  	err |= (k[i][j] != 2);
      97  	k[i][j]++;
      98  	x = i * 1024 + (j & 1023);
      99  	niters++;
     100        }
     101    if (i != 10 || j != 90 || x != 9305 || niters != 450 || err)
     102      abort ();
     103    for (i = 0; i < 10; i++)
     104      for (j = 0; j < 10 * i; j++)
     105        if (k[i][j] == 3)
     106  	k[i][j] = 0;
     107        else
     108  	abort ();
     109    for (i = 0; i < 11; i++)
     110      for (j = 0; j < 101; j++)
     111        if (k[i][j] != 0)
     112  	abort ();
     113    for (i = 4; i < 10; i++)
     114      for (j = -9 + 2 * i; j < i; j++)
     115        {
     116          k[i][j + 1] = 1;
     117  	asm volatile ("" : : : "memory");
     118        }
     119    a = 4; b = 10; c = 1; d = 2; e = -9; f = 1; g = 0; h = 1;
     120    niters = 0; i = -100; j = -100; x = -100;
     121    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
     122    for (i = 4; i < 10; i++)
     123      for (j = -9 + 2 * i; j < i; j++)
     124        {
     125  	err |= (i < 4);
     126  	err |= (i >= 10);
     127  	err |= (j < -9 + 2 * i);
     128  	err |= (j >= i);
     129  	err |= (k[i][j + 1] != 1);
     130  	k[i][j + 1]++;
     131  	x = i * 1024 + (j & 1023);
     132  	niters++;
     133        }
     134    if (/*i != 10 || j != 9 || */x != 8199 || niters != 15 || err)
     135      abort ();
     136    niters = 0; i = -100; j = -100; x = -100;
     137    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
     138    for (i = a; i < b; i += c)
     139      for (j = d * i + e; j < g + i * f; j += h)
     140        {
     141  	err |= (i < 4);
     142  	err |= (i >= 10);
     143  	err |= (j < -9 + 2 * i);
     144  	err |= (j >= i);
     145  	err |= (k[i][j + 1] != 2);
     146  	k[i][j + 1]++;
     147  	x = i * 1024 + (j & 1023);
     148  	niters++;
     149        }
     150    if (/*i != 10 || j != 9 || */x != 8199 || niters != 15 || err)
     151      abort ();
     152    for (i = 4; i < 10; i++)
     153      for (j = -9 + 2 * i; j < i; j++)
     154        if (k[i][j + 1] == 3)
     155  	k[i][j + 1] = 0;
     156        else
     157  	abort ();
     158    for (i = 0; i < 11; i++)
     159      for (j = 0; j < 101; j++)
     160        if (k[i][j] != 0)
     161  	abort ();
     162    for (i = 1; i < 10; i += 2)
     163      for (j = 1; j < i + 1; j++)
     164        {
     165  	k[i][j] = 1;
     166  	asm volatile ("" : : : "memory");
     167        }
     168    a = 1; b = 10; c = 2; d = 0; e = 1; f = 1; g = 1; h = 1;
     169    niters = 0; i = -100; j = -100; x = -100;
     170    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
     171    for (i = 1; i < 10; i += 2)
     172      for (j = 1; j < i + 1; j++)
     173        {
     174  	err |= (i < 1);
     175  	err |= (i >= 10);
     176  	err |= (j < 1);
     177  	err |= (j >= i + 1);
     178  	err |= (k[i][j] != 1);
     179  	k[i][j]++;
     180  	x = i * 1024 + (j & 1023);
     181  	niters++;
     182        }
     183    if (i != 11 || j != 10 || x != 9225 || niters != 25 || err)
     184      abort ();
     185    niters = 0; i = -100; j = -100; x = -100;
     186    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
     187    for (i = a; i < b; i += c)
     188      for (j = d * i + e; j < g + i * f; j += h)
     189        {
     190  	err |= (i < 1);
     191  	err |= (i >= 10);
     192  	err |= (j < 1);
     193  	err |= (j >= i + 1);
     194  	err |= (k[i][j] != 2);
     195  	k[i][j]++;
     196  	x = i * 1024 + (j & 1023);
     197  	niters++;
     198        }
     199    if (i != 11 || j != 10 || x != 9225 || niters != 25 || err)
     200      abort ();
     201    for (i = 1; i < 10; i += 2)
     202      for (j = 1; j < i + 1; j++)
     203        if (k[i][j] == 3)
     204  	k[i][j] = 0;
     205        else
     206  	abort ();
     207    for (i = 0; i < 11; i++)
     208      for (j = 0; j < 101; j++)
     209        if (k[i][j] != 0)
     210  	abort ();
     211    for (j = -11; j >= -41; j -= 15)
     212      {
     213        k[0][-j] = 1;
     214        asm volatile ("" : : : "memory");
     215      }
     216    a = 4; b = 8; c = 12; d = -8; e = -9; f = -3; g = 6; h = 15;
     217    niters = 0; i = -100; j = -100; x = -100;
     218    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
     219    for (i = 4; i < 8; i += 12)
     220      for (j = -8 * i - 9; j < i * -3 + 6; j += 15)
     221        {
     222  	err |= (i != 4);
     223  	err |= (j < -41);
     224  	err |= (j > -11);
     225  	err |= (k[0][-j] != 1);
     226  	k[0][-j]++;
     227  	x = i * 1024 + (j & 1023);
     228  	niters++;
     229        }
     230    if (i != 16 || j != 4 || x != 5109 || niters != 3 || err)
     231      abort ();
     232    niters = 0; i = -100; j = -100; x = -100;
     233    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
     234    for (i = a; i < b; i += c)
     235      for (j = d * i + e; j < g + i * f; j += h)
     236        {
     237  	err |= (i != 4);
     238  	err |= (j < -41);
     239  	err |= (j > -11);
     240  	err |= (k[0][-j] != 2);
     241  	k[0][-j]++;
     242  	x = i * 1024 + (j & 1023);
     243  	niters++;
     244        }
     245    if (i != 16 || j != 4 || x != 5109 || niters != 3 || err)
     246      abort ();
     247    for (j = -11; j >= -41; j -= 15)
     248      if (k[0][-j] == 3)
     249        k[0][-j] = 0;
     250      else
     251        abort ();
     252    for (j = -11; j >= -41; j--)
     253      if (k[0][-j] != 0)
     254        abort ();
     255    for (j = -34; j <= -7; j++)
     256      {
     257        k[0][-j] = 1;
     258        asm volatile ("" : : : "memory");
     259      }
     260    a = -13; b = 7; c = 12; d = 3; e = 5; f = 0; g = -6; h = 1;
     261    niters = 0; i = -100; j = -100; x = -100;
     262    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
     263    for (i = -13; i < 7; i += 12)
     264      for (j = 3 * i + 5; j < -6; j++)
     265        {
     266  	err |= (i != -13);
     267  	err |= (j < -34);
     268  	err |= (j > -7);
     269  	err |= (k[0][-j] != 1);
     270  	k[0][-j]++;
     271  	x = i * 1024 + (j & 1023);
     272  	niters++;
     273        }
     274    if (/*i != 11 || j != 2 || */x != -12295 || niters != 28 || err)
     275      abort ();
     276    niters = 0; i = -100; j = -100; x = -100;
     277    #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
     278    for (i = a; i < b; i += c)
     279      for (j = d * i + e; j < g + i * f; j += h)
     280        {
     281  	err |= (i != -13);
     282  	err |= (j < -34);
     283  	err |= (j > -7);
     284  	err |= (k[0][-j] != 2);
     285  	k[0][-j]++;
     286  	x = i * 1024 + (j & 1023);
     287  	niters++;
     288        }
     289    if (/*i != 11 || j != 2 || */x != -12295 || niters != 28 || err)
     290      abort ();
     291    for (j = -34; j <= -7; j++)
     292      if (k[0][-j] == 3)
     293        k[0][-j] = 0;
     294      else
     295        abort ();
     296  }
     297  
     298  int
     299  main ()
     300  {
     301    check_vect ();
     302    doit ();
     303    return 0;
     304  }