OSDN Git Service

PR tree-optimization/40542
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / vect / pr37539.c
1 /* { dg-require-effective-target vect_int } */
2
3 #include <stdarg.h>
4 #include "tree-vect.h"
5
6 __attribute__ ((noinline)) void
7 ayuv2yuyv_ref (int *d, int *src, int n)
8 {
9   char *dest = (char *)d;
10   int i;
11
12   for(i=0;i<n/2;i++){
13     dest[i*4 + 0] = (src[i*2 + 0])>>16;
14     dest[i*4 + 1] = (src[i*2 + 1])>>8;
15     dest[i*4 + 2] = (src[i*2 + 0])>>16;
16     dest[i*4 + 3] = (src[i*2 + 0])>>0;
17   }
18
19   /* Check results.  */
20   for(i=0;i<n/2;i++){
21    if (dest[i*4 + 0] != (src[i*2 + 0])>>16
22        || dest[i*4 + 1] != (src[i*2 + 1])>>8
23        || dest[i*4 + 2] != (src[i*2 + 0])>>16
24        || dest[i*4 + 3] != (src[i*2 + 0])>>0) 
25      abort();
26   }
27 }
28
29 int main ()
30 {
31   int d[256], src[128], i;
32  
33   for (i = 0; i < 128; i++)
34     src[i] = i; 
35   
36   ayuv2yuyv_ref(d, src, 128);
37
38   return 0;
39 }
40
41 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_strided_wide } } } */
42 /* { dg-final { cleanup-tree-dump "vect" } } */
43
44
45