| /* { dg-require-effective-target vect_int } */ |
| |
| #include "tree-vect.h" |
| |
| int a[64]; |
| int b[128]; |
| |
| void __attribute__((noinline, noclone)) |
| foo (int s) |
| { |
| int i; |
| for (i = 0; i < 32; ++i) |
| { |
| a[2*i] = b[i*s+1]; |
| a[2*i+1] = b[i*s]; |
| } |
| } |
| |
| int main () |
| { |
| int i; |
| check_vect (); |
| for (i = 0; i < 128; ++i) |
| { |
| b[i] = i; |
| __asm__ volatile (""); |
| } |
| foo (4); |
| for (i = 0; i < 64; ++i) |
| if (a[i] != (4*(i/2) + (i & 1) ^ 1)) |
| abort (); |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_perm } } } */ |