blob: 98213905ecefacbbe7e028dc7a2578ea2e24aa28 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O3 -mavx2 -fdump-tree-fre5" } */
void __attribute__((noinline,noclone))
foo (int *out, int *res)
{
int mask[] = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 };
int i;
for (i = 0; i < 16; ++i)
{
if (mask[i])
out[i] = i;
}
int o0 = out[0];
int o7 = out[7];
int o14 = out[14];
int o15 = out[15];
res[0] = o0;
res[2] = o7;
res[4] = o14;
res[6] = o15;
}
/* Vectorization produces .MASK_STORE, unrolling will unroll the two
vector iterations. FRE5 after that should be able to CSE
out[7] and out[15], but leave out[0] and out[14] alone. */
/* { dg-final { scan-tree-dump " = o0_\[0-9\]+;" "fre5" } } */
/* { dg-final { scan-tree-dump " = 7;" "fre5" } } */
/* { dg-final { scan-tree-dump " = o14_\[0-9\]+;" "fre5" } } */
/* { dg-final { scan-tree-dump " = 15;" "fre5" } } */