/* { dg-require-effective-target vect_int } */ #include #include "tree-vect.h" __attribute__ ((noinline)) void ayuv2yuyv_ref (int *d, int *src, int n) { char *dest = (char *)d; int i; for(i=0;i>16; dest[i*4 + 1] = (src[i*2 + 1])>>8; dest[i*4 + 2] = (src[i*2 + 0])>>16; dest[i*4 + 3] = (src[i*2 + 0])>>0; } /* Check results. */ for(i=0;i>16 || dest[i*4 + 1] != (src[i*2 + 1])>>8 || dest[i*4 + 2] != (src[i*2 + 0])>>16 || dest[i*4 + 3] != (src[i*2 + 0])>>0) abort(); } } int main () { int d[256], src[128], i; check_vect (); for (i = 0; i < 128; i++) src[i] = i; ayuv2yuyv_ref(d, src, 128); return 0; } /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { vect_strided4 && vect_strided2 } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */