annotate gcc/testsuite/gcc.dg/vect/slp-21.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-require-effective-target vect_int } */
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 #include <stdarg.h>
kono
parents:
diff changeset
4 #include "tree-vect.h"
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 #define N 128
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 int
kono
parents:
diff changeset
9 main1 ()
kono
parents:
diff changeset
10 {
kono
parents:
diff changeset
11 unsigned short i;
kono
parents:
diff changeset
12 unsigned short out[N*8], out2[N*8], b0, b1, b2, b3, b4, a0, a1, a2, a3, b5;
kono
parents:
diff changeset
13 unsigned short in[N*8];
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 for (i = 0; i < N*8; i++)
kono
parents:
diff changeset
16 {
kono
parents:
diff changeset
17 in[i] = i;
kono
parents:
diff changeset
18 }
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 /* Different operations in both cases - vectorization with interleaving. */
kono
parents:
diff changeset
21 for (i = 0; i < N; i++)
kono
parents:
diff changeset
22 {
kono
parents:
diff changeset
23 a0 = in[i*4];
kono
parents:
diff changeset
24 a1 = in[i*4 + 1];
kono
parents:
diff changeset
25 a2 = in[i*4 + 2];
kono
parents:
diff changeset
26 a3 = in[i*4 + 3];
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 b0 = a0 * 8;
kono
parents:
diff changeset
29 b1 = a1 + 7;
kono
parents:
diff changeset
30 b2 = a2 + 6;
kono
parents:
diff changeset
31 b3 = a3 * 5;
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 b4 = a2 + 4;
kono
parents:
diff changeset
34 b5 = a3 + 3;
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 out[i*4] = b0;
kono
parents:
diff changeset
37 out[i*4 + 1] = b1;
kono
parents:
diff changeset
38 out[i*4 + 2] = b2;
kono
parents:
diff changeset
39 out[i*4 + 3] = b3;
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 out2[i*4] = b0;
kono
parents:
diff changeset
42 out2[i*4 + 1] = b1;
kono
parents:
diff changeset
43 out2[i*4 + 2] = b4;
kono
parents:
diff changeset
44 out2[i*4 + 3] = b5;
kono
parents:
diff changeset
45 }
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 /* check results: */
kono
parents:
diff changeset
48 for (i = 0; i < N; i++)
kono
parents:
diff changeset
49 {
kono
parents:
diff changeset
50 a0 = in[i*4];
kono
parents:
diff changeset
51 a1 = in[i*4 + 1];
kono
parents:
diff changeset
52 a2 = in[i*4 + 2];
kono
parents:
diff changeset
53 a3 = in[i*4 + 3];
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 b0 = a0 * 8;
kono
parents:
diff changeset
56 b1 = a1 + 7;
kono
parents:
diff changeset
57 b2 = a2 + 6;
kono
parents:
diff changeset
58 b3 = a3 * 5;
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 b4 = a2 + 4;
kono
parents:
diff changeset
61 b5 = a3 + 3;
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 if (out[i*4] != b0
kono
parents:
diff changeset
64 || out[i*4 + 1] != b1
kono
parents:
diff changeset
65 || out[i*4 + 2] != b2
kono
parents:
diff changeset
66 || out[i*4 + 3] != b3)
kono
parents:
diff changeset
67 abort ();
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 if (out2[i*4] != b0
kono
parents:
diff changeset
70 || out2[i*4 + 1] != b1
kono
parents:
diff changeset
71 || out2[i*4 + 2] != b4
kono
parents:
diff changeset
72 || out2[i*4 + 3] != b5)
kono
parents:
diff changeset
73 abort ();
kono
parents:
diff changeset
74 }
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 /* Different operations in the first case - vectorization with interleaving. */
kono
parents:
diff changeset
77 for (i = 0; i < N; i++)
kono
parents:
diff changeset
78 {
kono
parents:
diff changeset
79 a0 = in[i*4];
kono
parents:
diff changeset
80 a1 = in[i*4 + 1];
kono
parents:
diff changeset
81 a2 = in[i*4 + 2];
kono
parents:
diff changeset
82 a3 = in[i*4 + 3];
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 b0 = a0 + 8;
kono
parents:
diff changeset
85 b1 = a1 + 7;
kono
parents:
diff changeset
86 b2 = a2 + 6;
kono
parents:
diff changeset
87 b3 = a3 * 5;
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 b4 = a2 + 4;
kono
parents:
diff changeset
90 b5 = a3 + 3;
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 out[i*4] = b0;
kono
parents:
diff changeset
93 out[i*4 + 1] = b1;
kono
parents:
diff changeset
94 out[i*4 + 2] = b2;
kono
parents:
diff changeset
95 out[i*4 + 3] = b3;
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 out2[i*4] = b0;
kono
parents:
diff changeset
98 out2[i*4 + 1] = b1;
kono
parents:
diff changeset
99 out2[i*4 + 2] = b4;
kono
parents:
diff changeset
100 out2[i*4 + 3] = b5;
kono
parents:
diff changeset
101 }
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 /* check results: */
kono
parents:
diff changeset
104 for (i = 0; i < N; i++)
kono
parents:
diff changeset
105 {
kono
parents:
diff changeset
106 a0 = in[i*4];
kono
parents:
diff changeset
107 a1 = in[i*4 + 1];
kono
parents:
diff changeset
108 a2 = in[i*4 + 2];
kono
parents:
diff changeset
109 a3 = in[i*4 + 3];
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 b0 = a0 + 8;
kono
parents:
diff changeset
112 b1 = a1 + 7;
kono
parents:
diff changeset
113 b2 = a2 + 6;
kono
parents:
diff changeset
114 b3 = a3 * 5;
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 b4 = a2 + 4;
kono
parents:
diff changeset
117 b5 = a3 + 3;
kono
parents:
diff changeset
118
kono
parents:
diff changeset
119 if (out[i*4] != b0
kono
parents:
diff changeset
120 || out[i*4 + 1] != b1
kono
parents:
diff changeset
121 || out[i*4 + 2] != b2
kono
parents:
diff changeset
122 || out[i*4 + 3] != b3)
kono
parents:
diff changeset
123 abort ();
kono
parents:
diff changeset
124
kono
parents:
diff changeset
125 if (out2[i*4] != b0
kono
parents:
diff changeset
126 || out2[i*4 + 1] != b1
kono
parents:
diff changeset
127 || out2[i*4 + 2] != b4
kono
parents:
diff changeset
128 || out2[i*4 + 3] != b5)
kono
parents:
diff changeset
129 abort ();
kono
parents:
diff changeset
130 }
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 /* Different operations in the second case - vectorization with interleaving. */
kono
parents:
diff changeset
134 for (i = 0; i < N; i++)
kono
parents:
diff changeset
135 {
kono
parents:
diff changeset
136 a0 = in[i*4];
kono
parents:
diff changeset
137 a1 = in[i*4 + 1];
kono
parents:
diff changeset
138 a2 = in[i*4 + 2];
kono
parents:
diff changeset
139 a3 = in[i*4 + 3];
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 b0 = a0 + 8;
kono
parents:
diff changeset
142 b1 = a1 + 7;
kono
parents:
diff changeset
143 b2 = a2 + 6;
kono
parents:
diff changeset
144 b3 = a3 + 5;
kono
parents:
diff changeset
145
kono
parents:
diff changeset
146 b4 = a2 * 4;
kono
parents:
diff changeset
147 b5 = a3 + 3;
kono
parents:
diff changeset
148
kono
parents:
diff changeset
149 out[i*4] = b0;
kono
parents:
diff changeset
150 out[i*4 + 1] = b1;
kono
parents:
diff changeset
151 out[i*4 + 2] = b2;
kono
parents:
diff changeset
152 out[i*4 + 3] = b3;
kono
parents:
diff changeset
153
kono
parents:
diff changeset
154 out2[i*4] = b0;
kono
parents:
diff changeset
155 out2[i*4 + 1] = b1;
kono
parents:
diff changeset
156 out2[i*4 + 2] = b4;
kono
parents:
diff changeset
157 out2[i*4 + 3] = b5;
kono
parents:
diff changeset
158 }
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160 /* check results: */
kono
parents:
diff changeset
161 for (i = 0; i < N; i++)
kono
parents:
diff changeset
162 {
kono
parents:
diff changeset
163 a0 = in[i*4];
kono
parents:
diff changeset
164 a1 = in[i*4 + 1];
kono
parents:
diff changeset
165 a2 = in[i*4 + 2];
kono
parents:
diff changeset
166 a3 = in[i*4 + 3];
kono
parents:
diff changeset
167
kono
parents:
diff changeset
168 b0 = a0 + 8;
kono
parents:
diff changeset
169 b1 = a1 + 7;
kono
parents:
diff changeset
170 b2 = a2 + 6;
kono
parents:
diff changeset
171 b3 = a3 + 5;
kono
parents:
diff changeset
172
kono
parents:
diff changeset
173 b4 = a2 * 4;
kono
parents:
diff changeset
174 b5 = a3 + 3;
kono
parents:
diff changeset
175
kono
parents:
diff changeset
176 if (out[i*4] != b0
kono
parents:
diff changeset
177 || out[i*4 + 1] != b1
kono
parents:
diff changeset
178 || out[i*4 + 2] != b2
kono
parents:
diff changeset
179 || out[i*4 + 3] != b3)
kono
parents:
diff changeset
180 abort ();
kono
parents:
diff changeset
181
kono
parents:
diff changeset
182 if (out2[i*4] != b0
kono
parents:
diff changeset
183 || out2[i*4 + 1] != b1
kono
parents:
diff changeset
184 || out2[i*4 + 2] != b4
kono
parents:
diff changeset
185 || out2[i*4 + 3] != b5)
kono
parents:
diff changeset
186 abort ();
kono
parents:
diff changeset
187 }
kono
parents:
diff changeset
188
kono
parents:
diff changeset
189
kono
parents:
diff changeset
190 return 0;
kono
parents:
diff changeset
191 }
kono
parents:
diff changeset
192
kono
parents:
diff changeset
193 int main (void)
kono
parents:
diff changeset
194 {
kono
parents:
diff changeset
195 check_vect ();
kono
parents:
diff changeset
196
kono
parents:
diff changeset
197 main1 ();
kono
parents:
diff changeset
198
kono
parents:
diff changeset
199 return 0;
kono
parents:
diff changeset
200 }
kono
parents:
diff changeset
201
kono
parents:
diff changeset
202 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target { vect_strided4 || vect_extract_even_odd } } } } */
kono
parents:
diff changeset
203 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided4 || vect_extract_even_odd } } } } } */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
204 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_strided4 } } } */
111
kono
parents:
diff changeset
205 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided4 } } } } } */
kono
parents:
diff changeset
206