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 } } */