1  /* { dg-options "-O3 -fdump-tree-lversion-details" } */
       2  
       3  /* Test that we do version for a step of 1 when that would lead the
       4     iterations to access consecutive groups.  */
       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 * 2] = 100;
      12        x[i * stepx * 2 + 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 * 2)
      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 * 2 - 16] = 100;
      32        x[i * stepx * 2 - 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 * 2)
      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 (unsigned short *y = x; y < x + n; y += stepx * 2)
      50      {
      51        y[0] = 100;
      52        y[1] = 99;
      53      }
      54  }
      55  
      56  unsigned short x[1000];
      57  
      58  void
      59  g1 (int stepx, int n)
      60  {
      61    for (int i = 0; i < n; ++i)
      62      {
      63        x[i * stepx * 2] = 100;
      64        x[i * stepx * 2 + 1] = 99;
      65      }
      66  }
      67  
      68  void
      69  g2 (int stepx, int n)
      70  {
      71    for (int i = 0; i < n; i += stepx * 2)
      72      {
      73        x[i] = 100;
      74        x[i + 1] = 99;
      75      }
      76  }
      77  
      78  void
      79  g3 (int stepx, int n)
      80  {
      81    for (int i = 0; i < n; ++i)
      82      {
      83        x[i * stepx * 2 - 16] = 100;
      84        x[i * stepx * 2 - 15] = 99;
      85      }
      86  }
      87  
      88  void
      89  g4 (int stepx, int n)
      90  {
      91    for (int i = 0; i < n; i += stepx * 2)
      92      {
      93        x[i - 16] = 100;
      94        x[i - 15] = 99;
      95      }
      96  }
      97  
      98  void
      99  g5 (int stepx, int n)
     100  {
     101    for (unsigned short *y = x; y < x + n; y += stepx * 2)
     102      {
     103        y[0] = 100;
     104        y[1] = 99;
     105      }
     106  }
     107  
     108  /* { dg-final { scan-tree-dump-times {want to version containing loop} 10 "lversion" } } */
     109  /* { dg-final { scan-tree-dump-times {versioned this loop} 10 "lversion" } } */