1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include "tree-vect.h"
       4  
       5  int x[1024], y[1024];
       6  
       7  void __attribute__((noipa)) foo()
       8  {
       9    for (int i = 0; i < 512; ++i)
      10      {
      11        x[2*i] = y[1023 - (2*i)];
      12        x[2*i+1] = y[1023 - (2*i+1)];
      13      }
      14  }
      15  
      16  void __attribute__((noipa)) bar()
      17  {
      18    for (int i = 0; i < 512; ++i)
      19      {
      20        x[2*i] = y[1023 - (2*i+1)];
      21        x[2*i+1] = y[1023 - (2*i)];
      22      }
      23  }
      24  
      25  int 
      26  main ()
      27  {
      28    check_vect ();
      29  
      30    for (int i = 0; i < 1024; ++i)
      31      {
      32        x[i] = 0;
      33        y[i] = i;
      34        __asm__ volatile ("");
      35      }
      36  
      37    foo ();
      38    for (int i = 0; i < 1024; ++i)
      39      if (x[i] != y[1023 - i])
      40        abort ();
      41  
      42    for (int i = 0; i < 1024; ++i)
      43      {
      44        x[i] = 0;
      45        __asm__ volatile ("");
      46      }
      47  
      48    bar ();
      49    for (int i = 0; i < 1024; ++i)
      50      if (x[i] != y[1023 - i^1])
      51        abort ();
      52  
      53    return 0;
      54  }
      55  
      56  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" } } */