blob: 0d0a70dff6f21b2f07fecd937d4fe26c0df61513 [file] [log] [blame]
#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 } } } } */