blob: 113223ab0f96507b74cfff8fc6b112070cabb5ee [file] [log] [blame]
/* { dg-require-effective-target vect_int } */
/* { dg-require-effective-target vect_pack_trunc } */
/* { dg-additional-options "-msse4" { target { i?86-*-* x86_64-*-* } } } */
#include "tree-vect.h"
extern void abort (void);
unsigned char a[64];
short b[88];
void __attribute__((noinline))
test(unsigned char * __restrict__ dst, short * __restrict__ tptr)
{
int i;
for (i = 0; i < 8; i++)
{
dst[0] = (tptr[0] - tptr[0 + 3]);
dst[1] = (tptr[1] - tptr[1 + 3]);
dst[2] = (tptr[2] - tptr[2 + 3]);
dst[3] = (tptr[3] - tptr[3 + 3]);
dst[4] = (tptr[4] - tptr[4 + 3]);
dst[5] = (tptr[5] - tptr[5 + 3]);
dst[6] = (tptr[6] - tptr[6 + 3]);
dst[7] = (tptr[7] - tptr[7 + 3]);
dst += 8;
tptr += 11;
}
}
int main()
{
int i;
check_vect ();
for (i = 0; i < 88; ++i)
{
b[i] = i;
__asm__ volatile ("");
}
test (a, b);
for (i = 0; i < 64; ++i)
if (a[i] != 253)
abort ();
return 0;
}
/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */