| #define N 100 |
| |
| void __attribute__ ((noipa)) |
| foo (int *out, int *in, int step) |
| { |
| for (int i = 0; i < N; ++i) |
| { |
| out[0] = in[i]; |
| out[1] = 2; |
| out += step; |
| } |
| } |
| |
| int in[N]; |
| int out[N * 2]; |
| |
| int |
| main (void) |
| { |
| for (int i = 0; i < N; ++i) |
| { |
| in[i] = i * (i + 1); |
| asm volatile ("" ::: "memory"); |
| } |
| |
| foo (out, in, 1); |
| for (int i = 0; i < N; ++i) |
| if (out[i] != in[i]) |
| __builtin_abort (); |
| if (out[N] != 2) |
| __builtin_abort (); |
| |
| foo (out + N - 1, in, -1); |
| if (out[0] != in[N - 1]) |
| __builtin_abort (); |
| for (int i = 1; i <= N; ++i) |
| if (out[i] != 2) |
| __builtin_abort (); |
| |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" { target { { ! vect_no_align } && vect_int } } } } */ |