Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/vect/slp-3.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* { dg-require-effective-target vect_int } */ | |
2 | |
3 #include <stdarg.h> | |
4 #include "tree-vect.h" | |
5 | |
6 #define N 12 | |
7 | |
8 unsigned short 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,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}; | |
9 | |
10 int | |
11 main1 () | |
12 { | |
13 int i; | |
14 unsigned short out[N*8]; | |
15 | |
16 for (i = 0; i < N; i++) | |
17 { | |
18 out[i*8] = in[i*8]; | |
19 out[i*8 + 1] = in[i*8 + 1]; | |
20 out[i*8 + 2] = in[i*8 + 2]; | |
21 out[i*8 + 3] = in[i*8 + 3]; | |
22 out[i*8 + 4] = in[i*8 + 4]; | |
23 out[i*8 + 5] = in[i*8 + 5]; | |
24 out[i*8 + 6] = in[i*8 + 6]; | |
25 out[i*8 + 7] = in[i*8 + 7]; | |
26 } | |
27 | |
28 /* check results: */ | |
29 for (i = 0; i < N; i++) | |
30 { | |
31 if (out[i*8] != in[i*8] | |
32 || out[i*8 + 1] != in[i*8 + 1] | |
33 || out[i*8 + 2] != in[i*8 + 2] | |
34 || out[i*8 + 3] != in[i*8 + 3] | |
35 || out[i*8 + 4] != in[i*8 + 4] | |
36 || out[i*8 + 5] != in[i*8 + 5] | |
37 || out[i*8 + 6] != in[i*8 + 6] | |
38 || out[i*8 + 7] != in[i*8 + 7]) | |
39 abort (); | |
40 } | |
41 | |
42 for (i = 0; i < N*2; i++) | |
43 { | |
44 out[i*4] = in[i*4]; | |
45 out[i*4 + 1] = in[i*4 + 1]; | |
46 out[i*4 + 2] = in[i*4 + 2]; | |
47 out[i*4 + 3] = in[i*4 + 3]; | |
48 } | |
49 | |
50 /* check results: */ | |
51 for (i = 0; i < N*2; i++) | |
52 { | |
53 if (out[i*4] != in[i*4] | |
54 || out[i*4 + 1] != in[i*4 + 1] | |
55 || out[i*4 + 2] != in[i*4 + 2] | |
56 || out[i*4 + 3] != in[i*4 + 3]) | |
57 abort (); | |
58 } | |
59 | |
60 for (i = 0; i < N/2; i++) | |
61 { | |
62 out[i*16] = in[i*16]; | |
63 out[i*16 + 1] = in[i*16 + 1]; | |
64 out[i*16 + 2] = in[i*16 + 2]; | |
65 out[i*16 + 3] = in[i*16 + 3]; | |
66 out[i*16 + 4] = in[i*16 + 4]; | |
67 out[i*16 + 5] = in[i*16 + 5]; | |
68 out[i*16 + 6] = in[i*16 + 6]; | |
69 out[i*16 + 7] = in[i*16 + 7]; | |
70 out[i*16 + 8] = in[i*16 + 8]; | |
71 out[i*16 + 9] = in[i*16 + 9]; | |
72 out[i*16 + 10] = in[i*16 + 10]; | |
73 out[i*16 + 11] = in[i*16 + 11]; | |
74 out[i*16 + 12] = in[i*16 + 12]; | |
75 out[i*16 + 13] = in[i*16 + 13]; | |
76 out[i*16 + 14] = in[i*16 + 14]; | |
77 out[i*16 + 15] = in[i*16 + 15]; | |
78 } | |
79 | |
80 /* check results: */ | |
81 for (i = 0; i < N/2; i++) | |
82 { | |
83 if (out[i*16] != in[i*16] | |
84 || out[i*16 + 1] != in[i*16 + 1] | |
85 || out[i*16 + 2] != in[i*16 + 2] | |
86 || out[i*16 + 3] != in[i*16 + 3] | |
87 || out[i*16 + 4] != in[i*16 + 4] | |
88 || out[i*16 + 5] != in[i*16 + 5] | |
89 || out[i*16 + 6] != in[i*16 + 6] | |
90 || out[i*16 + 7] != in[i*16 + 7] | |
91 || out[i*16 + 8] != in[i*16 + 8] | |
92 || out[i*16 + 9] != in[i*16 + 9] | |
93 || out[i*16 + 10] != in[i*16 + 10] | |
94 || out[i*16 + 11] != in[i*16 + 11] | |
95 || out[i*16 + 12] != in[i*16 + 12] | |
96 || out[i*16 + 13] != in[i*16 + 13] | |
97 || out[i*16 + 14] != in[i*16 + 14] | |
98 || out[i*16 + 15] != in[i*16 + 15]) | |
99 abort (); | |
100 } | |
101 | |
102 /* SLP with unrolling by 8. */ | |
103 for (i = 0; i < N/4; i++) | |
104 { | |
105 out[i*9] = in[i*9]; | |
106 out[i*9 + 1] = in[i*9 + 1]; | |
107 out[i*9 + 2] = in[i*9 + 2]; | |
108 out[i*9 + 3] = in[i*9 + 3]; | |
109 out[i*9 + 4] = in[i*9 + 4]; | |
110 out[i*9 + 5] = in[i*9 + 5]; | |
111 out[i*9 + 6] = in[i*9 + 6]; | |
112 out[i*9 + 7] = in[i*9 + 7]; | |
113 out[i*9 + 8] = in[i*9 + 8]; | |
114 } | |
115 | |
116 /* check results: */ | |
117 for (i = 0; i < N/4; i++) | |
118 { | |
119 if (out[i*9] != in[i*9] | |
120 || out[i*9 + 1] != in[i*9 + 1] | |
121 || out[i*9 + 2] != in[i*9 + 2] | |
122 || out[i*9 + 3] != in[i*9 + 3] | |
123 || out[i*9 + 4] != in[i*9 + 4] | |
124 || out[i*9 + 5] != in[i*9 + 5] | |
125 || out[i*9 + 6] != in[i*9 + 6] | |
126 || out[i*9 + 7] != in[i*9 + 7] | |
127 || out[i*9 + 8] != in[i*9 + 8]) | |
128 abort (); | |
129 } | |
130 | |
131 | |
132 return 0; | |
133 } | |
134 | |
135 int main (void) | |
136 { | |
137 check_vect (); | |
138 | |
139 main1 (); | |
140 | |
141 return 0; | |
142 } | |
143 | |
144 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */ | |
145 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" } } */ | |
146 |