Imported Upstream version 4.7.3
[platform/upstream/gcc48.git] / gcc / testsuite / gcc.dg / vect / slp-multitypes-3.c
1 /* { dg-require-effective-target vect_int } */
2
3 #include <stdarg.h>
4 #include "tree-vect.h"
5
6 #define N 8 
7 unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
8 unsigned char in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
9
10 __attribute__ ((noinline)) int
11 main1 ()
12 {
13   int i;
14   unsigned int out[N*8];
15   unsigned char out2[N*8];
16
17   for (i = 0; i < N/2; i++)
18     {
19       out[i*8] = in[i*8] + 5;
20       out[i*8 + 1] = in[i*8 + 1] + 6;
21       out[i*8 + 2] = in[i*8 + 2] + 7;
22       out[i*8 + 3] = in[i*8 + 3] + 8;
23       out[i*8 + 4] = in[i*8 + 4] + 9;
24       out[i*8 + 5] = in[i*8 + 5] + 10;
25       out[i*8 + 6] = in[i*8 + 6] + 11;
26       out[i*8 + 7] = in[i*8 + 7] + 12;
27
28       out2[i*16] = in2[i*16] + 2;
29       out2[i*16 + 1] = in2[i*16 + 1] + 3;
30       out2[i*16 + 2] = in2[i*16 + 2] + 4;
31       out2[i*16 + 3] = in2[i*16 + 3] + 3;
32       out2[i*16 + 4] = in2[i*16 + 4] + 2;
33       out2[i*16 + 5] = in2[i*16 + 5] + 3;
34       out2[i*16 + 6] = in2[i*16 + 6] + 2;
35       out2[i*16 + 7] = in2[i*16 + 7] + 4;
36       out2[i*16 + 8] = in2[i*16 + 8] + 2;
37       out2[i*16 + 9] = in2[i*16 + 9] + 5;
38       out2[i*16 + 10] = in2[i*16 + 10] + 2;
39       out2[i*16 + 11] = in2[i*16 + 11] + 3;
40       out2[i*16 + 12] = in2[i*16 + 12] + 4;
41       out2[i*16 + 13] = in2[i*16 + 13] + 4;
42       out2[i*16 + 14] = in2[i*16 + 14] + 3;
43       out2[i*16 + 15] = in2[i*16 + 15] + 2;
44
45     }
46
47   /* check results:  */
48   for (i = 0; i < N/2; i++)
49     {
50       if (out[i*8] !=  in[i*8] + 5
51          || out[i*8 + 1] != in[i*8 + 1] + 6
52          || out[i*8 + 2] != in[i*8 + 2] + 7
53          || out[i*8 + 3] != in[i*8 + 3] + 8
54          || out[i*8 + 4] != in[i*8 + 4] + 9
55          || out[i*8 + 5] != in[i*8 + 5] + 10
56          || out[i*8 + 6] != in[i*8 + 6] + 11
57          || out[i*8 + 7] != in[i*8 + 7] + 12
58          || out2[i*16] !=  in2[i*16] + 2
59          || out2[i*16 + 1] != in2[i*16 + 1] + 3
60          || out2[i*16 + 2] != in2[i*16 + 2] + 4
61          || out2[i*16 + 3] != in2[i*16 + 3] + 3
62          || out2[i*16 + 4] != in2[i*16 + 4] + 2
63          || out2[i*16 + 5] != in2[i*16 + 5] + 3
64          || out2[i*16 + 6] != in2[i*16 + 6] + 2
65          || out2[i*16 + 7] != in2[i*16 + 7] + 4
66          || out2[i*16 + 8] != in2[i*16 + 8] + 2
67          || out2[i*16 + 9] != in2[i*16 + 9] + 5
68          || out2[i*16 + 10] != in2[i*16 + 10] + 2
69          || out2[i*16 + 11] != in2[i*16 + 11] + 3
70          || out2[i*16 + 12] != in2[i*16 + 12] + 4
71          || out2[i*16 + 13] != in2[i*16 + 13] + 4
72          || out2[i*16 + 14] != in2[i*16 + 14] + 3
73          || out2[i*16 + 15] != in2[i*16 + 15] + 2)
74  
75         abort ();
76     }
77
78   return 0;
79 }
80
81 int main (void)
82 {
83   check_vect ();
84
85   main1 ();
86
87   return 0;
88 }
89
90 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail sparc*-*-* } } } */
91 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { xfail sparc*-*-* } } } */
92 /* { dg-final { cleanup-tree-dump "vect" } } */