1 /* PR target/85918 */
2 /* { dg-do run } */
3 /* { dg-require-effective-target avx512dq } */
4 /* { dg-require-effective-target avx512vl } */
5 /* { dg-options "-O3 -mavx512dq -mavx512vl -mprefer-vector-width=512 -fno-vect-cost-model" } */
6 
7 #define AVX512DQ
8 #define AVX512VL
9 #define DO_TEST avx512dqvl_test
10 
11 static void avx512dqvl_test (void);
12 
13 #include "avx512-check.h"
14 
15 #define N 16
16 
17 long long ll[N] __attribute__((aligned (64)));
18 unsigned long long ull[N] __attribute__((aligned (64)));
19 float f[N] __attribute__((aligned (64)));
20 double d[N] __attribute__((aligned (64)));
21 
22 __attribute__((noipa)) void
ll2d1(void)23 ll2d1 (void)
24 {
25   int i;
26 
27   for (i = 0; i < 4; i++)
28     d[i] = ll[i];
29 }
30 
31 __attribute__((noipa)) void
ull2d1(void)32 ull2d1 (void)
33 {
34   int i;
35 
36   for (i = 0; i < 4; i++)
37     d[i] = ull[i];
38 }
39 
40 __attribute__((noipa)) void
d2ll1(void)41 d2ll1 (void)
42 {
43   int i;
44 
45   for (i = 0; i < 4; i++)
46     ll[i] = d[i];
47 }
48 
49 __attribute__((noipa)) void
d2ull1(void)50 d2ull1 (void)
51 {
52   int i;
53 
54   for (i = 0; i < 4; i++)
55     ull[i] = d[i];
56 }
57 
58 __attribute__((noipa)) void
ll2f1(void)59 ll2f1 (void)
60 {
61   int i;
62 
63   for (i = 0; i < 4; i++)
64     f[i] = ll[i];
65 }
66 
67 __attribute__((noipa)) void
ull2f1(void)68 ull2f1 (void)
69 {
70   int i;
71 
72   for (i = 0; i < 4; i++)
73     f[i] = ull[i];
74 }
75 
76 __attribute__((noipa)) void
f2ll1(void)77 f2ll1 (void)
78 {
79   int i;
80 
81   for (i = 0; i < 4; i++)
82     ll[i] = f[i];
83 }
84 
85 __attribute__((noipa)) void
f2ull1(void)86 f2ull1 (void)
87 {
88   int i;
89 
90   for (i = 0; i < 4; i++)
91     ull[i] = f[i];
92 }
93 
94 __attribute__((noipa)) void
ll2d2(void)95 ll2d2 (void)
96 {
97   int i;
98 
99   for (i = 0; i < 8; i++)
100     d[i] = ll[i];
101 }
102 
103 __attribute__((noipa)) void
ull2d2(void)104 ull2d2 (void)
105 {
106   int i;
107 
108   for (i = 0; i < 8; i++)
109     d[i] = ull[i];
110 }
111 
112 __attribute__((noipa)) void
d2ll2(void)113 d2ll2 (void)
114 {
115   int i;
116 
117   for (i = 0; i < 8; i++)
118     ll[i] = d[i];
119 }
120 
121 __attribute__((noipa)) void
d2ull2(void)122 d2ull2 (void)
123 {
124   int i;
125 
126   for (i = 0; i < 8; i++)
127     ull[i] = d[i];
128 }
129 
130 __attribute__((noipa)) void
ll2f2(void)131 ll2f2 (void)
132 {
133   int i;
134 
135   for (i = 0; i < 8; i++)
136     f[i] = ll[i];
137 }
138 
139 __attribute__((noipa)) void
ull2f2(void)140 ull2f2 (void)
141 {
142   int i;
143 
144   for (i = 0; i < 8; i++)
145     f[i] = ull[i];
146 }
147 
148 __attribute__((noipa)) void
f2ll2(void)149 f2ll2 (void)
150 {
151   int i;
152 
153   for (i = 0; i < 8; i++)
154     ll[i] = f[i];
155 }
156 
157 __attribute__((noipa)) void
f2ull2(void)158 f2ull2 (void)
159 {
160   int i;
161 
162   for (i = 0; i < 8; i++)
163     ull[i] = f[i];
164 }
165 
166 __attribute__((noipa)) void
ll2d3(void)167 ll2d3 (void)
168 {
169   int i;
170 
171   for (i = 0; i < 16; i++)
172     d[i] = ll[i];
173 }
174 
175 __attribute__((noipa)) void
ull2d3(void)176 ull2d3 (void)
177 {
178   int i;
179 
180   for (i = 0; i < 16; i++)
181     d[i] = ull[i];
182 }
183 
184 __attribute__((noipa)) void
d2ll3(void)185 d2ll3 (void)
186 {
187   int i;
188 
189   for (i = 0; i < 16; i++)
190     ll[i] = d[i];
191 }
192 
193 __attribute__((noipa)) void
d2ull3(void)194 d2ull3 (void)
195 {
196   int i;
197 
198   for (i = 0; i < 16; i++)
199     ull[i] = d[i];
200 }
201 
202 __attribute__((noipa)) void
ll2f3(void)203 ll2f3 (void)
204 {
205   int i;
206 
207   for (i = 0; i < 16; i++)
208     f[i] = ll[i];
209 }
210 
211 __attribute__((noipa)) void
ull2f3(void)212 ull2f3 (void)
213 {
214   int i;
215 
216   for (i = 0; i < 16; i++)
217     f[i] = ull[i];
218 }
219 
220 __attribute__((noipa)) void
f2ll3(void)221 f2ll3 (void)
222 {
223   int i;
224 
225   for (i = 0; i < 16; i++)
226     ll[i] = f[i];
227 }
228 
229 __attribute__((noipa)) void
f2ull3(void)230 f2ull3 (void)
231 {
232   int i;
233 
234   for (i = 0; i < 16; i++)
235     ull[i] = f[i];
236 }
237 
238 unsigned long long ullt[] = {
239   13835058055282163712ULL, 9223653511831486464ULL, 9218868437227405312ULL,
240   1ULL, 9305281255077576704ULL, 1191936ULL, 18446462598732840960ULL, 0ULL,
241   9223372036854775808ULL, 4611686018427387904ULL, 2305843009213693952ULL,
242   9ULL, 9223653511831486464ULL, 0ULL, 65536ULL, 131071ULL
243 };
244 float uft[] = {
245   13835058055282163712.0f, 9223653511831486464.0f, 9218868437227405312.0f,
246   1.0f, 9305281255077576704.0f, 1191936.0f, 18446462598732840960.0f, 0.0f,
247   9223372036854775808.0f, 4611686018427387904.0f, 2305843009213693952.0f,
248   9.0f, 9223653511831486464.0f, 0.0f, 65536.0f, 131071.0f
249 };
250 long long llt[] = {
251   9223090561878065152LL, -9223372036854775807LL - 1, -9223090561878065152LL,
252   -4LL, -8074672656898588672LL, 8074672656898588672LL, 29LL, -15LL,
253   7574773098260463616LL, -7579276697887834112LL, -8615667562136469504LL,
254   148LL, -255LL, 9151595917793558528LL, -9218868437227405312LL, 9LL
255 };
256 float ft[] = {
257   9223090561878065152.0f, -9223372036854775808.0f, -9223090561878065152.0f,
258   -4.0f, -8074672656898588672.0f, 8074672656898588672.0f, 29.0f, -15.0f,
259   7574773098260463616.0f, -7579276697887834112.0f, -8615667562136469504.0f,
260   148.0f, -255.0f, 9151595917793558528.0f, -9218868437227405312.0f, 9.0f
261 };
262 
263 static void
avx512dqvl_test(void)264 avx512dqvl_test (void)
265 {
266   int i;
267   for (i = 0; i < 4; i++)
268     {
269       ll[i] = llt[i];
270       ull[i] = ullt[i];
271     }
272   ll2d1 ();
273   for (i = 0; i < 4; i++)
274     if (d[i] != ft[i])
275       abort ();
276   ull2d1 ();
277   for (i = 0; i < 4; i++)
278     if (d[i] != uft[i])
279       abort ();
280     else
281       d[i] = ft[i + 4];
282   d2ll1 ();
283   for (i = 0; i < 4; i++)
284     if (ll[i] != llt[i + 4])
285       abort ();
286     else
287       d[i] = uft[i + 4];
288   d2ull1 ();
289   for (i = 0; i < 4; i++)
290     if (ull[i] != ullt[i + 4])
291       abort ();
292     else
293       {
294         ll[i] = llt[i + 8];
295 	ull[i] = ullt[i + 8];
296       }
297   ll2f1 ();
298   for (i = 0; i < 4; i++)
299     if (f[i] != ft[i + 8])
300       abort ();
301   ull2f1 ();
302   for (i = 0; i < 4; i++)
303     if (f[i] != uft[i + 8])
304       abort ();
305     else
306       f[i] = ft[i + 12];
307   f2ll1 ();
308   for (i = 0; i < 4; i++)
309     if (ll[i] != llt[i + 12])
310       abort ();
311     else
312       f[i] = uft[i + 12];
313   f2ull1 ();
314   for (i = 0; i < 4; i++)
315     if (ull[i] != ullt[i + 12])
316       abort ();
317   for (i = 0; i < 8; i++)
318     {
319       ll[i] = llt[i];
320       ull[i] = ullt[i];
321     }
322   ll2d2 ();
323   for (i = 0; i < 8; i++)
324     if (d[i] != ft[i])
325       abort ();
326   ull2d2 ();
327   for (i = 0; i < 8; i++)
328     if (d[i] != uft[i])
329       abort ();
330     else
331       {
332         d[i] = ft[i];
333         ll[i] = 1234567LL;
334         ull[i] = 7654321ULL;
335       }
336   d2ll2 ();
337   for (i = 0; i < 8; i++)
338     if (ll[i] != llt[i])
339       abort ();
340     else
341       d[i] = uft[i];
342   d2ull2 ();
343   for (i = 0; i < 8; i++)
344     if (ull[i] != ullt[i])
345       abort ();
346     else
347       {
348         ll[i] = llt[i + 8];
349 	ull[i] = ullt[i + 8];
350       }
351   ll2f2 ();
352   for (i = 0; i < 8; i++)
353     if (f[i] != ft[i + 8])
354       abort ();
355   ull2f2 ();
356   for (i = 0; i < 8; i++)
357     if (f[i] != uft[i + 8])
358       abort ();
359     else
360       {
361 	f[i] = ft[i + 8];
362 	ll[i] = 1234567LL;
363 	ull[i] = 7654321ULL;
364       }
365   f2ll2 ();
366   for (i = 0; i < 8; i++)
367     if (ll[i] != llt[i + 8])
368       abort ();
369     else
370       f[i] = uft[i + 8];
371   f2ull2 ();
372   for (i = 0; i < 8; i++)
373     if (ull[i] != ullt[i + 8])
374       abort ();
375   for (i = 0; i < 16; i++)
376     {
377       ll[i] = llt[i];
378       ull[i] = ullt[i];
379     }
380   ll2d3 ();
381   for (i = 0; i < 16; i++)
382     if (d[i] != ft[i])
383       abort ();
384   ull2d3 ();
385   for (i = 0; i < 16; i++)
386     if (d[i] != uft[i])
387       abort ();
388     else
389       {
390         d[i] = ft[i];
391         ll[i] = 1234567LL;
392         ull[i] = 7654321ULL;
393       }
394   d2ll3 ();
395   for (i = 0; i < 16; i++)
396     if (ll[i] != llt[i])
397       abort ();
398     else
399       d[i] = uft[i];
400   d2ull3 ();
401   for (i = 0; i < 16; i++)
402     if (ull[i] != ullt[i])
403       abort ();
404     else
405       {
406         ll[i] = llt[i];
407 	ull[i] = ullt[i];
408 	f[i] = 3.0f;
409 	d[i] = 4.0;
410       }
411   ll2f3 ();
412   for (i = 0; i < 16; i++)
413     if (f[i] != ft[i])
414       abort ();
415   ull2f3 ();
416   for (i = 0; i < 16; i++)
417     if (f[i] != uft[i])
418       abort ();
419     else
420       {
421 	f[i] = ft[i];
422 	ll[i] = 1234567LL;
423 	ull[i] = 7654321ULL;
424       }
425   f2ll3 ();
426   for (i = 0; i < 16; i++)
427     if (ll[i] != llt[i])
428       abort ();
429     else
430       f[i] = uft[i];
431   f2ull3 ();
432   for (i = 0; i < 16; i++)
433     if (ull[i] != ullt[i])
434       abort ();
435 }
436