| #include "tree-vect.h" |
| |
| #define N (VECTOR_BITS / 32) |
| #define MAX_COUNT 4 |
| |
| void __attribute__ ((noipa)) |
| run (int *restrict a, int *restrict b, int count) |
| { |
| for (int i = 0; i < count * N; ++i) |
| { |
| a[i * 2] = b[i * 2] + count; |
| a[i * 2 + 1] = count; |
| } |
| } |
| |
| void __attribute__ ((noipa)) |
| check (int *restrict a, int count) |
| { |
| for (int i = 0; i < count * N; ++i) |
| if (a[i * 2] != i * 41 + count || a[i * 2 + 1] != count) |
| __builtin_abort (); |
| if (a[count * 2 * N] != 999) |
| __builtin_abort (); |
| } |
| |
| int a[N * MAX_COUNT * 2 + 1], b[N * MAX_COUNT * 2]; |
| |
| int |
| main (void) |
| { |
| check_vect (); |
| |
| for (int i = 0; i < N * MAX_COUNT; ++i) |
| { |
| b[i * 2] = i * 41; |
| asm volatile ("" ::: "memory"); |
| } |
| |
| for (int i = 0; i <= MAX_COUNT; ++i) |
| { |
| a[i * 2 * N] = 999; |
| run (a, b, i); |
| check (a, i); |
| } |
| |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump-times {LOOP VECTORIZED} 1 "vect" { target { { vect_int && vect_perm } && vect_element_align } } } } */ |