(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
loop-versioning-14.c
       1  /* { dg-options "-O3 -fdump-tree-lversion-details" } */
       2  
       3  /* Test that we don't try to version for a step of 1 when that would
       4     cause the iterations to leave a gap between accesses.  */
       5  
       6  void
       7  f1 (unsigned short *x, int stepx, int n)
       8  {
       9    for (int i = 0; i < n; ++i)
      10      {
      11        x[i * stepx * 4] = 100;
      12        x[i * stepx * 4 + 1] = 99;
      13      }
      14  }
      15  
      16  void
      17  f2 (unsigned short *x, int stepx, int n)
      18  {
      19    for (int i = 0; i < n; i += stepx * 4)
      20      {
      21        x[i] = 100;
      22        x[i + 1] = 99;
      23      }
      24  }
      25  
      26  void
      27  f3 (unsigned short *x, int stepx, int n)
      28  {
      29    for (int i = 0; i < n; ++i)
      30      {
      31        x[i * stepx * 4 - 16] = 100;
      32        x[i * stepx * 4 - 15] = 99;
      33      }
      34  }
      35  
      36  void
      37  f4 (unsigned short *x, int stepx, int n)
      38  {
      39    for (int i = 0; i < n; i += stepx * 4)
      40      {
      41        x[i - 16] = 100;
      42        x[i - 15] = 99;
      43      }
      44  }
      45  
      46  void
      47  f5 (unsigned short *x, int stepx, int n)
      48  {
      49    for (int i = 0; i < n; ++i)
      50      {
      51        x[i * stepx * 64 - 16] = 100;
      52        x[i * stepx * 64 + 15] = 99;
      53      }
      54  }
      55  
      56  void
      57  f6 (unsigned short *x, int stepx, int n)
      58  {
      59    for (int i = 0; i < n; i += stepx * 64)
      60      {
      61        x[i - 16] = 100;
      62        x[i + 15] = 99;
      63      }
      64  }
      65  
      66  void
      67  f7 (unsigned short *x, int stepx, int n)
      68  {
      69    for (unsigned short *y = x; y < x + n; y += stepx * 4)
      70      {
      71        y[0] = 100;
      72        y[1] = 99;
      73      }
      74  }
      75  
      76  unsigned short x[1000];
      77  
      78  void
      79  g1 (int stepx, int n)
      80  {
      81    for (int i = 0; i < n; ++i)
      82      {
      83        x[i * stepx * 4] = 100;
      84        x[i * stepx * 4 + 1] = 99;
      85      }
      86  }
      87  
      88  void
      89  g2 (int stepx, int n)
      90  {
      91    for (int i = 0; i < n; i += stepx * 4)
      92      {
      93        x[i] = 100;
      94        x[i + 1] = 99;
      95      }
      96  }
      97  
      98  void
      99  g3 (int stepx, int n)
     100  {
     101    for (int i = 0; i < n; ++i)
     102      {
     103        x[i * stepx * 4 - 16] = 100;
     104        x[i * stepx * 4 - 15] = 99;
     105      }
     106  }
     107  
     108  void
     109  g4 (int stepx, int n)
     110  {
     111    for (int i = 0; i < n; i += stepx * 4)
     112      {
     113        x[i - 16] = 100;
     114        x[i - 15] = 99;
     115      }
     116  }
     117  
     118  void
     119  g5 (int stepx, int n)
     120  {
     121    for (int i = 0; i < n; ++i)
     122      {
     123        x[i * stepx * 64 - 16] = 100;
     124        x[i * stepx * 64 + 15] = 99;
     125      }
     126  }
     127  
     128  void
     129  g6 (int stepx, int n)
     130  {
     131    for (int i = 0; i < n; i += stepx * 64)
     132      {
     133        x[i - 16] = 100;
     134        x[i + 15] = 99;
     135      }
     136  }
     137  
     138  void
     139  g7 (int stepx, int n)
     140  {
     141    for (unsigned short *y = x; y < x + n; y += stepx * 4)
     142      {
     143        y[0] = 100;
     144        y[1] = 99;
     145      }
     146  }
     147  
     148  /* { dg-final { scan-tree-dump-not {want to version} "lversion" } } */
     149  /* { dg-final { scan-tree-dump-not {versioned} "lversion" } } */