Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.target/i386/pr92658-avx512bw.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
145:1830386684a0 | 152:2b5abeee2509 |
---|---|
1 /* PR target/92658 */ | |
2 /* { dg-do compile } */ | |
3 /* { dg-options "-O2 -ftree-vectorize -mavx512bw" } */ | |
4 | |
5 typedef unsigned char v64qi __attribute__((vector_size (64))); | |
6 typedef unsigned short v32hi __attribute__((vector_size (64))); | |
7 typedef unsigned int v16si __attribute__((vector_size (64))); | |
8 typedef unsigned long long v8di __attribute__((vector_size (64))); | |
9 | |
10 void | |
11 foo_u8_u16 (v32hi * dst, v64qi * __restrict src) | |
12 { | |
13 unsigned short tem[32]; | |
14 tem[0] = (*src)[0]; | |
15 tem[1] = (*src)[1]; | |
16 tem[2] = (*src)[2]; | |
17 tem[3] = (*src)[3]; | |
18 tem[4] = (*src)[4]; | |
19 tem[5] = (*src)[5]; | |
20 tem[6] = (*src)[6]; | |
21 tem[7] = (*src)[7]; | |
22 tem[8] = (*src)[8]; | |
23 tem[9] = (*src)[9]; | |
24 tem[10] = (*src)[10]; | |
25 tem[11] = (*src)[11]; | |
26 tem[12] = (*src)[12]; | |
27 tem[13] = (*src)[13]; | |
28 tem[14] = (*src)[14]; | |
29 tem[15] = (*src)[15]; | |
30 tem[16] = (*src)[16]; | |
31 tem[17] = (*src)[17]; | |
32 tem[18] = (*src)[18]; | |
33 tem[19] = (*src)[19]; | |
34 tem[20] = (*src)[20]; | |
35 tem[21] = (*src)[21]; | |
36 tem[22] = (*src)[22]; | |
37 tem[23] = (*src)[23]; | |
38 tem[24] = (*src)[24]; | |
39 tem[25] = (*src)[25]; | |
40 tem[26] = (*src)[26]; | |
41 tem[27] = (*src)[27]; | |
42 tem[28] = (*src)[28]; | |
43 tem[29] = (*src)[29]; | |
44 tem[30] = (*src)[30]; | |
45 tem[31] = (*src)[31]; | |
46 dst[0] = *(v32hi *) tem; | |
47 } | |
48 | |
49 void | |
50 bar_u8_u16 (v32hi * dst, v64qi src) | |
51 { | |
52 unsigned short tem[32]; | |
53 tem[0] = src[0]; | |
54 tem[1] = src[1]; | |
55 tem[2] = src[2]; | |
56 tem[3] = src[3]; | |
57 tem[4] = src[4]; | |
58 tem[5] = src[5]; | |
59 tem[6] = src[6]; | |
60 tem[7] = src[7]; | |
61 tem[8] = src[8]; | |
62 tem[9] = src[9]; | |
63 tem[10] = src[10]; | |
64 tem[11] = src[11]; | |
65 tem[12] = src[12]; | |
66 tem[13] = src[13]; | |
67 tem[14] = src[14]; | |
68 tem[15] = src[15]; | |
69 tem[16] = src[16]; | |
70 tem[17] = src[17]; | |
71 tem[18] = src[18]; | |
72 tem[19] = src[19]; | |
73 tem[20] = src[20]; | |
74 tem[21] = src[21]; | |
75 tem[22] = src[22]; | |
76 tem[23] = src[23]; | |
77 tem[24] = src[24]; | |
78 tem[25] = src[25]; | |
79 tem[26] = src[26]; | |
80 tem[27] = src[27]; | |
81 tem[28] = src[28]; | |
82 tem[29] = src[29]; | |
83 tem[30] = src[30]; | |
84 tem[31] = src[31]; | |
85 dst[0] = *(v32hi *) tem; | |
86 } | |
87 | |
88 /* { dg-final { scan-assembler-times "pmovzxbw" 2 } } */ | |
89 | |
90 void | |
91 foo_u8_u32 (v16si * dst, v64qi * __restrict src) | |
92 { | |
93 unsigned int tem[16]; | |
94 tem[0] = (*src)[0]; | |
95 tem[1] = (*src)[1]; | |
96 tem[2] = (*src)[2]; | |
97 tem[3] = (*src)[3]; | |
98 tem[4] = (*src)[4]; | |
99 tem[5] = (*src)[5]; | |
100 tem[6] = (*src)[6]; | |
101 tem[7] = (*src)[7]; | |
102 tem[8] = (*src)[8]; | |
103 tem[9] = (*src)[9]; | |
104 tem[10] = (*src)[10]; | |
105 tem[11] = (*src)[11]; | |
106 tem[12] = (*src)[12]; | |
107 tem[13] = (*src)[13]; | |
108 tem[14] = (*src)[14]; | |
109 tem[15] = (*src)[15]; | |
110 dst[0] = *(v16si *) tem; | |
111 } | |
112 | |
113 void | |
114 bar_u8_u32 (v16si * dst, v64qi src) | |
115 { | |
116 unsigned int tem[16]; | |
117 tem[0] = src[0]; | |
118 tem[1] = src[1]; | |
119 tem[2] = src[2]; | |
120 tem[3] = src[3]; | |
121 tem[4] = src[4]; | |
122 tem[5] = src[5]; | |
123 tem[6] = src[6]; | |
124 tem[7] = src[7]; | |
125 tem[8] = src[8]; | |
126 tem[9] = src[9]; | |
127 tem[10] = src[10]; | |
128 tem[11] = src[11]; | |
129 tem[12] = src[12]; | |
130 tem[13] = src[13]; | |
131 tem[14] = src[14]; | |
132 tem[15] = src[15]; | |
133 dst[0] = *(v16si *) tem; | |
134 } | |
135 | |
136 /* { dg-final { scan-assembler-times "pmovzxbd" 2 } } */ | |
137 | |
138 void | |
139 foo_u8_u64 (v8di * dst, v64qi * __restrict src) | |
140 { | |
141 unsigned long long tem[8]; | |
142 tem[0] = (*src)[0]; | |
143 tem[1] = (*src)[1]; | |
144 tem[2] = (*src)[2]; | |
145 tem[3] = (*src)[3]; | |
146 tem[4] = (*src)[4]; | |
147 tem[5] = (*src)[5]; | |
148 tem[6] = (*src)[6]; | |
149 tem[7] = (*src)[7]; | |
150 dst[0] = *(v8di *) tem; | |
151 } | |
152 | |
153 void | |
154 bar_u8_u64 (v8di * dst, v64qi src) | |
155 { | |
156 unsigned long long tem[8]; | |
157 tem[0] = src[0]; | |
158 tem[1] = src[1]; | |
159 tem[2] = src[2]; | |
160 tem[3] = src[3]; | |
161 tem[4] = src[4]; | |
162 tem[5] = src[5]; | |
163 tem[6] = src[6]; | |
164 tem[7] = src[7]; | |
165 dst[0] = *(v8di *) tem; | |
166 } | |
167 | |
168 /* { dg-final { scan-assembler-times "pmovzxbq" 2 } } */ | |
169 | |
170 void | |
171 foo_u16_u32 (v16si * dst, v32hi * __restrict src) | |
172 { | |
173 unsigned int tem[16]; | |
174 tem[0] = (*src)[0]; | |
175 tem[1] = (*src)[1]; | |
176 tem[2] = (*src)[2]; | |
177 tem[3] = (*src)[3]; | |
178 tem[4] = (*src)[4]; | |
179 tem[5] = (*src)[5]; | |
180 tem[6] = (*src)[6]; | |
181 tem[7] = (*src)[7]; | |
182 tem[8] = (*src)[8]; | |
183 tem[9] = (*src)[9]; | |
184 tem[10] = (*src)[10]; | |
185 tem[11] = (*src)[11]; | |
186 tem[12] = (*src)[12]; | |
187 tem[13] = (*src)[13]; | |
188 tem[14] = (*src)[14]; | |
189 tem[15] = (*src)[15]; | |
190 dst[0] = *(v16si *) tem; | |
191 } | |
192 | |
193 void | |
194 bar_u16_u32 (v16si * dst, v32hi src) | |
195 { | |
196 unsigned int tem[16]; | |
197 tem[0] = src[0]; | |
198 tem[1] = src[1]; | |
199 tem[2] = src[2]; | |
200 tem[3] = src[3]; | |
201 tem[4] = src[4]; | |
202 tem[5] = src[5]; | |
203 tem[6] = src[6]; | |
204 tem[7] = src[7]; | |
205 tem[8] = src[8]; | |
206 tem[9] = src[9]; | |
207 tem[10] = src[10]; | |
208 tem[11] = src[11]; | |
209 tem[12] = src[12]; | |
210 tem[13] = src[13]; | |
211 tem[14] = src[14]; | |
212 tem[15] = src[15]; | |
213 dst[0] = *(v16si *) tem; | |
214 } | |
215 | |
216 /* { dg-final { scan-assembler-times "pmovzxwd" 2 } } */ | |
217 | |
218 void | |
219 foo_u16_u64 (v8di * dst, v32hi * __restrict src) | |
220 { | |
221 unsigned long long tem[8]; | |
222 tem[0] = (*src)[0]; | |
223 tem[1] = (*src)[1]; | |
224 tem[2] = (*src)[2]; | |
225 tem[3] = (*src)[3]; | |
226 tem[4] = (*src)[4]; | |
227 tem[5] = (*src)[5]; | |
228 tem[6] = (*src)[6]; | |
229 tem[7] = (*src)[7]; | |
230 dst[0] = *(v8di *) tem; | |
231 } | |
232 | |
233 void | |
234 bar_u16_u64 (v8di * dst, v32hi src) | |
235 { | |
236 unsigned long long tem[8]; | |
237 tem[0] = src[0]; | |
238 tem[1] = src[1]; | |
239 tem[2] = src[2]; | |
240 tem[3] = src[3]; | |
241 tem[4] = src[4]; | |
242 tem[5] = src[5]; | |
243 tem[6] = src[6]; | |
244 tem[7] = src[7]; | |
245 dst[0] = *(v8di *) tem; | |
246 } | |
247 | |
248 /* { dg-final { scan-assembler-times "pmovzxwq" 2 } } */ | |
249 | |
250 void | |
251 foo_u32_u64 (v8di * dst, v16si * __restrict src) | |
252 { | |
253 unsigned long long tem[8]; | |
254 tem[0] = (*src)[0]; | |
255 tem[1] = (*src)[1]; | |
256 tem[2] = (*src)[2]; | |
257 tem[3] = (*src)[3]; | |
258 tem[4] = (*src)[4]; | |
259 tem[5] = (*src)[5]; | |
260 tem[6] = (*src)[6]; | |
261 tem[7] = (*src)[7]; | |
262 dst[0] = *(v8di *) tem; | |
263 } | |
264 | |
265 void | |
266 bar_u32_u64 (v8di * dst, v16si src) | |
267 { | |
268 unsigned long long tem[8]; | |
269 tem[0] = src[0]; | |
270 tem[1] = src[1]; | |
271 tem[2] = src[2]; | |
272 tem[3] = src[3]; | |
273 tem[4] = src[4]; | |
274 tem[5] = src[5]; | |
275 tem[6] = src[6]; | |
276 tem[7] = src[7]; | |
277 dst[0] = *(v8di *) tem; | |
278 } | |
279 | |
280 /* { dg-final { scan-assembler-times "pmovzxdq" 2 } } */ |