#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 } } } } */