1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512BW
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512VL
10 define <4 x float> @test_v4f32(<4 x float>* %src) {
11 ; SSE2-LABEL: test_v4f32:
13 ; SSE2-NEXT: movaps (%rdi), %xmm0
16 ; SSE41-LABEL: test_v4f32:
18 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
21 ; AVX-LABEL: test_v4f32:
23 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
26 ; AVX512-LABEL: test_v4f32:
28 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
30 %1 = load <4 x float>, <4 x float>* %src, align 16, !nontemporal !1
34 define <4 x i32> @test_v4i32(<4 x i32>* %src) {
35 ; SSE2-LABEL: test_v4i32:
37 ; SSE2-NEXT: movaps (%rdi), %xmm0
40 ; SSE41-LABEL: test_v4i32:
42 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
45 ; AVX-LABEL: test_v4i32:
47 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
50 ; AVX512-LABEL: test_v4i32:
52 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
54 %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1
58 define <2 x double> @test_v2f64(<2 x double>* %src) {
59 ; SSE2-LABEL: test_v2f64:
61 ; SSE2-NEXT: movaps (%rdi), %xmm0
64 ; SSE41-LABEL: test_v2f64:
66 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
69 ; AVX-LABEL: test_v2f64:
71 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
74 ; AVX512-LABEL: test_v2f64:
76 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
78 %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1
82 define <2 x i64> @test_v2i64(<2 x i64>* %src) {
83 ; SSE2-LABEL: test_v2i64:
85 ; SSE2-NEXT: movaps (%rdi), %xmm0
88 ; SSE41-LABEL: test_v2i64:
90 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
93 ; AVX-LABEL: test_v2i64:
95 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
98 ; AVX512-LABEL: test_v2i64:
100 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
102 %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1
106 define <8 x i16> @test_v8i16(<8 x i16>* %src) {
107 ; SSE2-LABEL: test_v8i16:
109 ; SSE2-NEXT: movaps (%rdi), %xmm0
112 ; SSE41-LABEL: test_v8i16:
114 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
117 ; AVX-LABEL: test_v8i16:
119 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
122 ; AVX512-LABEL: test_v8i16:
124 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
126 %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1
130 define <16 x i8> @test_v16i8(<16 x i8>* %src) {
131 ; SSE2-LABEL: test_v16i8:
133 ; SSE2-NEXT: movaps (%rdi), %xmm0
136 ; SSE41-LABEL: test_v16i8:
138 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
141 ; AVX-LABEL: test_v16i8:
143 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
146 ; AVX512-LABEL: test_v16i8:
148 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
150 %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1
154 ; And now YMM versions.
156 define <8 x float> @test_v8f32(<8 x float>* %src) {
157 ; SSE2-LABEL: test_v8f32:
159 ; SSE2-NEXT: movaps (%rdi), %xmm0
160 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
163 ; SSE41-LABEL: test_v8f32:
165 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
166 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
169 ; AVX1-LABEL: test_v8f32:
171 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
172 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
173 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
176 ; AVX2-LABEL: test_v8f32:
178 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
181 ; AVX512-LABEL: test_v8f32:
183 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
185 %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1
189 define <8 x i32> @test_v8i32(<8 x i32>* %src) {
190 ; SSE2-LABEL: test_v8i32:
192 ; SSE2-NEXT: movaps (%rdi), %xmm0
193 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
196 ; SSE41-LABEL: test_v8i32:
198 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
199 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
202 ; AVX1-LABEL: test_v8i32:
204 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
205 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
206 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
209 ; AVX2-LABEL: test_v8i32:
211 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
214 ; AVX512F-LABEL: test_v8i32:
216 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0
219 ; AVX512BW-LABEL: test_v8i32:
221 ; AVX512BW-NEXT: vmovntdqa (%rdi), %ymm0
222 ; AVX512BW-NEXT: retq
224 ; AVX512VL-LABEL: test_v8i32:
226 ; AVX512VL-NEXT: vmovaps (%rdi), %ymm0
227 ; AVX512VL-NEXT: retq
228 %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1
232 define <4 x double> @test_v4f64(<4 x double>* %src) {
233 ; SSE2-LABEL: test_v4f64:
235 ; SSE2-NEXT: movaps (%rdi), %xmm0
236 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
239 ; SSE41-LABEL: test_v4f64:
241 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
242 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
245 ; AVX1-LABEL: test_v4f64:
247 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
248 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
249 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
252 ; AVX2-LABEL: test_v4f64:
254 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
257 ; AVX512-LABEL: test_v4f64:
259 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
261 %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1
265 define <4 x i64> @test_v4i64(<4 x i64>* %src) {
266 ; SSE2-LABEL: test_v4i64:
268 ; SSE2-NEXT: movaps (%rdi), %xmm0
269 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
272 ; SSE41-LABEL: test_v4i64:
274 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
275 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
278 ; AVX1-LABEL: test_v4i64:
280 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
281 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
282 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
285 ; AVX2-LABEL: test_v4i64:
287 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
290 ; AVX512-LABEL: test_v4i64:
292 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
294 %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1
298 define <16 x i16> @test_v16i16(<16 x i16>* %src) {
299 ; SSE2-LABEL: test_v16i16:
301 ; SSE2-NEXT: movaps (%rdi), %xmm0
302 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
305 ; SSE41-LABEL: test_v16i16:
307 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
308 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
311 ; AVX1-LABEL: test_v16i16:
313 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
314 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
315 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
318 ; AVX2-LABEL: test_v16i16:
320 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
323 ; AVX512-LABEL: test_v16i16:
325 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
327 %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1
331 define <32 x i8> @test_v32i8(<32 x i8>* %src) {
332 ; SSE2-LABEL: test_v32i8:
334 ; SSE2-NEXT: movaps (%rdi), %xmm0
335 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
338 ; SSE41-LABEL: test_v32i8:
340 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
341 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
344 ; AVX1-LABEL: test_v32i8:
346 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
347 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
348 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
351 ; AVX2-LABEL: test_v32i8:
353 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
356 ; AVX512-LABEL: test_v32i8:
358 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
360 %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1
364 ; And now ZMM versions.
366 define <16 x float> @test_v16f32(<16 x float>* %src) {
367 ; SSE2-LABEL: test_v16f32:
369 ; SSE2-NEXT: movaps (%rdi), %xmm0
370 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
371 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
372 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
375 ; SSE41-LABEL: test_v16f32:
377 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
378 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
379 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
380 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
383 ; AVX1-LABEL: test_v16f32:
385 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
386 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
387 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
388 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
389 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
390 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
393 ; AVX2-LABEL: test_v16f32:
395 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
396 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
399 ; AVX512-LABEL: test_v16f32:
401 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
403 %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1
407 define <16 x i32> @test_v16i32(<16 x i32>* %src) {
408 ; SSE2-LABEL: test_v16i32:
410 ; SSE2-NEXT: movaps (%rdi), %xmm0
411 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
412 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
413 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
416 ; SSE41-LABEL: test_v16i32:
418 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
419 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
420 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
421 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
424 ; AVX1-LABEL: test_v16i32:
426 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
427 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
428 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
429 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
430 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
431 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
434 ; AVX2-LABEL: test_v16i32:
436 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
437 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
440 ; AVX512-LABEL: test_v16i32:
442 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
444 %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1
448 define <8 x double> @test_v8f64(<8 x double>* %src) {
449 ; SSE2-LABEL: test_v8f64:
451 ; SSE2-NEXT: movaps (%rdi), %xmm0
452 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
453 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
454 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
457 ; SSE41-LABEL: test_v8f64:
459 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
460 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
461 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
462 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
465 ; AVX1-LABEL: test_v8f64:
467 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
468 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
469 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
470 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
471 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
472 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
475 ; AVX2-LABEL: test_v8f64:
477 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
478 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
481 ; AVX512-LABEL: test_v8f64:
483 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
485 %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1
489 define <8 x i64> @test_v8i64(<8 x i64>* %src) {
490 ; SSE2-LABEL: test_v8i64:
492 ; SSE2-NEXT: movaps (%rdi), %xmm0
493 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
494 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
495 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
498 ; SSE41-LABEL: test_v8i64:
500 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
501 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
502 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
503 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
506 ; AVX1-LABEL: test_v8i64:
508 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
509 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
510 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
511 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
512 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
513 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
516 ; AVX2-LABEL: test_v8i64:
518 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
519 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
522 ; AVX512-LABEL: test_v8i64:
524 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
526 %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1
530 define <32 x i16> @test_v32i16(<32 x i16>* %src) {
531 ; SSE2-LABEL: test_v32i16:
533 ; SSE2-NEXT: movaps (%rdi), %xmm0
534 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
535 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
536 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
539 ; SSE41-LABEL: test_v32i16:
541 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
542 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
543 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
544 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
547 ; AVX1-LABEL: test_v32i16:
549 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
550 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
551 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
552 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
553 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
554 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
557 ; AVX2-LABEL: test_v32i16:
559 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
560 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
563 ; AVX512F-LABEL: test_v32i16:
565 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0
566 ; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm1
569 ; AVX512BW-LABEL: test_v32i16:
571 ; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm0
572 ; AVX512BW-NEXT: retq
574 ; AVX512VL-LABEL: test_v32i16:
576 ; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm0
577 ; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm1
578 ; AVX512VL-NEXT: retq
579 %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1
583 define <64 x i8> @test_v64i8(<64 x i8>* %src) {
584 ; SSE2-LABEL: test_v64i8:
586 ; SSE2-NEXT: movaps (%rdi), %xmm0
587 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
588 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
589 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
592 ; SSE41-LABEL: test_v64i8:
594 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
595 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
596 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
597 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
600 ; AVX1-LABEL: test_v64i8:
602 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
603 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
604 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
605 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
606 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
607 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
610 ; AVX2-LABEL: test_v64i8:
612 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
613 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
616 ; AVX512F-LABEL: test_v64i8:
618 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0
619 ; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm1
622 ; AVX512BW-LABEL: test_v64i8:
624 ; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm0
625 ; AVX512BW-NEXT: retq
627 ; AVX512VL-LABEL: test_v64i8:
629 ; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm0
630 ; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm1
631 ; AVX512VL-NEXT: retq
632 %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1
637 ; Check cases where the load would be folded.
639 define <4 x float> @test_arg_v4f32(<4 x float> %arg, <4 x float>* %src) {
640 ; SSE2-LABEL: test_arg_v4f32:
642 ; SSE2-NEXT: addps (%rdi), %xmm0
645 ; SSE41-LABEL: test_arg_v4f32:
647 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
648 ; SSE41-NEXT: addps %xmm1, %xmm0
651 ; AVX-LABEL: test_arg_v4f32:
653 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
654 ; AVX-NEXT: vaddps %xmm1, %xmm0, %xmm0
657 ; AVX512-LABEL: test_arg_v4f32:
659 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
660 ; AVX512-NEXT: vaddps %xmm1, %xmm0, %xmm0
662 %1 = load <4 x float>, <4 x float>* %src, align 16, !nontemporal !1
663 %2 = fadd <4 x float> %arg, %1
667 define <4 x i32> @test_arg_v4i32(<4 x i32> %arg, <4 x i32>* %src) {
668 ; SSE2-LABEL: test_arg_v4i32:
670 ; SSE2-NEXT: paddd (%rdi), %xmm0
673 ; SSE41-LABEL: test_arg_v4i32:
675 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
676 ; SSE41-NEXT: paddd %xmm1, %xmm0
679 ; AVX-LABEL: test_arg_v4i32:
681 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
682 ; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
685 ; AVX512-LABEL: test_arg_v4i32:
687 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
688 ; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0
690 %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1
691 %2 = add <4 x i32> %arg, %1
695 define <2 x double> @test_arg_v2f64(<2 x double> %arg, <2 x double>* %src) {
696 ; SSE2-LABEL: test_arg_v2f64:
698 ; SSE2-NEXT: addpd (%rdi), %xmm0
701 ; SSE41-LABEL: test_arg_v2f64:
703 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
704 ; SSE41-NEXT: addpd %xmm1, %xmm0
707 ; AVX-LABEL: test_arg_v2f64:
709 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
710 ; AVX-NEXT: vaddpd %xmm1, %xmm0, %xmm0
713 ; AVX512-LABEL: test_arg_v2f64:
715 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
716 ; AVX512-NEXT: vaddpd %xmm1, %xmm0, %xmm0
718 %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1
719 %2 = fadd <2 x double> %arg, %1
723 define <2 x i64> @test_arg_v2i64(<2 x i64> %arg, <2 x i64>* %src) {
724 ; SSE2-LABEL: test_arg_v2i64:
726 ; SSE2-NEXT: paddq (%rdi), %xmm0
729 ; SSE41-LABEL: test_arg_v2i64:
731 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
732 ; SSE41-NEXT: paddq %xmm1, %xmm0
735 ; AVX-LABEL: test_arg_v2i64:
737 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
738 ; AVX-NEXT: vpaddq %xmm1, %xmm0, %xmm0
741 ; AVX512-LABEL: test_arg_v2i64:
743 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
744 ; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
746 %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1
747 %2 = add <2 x i64> %arg, %1
751 define <8 x i16> @test_arg_v8i16(<8 x i16> %arg, <8 x i16>* %src) {
752 ; SSE2-LABEL: test_arg_v8i16:
754 ; SSE2-NEXT: paddw (%rdi), %xmm0
757 ; SSE41-LABEL: test_arg_v8i16:
759 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
760 ; SSE41-NEXT: paddw %xmm1, %xmm0
763 ; AVX-LABEL: test_arg_v8i16:
765 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
766 ; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
769 ; AVX512-LABEL: test_arg_v8i16:
771 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
772 ; AVX512-NEXT: vpaddw %xmm1, %xmm0, %xmm0
774 %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1
775 %2 = add <8 x i16> %arg, %1
779 define <16 x i8> @test_arg_v16i8(<16 x i8> %arg, <16 x i8>* %src) {
780 ; SSE2-LABEL: test_arg_v16i8:
782 ; SSE2-NEXT: paddb (%rdi), %xmm0
785 ; SSE41-LABEL: test_arg_v16i8:
787 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
788 ; SSE41-NEXT: paddb %xmm1, %xmm0
791 ; AVX-LABEL: test_arg_v16i8:
793 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
794 ; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
797 ; AVX512-LABEL: test_arg_v16i8:
799 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
800 ; AVX512-NEXT: vpaddb %xmm1, %xmm0, %xmm0
802 %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1
803 %2 = add <16 x i8> %arg, %1
807 ; And now YMM versions.
809 define <8 x float> @test_arg_v8f32(<8 x float> %arg, <8 x float>* %src) {
810 ; SSE2-LABEL: test_arg_v8f32:
812 ; SSE2-NEXT: addps (%rdi), %xmm0
813 ; SSE2-NEXT: addps 16(%rdi), %xmm1
816 ; SSE41-LABEL: test_arg_v8f32:
818 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
819 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
820 ; SSE41-NEXT: addps %xmm3, %xmm0
821 ; SSE41-NEXT: addps %xmm2, %xmm1
824 ; AVX1-LABEL: test_arg_v8f32:
826 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
827 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
828 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
829 ; AVX1-NEXT: vaddps %ymm1, %ymm0, %ymm0
832 ; AVX2-LABEL: test_arg_v8f32:
834 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
835 ; AVX2-NEXT: vaddps %ymm1, %ymm0, %ymm0
838 ; AVX512-LABEL: test_arg_v8f32:
840 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
841 ; AVX512-NEXT: vaddps %ymm1, %ymm0, %ymm0
843 %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1
844 %2 = fadd <8 x float> %arg, %1
848 define <8 x i32> @test_arg_v8i32(<8 x i32> %arg, <8 x i32>* %src) {
849 ; SSE2-LABEL: test_arg_v8i32:
851 ; SSE2-NEXT: paddd (%rdi), %xmm0
852 ; SSE2-NEXT: paddd 16(%rdi), %xmm1
855 ; SSE41-LABEL: test_arg_v8i32:
857 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
858 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
859 ; SSE41-NEXT: paddd %xmm3, %xmm0
860 ; SSE41-NEXT: paddd %xmm2, %xmm1
863 ; AVX1-LABEL: test_arg_v8i32:
865 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
866 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
867 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
868 ; AVX1-NEXT: vpaddd %xmm2, %xmm3, %xmm2
869 ; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0
870 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
873 ; AVX2-LABEL: test_arg_v8i32:
875 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
876 ; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0
879 ; AVX512F-LABEL: test_arg_v8i32:
881 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm1
882 ; AVX512F-NEXT: vpaddd %ymm1, %ymm0, %ymm0
885 ; AVX512BW-LABEL: test_arg_v8i32:
887 ; AVX512BW-NEXT: vmovntdqa (%rdi), %ymm1
888 ; AVX512BW-NEXT: vpaddd %ymm1, %ymm0, %ymm0
889 ; AVX512BW-NEXT: retq
891 ; AVX512VL-LABEL: test_arg_v8i32:
893 ; AVX512VL-NEXT: vpaddd (%rdi), %ymm0, %ymm0
894 ; AVX512VL-NEXT: retq
895 %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1
896 %2 = add <8 x i32> %arg, %1
900 define <4 x double> @test_arg_v4f64(<4 x double> %arg, <4 x double>* %src) {
901 ; SSE2-LABEL: test_arg_v4f64:
903 ; SSE2-NEXT: addpd (%rdi), %xmm0
904 ; SSE2-NEXT: addpd 16(%rdi), %xmm1
907 ; SSE41-LABEL: test_arg_v4f64:
909 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
910 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
911 ; SSE41-NEXT: addpd %xmm3, %xmm0
912 ; SSE41-NEXT: addpd %xmm2, %xmm1
915 ; AVX1-LABEL: test_arg_v4f64:
917 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
918 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
919 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
920 ; AVX1-NEXT: vaddpd %ymm1, %ymm0, %ymm0
923 ; AVX2-LABEL: test_arg_v4f64:
925 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
926 ; AVX2-NEXT: vaddpd %ymm1, %ymm0, %ymm0
929 ; AVX512-LABEL: test_arg_v4f64:
931 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
932 ; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0
934 %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1
935 %2 = fadd <4 x double> %arg, %1
939 define <4 x i64> @test_arg_v4i64(<4 x i64> %arg, <4 x i64>* %src) {
940 ; SSE2-LABEL: test_arg_v4i64:
942 ; SSE2-NEXT: paddq (%rdi), %xmm0
943 ; SSE2-NEXT: paddq 16(%rdi), %xmm1
946 ; SSE41-LABEL: test_arg_v4i64:
948 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
949 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
950 ; SSE41-NEXT: paddq %xmm3, %xmm0
951 ; SSE41-NEXT: paddq %xmm2, %xmm1
954 ; AVX1-LABEL: test_arg_v4i64:
956 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
957 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
958 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
959 ; AVX1-NEXT: vpaddq %xmm2, %xmm3, %xmm2
960 ; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm0
961 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
964 ; AVX2-LABEL: test_arg_v4i64:
966 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
967 ; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0
970 ; AVX512-LABEL: test_arg_v4i64:
972 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
973 ; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
975 %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1
976 %2 = add <4 x i64> %arg, %1
980 define <16 x i16> @test_arg_v16i16(<16 x i16> %arg, <16 x i16>* %src) {
981 ; SSE2-LABEL: test_arg_v16i16:
983 ; SSE2-NEXT: paddw (%rdi), %xmm0
984 ; SSE2-NEXT: paddw 16(%rdi), %xmm1
987 ; SSE41-LABEL: test_arg_v16i16:
989 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
990 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
991 ; SSE41-NEXT: paddw %xmm3, %xmm0
992 ; SSE41-NEXT: paddw %xmm2, %xmm1
995 ; AVX1-LABEL: test_arg_v16i16:
997 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
998 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
999 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1000 ; AVX1-NEXT: vpaddw %xmm2, %xmm3, %xmm2
1001 ; AVX1-NEXT: vpaddw %xmm1, %xmm0, %xmm0
1002 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1005 ; AVX2-LABEL: test_arg_v16i16:
1007 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
1008 ; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm0
1011 ; AVX512-LABEL: test_arg_v16i16:
1013 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
1014 ; AVX512-NEXT: vpaddw %ymm1, %ymm0, %ymm0
1016 %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1
1017 %2 = add <16 x i16> %arg, %1
1021 define <32 x i8> @test_arg_v32i8(<32 x i8> %arg, <32 x i8>* %src) {
1022 ; SSE2-LABEL: test_arg_v32i8:
1024 ; SSE2-NEXT: paddb (%rdi), %xmm0
1025 ; SSE2-NEXT: paddb 16(%rdi), %xmm1
1028 ; SSE41-LABEL: test_arg_v32i8:
1030 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
1031 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
1032 ; SSE41-NEXT: paddb %xmm3, %xmm0
1033 ; SSE41-NEXT: paddb %xmm2, %xmm1
1036 ; AVX1-LABEL: test_arg_v32i8:
1038 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
1039 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
1040 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1041 ; AVX1-NEXT: vpaddb %xmm2, %xmm3, %xmm2
1042 ; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm0
1043 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1046 ; AVX2-LABEL: test_arg_v32i8:
1048 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
1049 ; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm0
1052 ; AVX512-LABEL: test_arg_v32i8:
1054 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
1055 ; AVX512-NEXT: vpaddb %ymm1, %ymm0, %ymm0
1057 %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1
1058 %2 = add <32 x i8> %arg, %1
1062 ; And now ZMM versions.
1064 define <16 x float> @test_arg_v16f32(<16 x float> %arg, <16 x float>* %src) {
1065 ; SSE2-LABEL: test_arg_v16f32:
1067 ; SSE2-NEXT: addps (%rdi), %xmm0
1068 ; SSE2-NEXT: addps 16(%rdi), %xmm1
1069 ; SSE2-NEXT: addps 32(%rdi), %xmm2
1070 ; SSE2-NEXT: addps 48(%rdi), %xmm3
1073 ; SSE41-LABEL: test_arg_v16f32:
1075 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1076 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1077 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1078 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1079 ; SSE41-NEXT: addps %xmm7, %xmm0
1080 ; SSE41-NEXT: addps %xmm6, %xmm1
1081 ; SSE41-NEXT: addps %xmm5, %xmm2
1082 ; SSE41-NEXT: addps %xmm4, %xmm3
1085 ; AVX1-LABEL: test_arg_v16f32:
1087 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1088 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3
1089 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1090 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1091 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm4
1092 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1093 ; AVX1-NEXT: vaddps %ymm3, %ymm0, %ymm0
1094 ; AVX1-NEXT: vaddps %ymm2, %ymm1, %ymm1
1097 ; AVX2-LABEL: test_arg_v16f32:
1099 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1100 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1101 ; AVX2-NEXT: vaddps %ymm3, %ymm0, %ymm0
1102 ; AVX2-NEXT: vaddps %ymm2, %ymm1, %ymm1
1105 ; AVX512-LABEL: test_arg_v16f32:
1107 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1108 ; AVX512-NEXT: vaddps %zmm1, %zmm0, %zmm0
1110 %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1
1111 %2 = fadd <16 x float> %arg, %1
1115 define <16 x i32> @test_arg_v16i32(<16 x i32> %arg, <16 x i32>* %src) {
1116 ; SSE2-LABEL: test_arg_v16i32:
1118 ; SSE2-NEXT: paddd (%rdi), %xmm0
1119 ; SSE2-NEXT: paddd 16(%rdi), %xmm1
1120 ; SSE2-NEXT: paddd 32(%rdi), %xmm2
1121 ; SSE2-NEXT: paddd 48(%rdi), %xmm3
1124 ; SSE41-LABEL: test_arg_v16i32:
1126 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1127 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1128 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1129 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1130 ; SSE41-NEXT: paddd %xmm7, %xmm0
1131 ; SSE41-NEXT: paddd %xmm6, %xmm1
1132 ; SSE41-NEXT: paddd %xmm5, %xmm2
1133 ; SSE41-NEXT: paddd %xmm4, %xmm3
1136 ; AVX1-LABEL: test_arg_v16i32:
1138 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1139 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3
1140 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm4
1141 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm5
1142 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1143 ; AVX1-NEXT: vpaddd %xmm5, %xmm6, %xmm5
1144 ; AVX1-NEXT: vpaddd %xmm4, %xmm0, %xmm0
1145 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0
1146 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1147 ; AVX1-NEXT: vpaddd %xmm3, %xmm4, %xmm3
1148 ; AVX1-NEXT: vpaddd %xmm2, %xmm1, %xmm1
1149 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
1152 ; AVX2-LABEL: test_arg_v16i32:
1154 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1155 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1156 ; AVX2-NEXT: vpaddd %ymm3, %ymm0, %ymm0
1157 ; AVX2-NEXT: vpaddd %ymm2, %ymm1, %ymm1
1160 ; AVX512-LABEL: test_arg_v16i32:
1162 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1163 ; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
1165 %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1
1166 %2 = add <16 x i32> %arg, %1
1170 define <8 x double> @test_arg_v8f64(<8 x double> %arg, <8 x double>* %src) {
1171 ; SSE2-LABEL: test_arg_v8f64:
1173 ; SSE2-NEXT: addpd (%rdi), %xmm0
1174 ; SSE2-NEXT: addpd 16(%rdi), %xmm1
1175 ; SSE2-NEXT: addpd 32(%rdi), %xmm2
1176 ; SSE2-NEXT: addpd 48(%rdi), %xmm3
1179 ; SSE41-LABEL: test_arg_v8f64:
1181 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1182 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1183 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1184 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1185 ; SSE41-NEXT: addpd %xmm7, %xmm0
1186 ; SSE41-NEXT: addpd %xmm6, %xmm1
1187 ; SSE41-NEXT: addpd %xmm5, %xmm2
1188 ; SSE41-NEXT: addpd %xmm4, %xmm3
1191 ; AVX1-LABEL: test_arg_v8f64:
1193 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1194 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3
1195 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1196 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1197 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm4
1198 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1199 ; AVX1-NEXT: vaddpd %ymm3, %ymm0, %ymm0
1200 ; AVX1-NEXT: vaddpd %ymm2, %ymm1, %ymm1
1203 ; AVX2-LABEL: test_arg_v8f64:
1205 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1206 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1207 ; AVX2-NEXT: vaddpd %ymm3, %ymm0, %ymm0
1208 ; AVX2-NEXT: vaddpd %ymm2, %ymm1, %ymm1
1211 ; AVX512-LABEL: test_arg_v8f64:
1213 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1214 ; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm0
1216 %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1
1217 %2 = fadd <8 x double> %arg, %1
1221 define <8 x i64> @test_arg_v8i64(<8 x i64> %arg, <8 x i64>* %src) {
1222 ; SSE2-LABEL: test_arg_v8i64:
1224 ; SSE2-NEXT: paddq (%rdi), %xmm0
1225 ; SSE2-NEXT: paddq 16(%rdi), %xmm1
1226 ; SSE2-NEXT: paddq 32(%rdi), %xmm2
1227 ; SSE2-NEXT: paddq 48(%rdi), %xmm3
1230 ; SSE41-LABEL: test_arg_v8i64:
1232 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1233 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1234 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1235 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1236 ; SSE41-NEXT: paddq %xmm7, %xmm0
1237 ; SSE41-NEXT: paddq %xmm6, %xmm1
1238 ; SSE41-NEXT: paddq %xmm5, %xmm2
1239 ; SSE41-NEXT: paddq %xmm4, %xmm3
1242 ; AVX1-LABEL: test_arg_v8i64:
1244 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1245 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3
1246 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm4
1247 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm5
1248 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1249 ; AVX1-NEXT: vpaddq %xmm5, %xmm6, %xmm5
1250 ; AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm0
1251 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0
1252 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1253 ; AVX1-NEXT: vpaddq %xmm3, %xmm4, %xmm3
1254 ; AVX1-NEXT: vpaddq %xmm2, %xmm1, %xmm1
1255 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
1258 ; AVX2-LABEL: test_arg_v8i64:
1260 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1261 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1262 ; AVX2-NEXT: vpaddq %ymm3, %ymm0, %ymm0
1263 ; AVX2-NEXT: vpaddq %ymm2, %ymm1, %ymm1
1266 ; AVX512-LABEL: test_arg_v8i64:
1268 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1269 ; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
1271 %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1
1272 %2 = add <8 x i64> %arg, %1
1276 define <32 x i16> @test_arg_v32i16(<32 x i16> %arg, <32 x i16>* %src) {
1277 ; SSE2-LABEL: test_arg_v32i16:
1279 ; SSE2-NEXT: paddw (%rdi), %xmm0
1280 ; SSE2-NEXT: paddw 16(%rdi), %xmm1
1281 ; SSE2-NEXT: paddw 32(%rdi), %xmm2
1282 ; SSE2-NEXT: paddw 48(%rdi), %xmm3
1285 ; SSE41-LABEL: test_arg_v32i16:
1287 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1288 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1289 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1290 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1291 ; SSE41-NEXT: paddw %xmm7, %xmm0
1292 ; SSE41-NEXT: paddw %xmm6, %xmm1
1293 ; SSE41-NEXT: paddw %xmm5, %xmm2
1294 ; SSE41-NEXT: paddw %xmm4, %xmm3
1297 ; AVX1-LABEL: test_arg_v32i16:
1299 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1300 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3
1301 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm4
1302 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm5
1303 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1304 ; AVX1-NEXT: vpaddw %xmm5, %xmm6, %xmm5
1305 ; AVX1-NEXT: vpaddw %xmm4, %xmm0, %xmm0
1306 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0
1307 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1308 ; AVX1-NEXT: vpaddw %xmm3, %xmm4, %xmm3
1309 ; AVX1-NEXT: vpaddw %xmm2, %xmm1, %xmm1
1310 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
1313 ; AVX2-LABEL: test_arg_v32i16:
1315 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1316 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1317 ; AVX2-NEXT: vpaddw %ymm3, %ymm0, %ymm0
1318 ; AVX2-NEXT: vpaddw %ymm2, %ymm1, %ymm1
1321 ; AVX512F-LABEL: test_arg_v32i16:
1323 ; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm2
1324 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm3
1325 ; AVX512F-NEXT: vpaddw %ymm3, %ymm0, %ymm0
1326 ; AVX512F-NEXT: vpaddw %ymm2, %ymm1, %ymm1
1327 ; AVX512F-NEXT: retq
1329 ; AVX512BW-LABEL: test_arg_v32i16:
1331 ; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm1
1332 ; AVX512BW-NEXT: vpaddw %zmm1, %zmm0, %zmm0
1333 ; AVX512BW-NEXT: retq
1335 ; AVX512VL-LABEL: test_arg_v32i16:
1337 ; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm2
1338 ; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm3
1339 ; AVX512VL-NEXT: vpaddw %ymm3, %ymm0, %ymm0
1340 ; AVX512VL-NEXT: vpaddw %ymm2, %ymm1, %ymm1
1341 ; AVX512VL-NEXT: retq
1342 %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1
1343 %2 = add <32 x i16> %arg, %1
1347 define <64 x i8> @test_arg_v64i8(<64 x i8> %arg, <64 x i8>* %src) {
1348 ; SSE2-LABEL: test_arg_v64i8:
1350 ; SSE2-NEXT: paddb (%rdi), %xmm0
1351 ; SSE2-NEXT: paddb 16(%rdi), %xmm1
1352 ; SSE2-NEXT: paddb 32(%rdi), %xmm2
1353 ; SSE2-NEXT: paddb 48(%rdi), %xmm3
1356 ; SSE41-LABEL: test_arg_v64i8:
1358 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1359 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1360 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1361 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1362 ; SSE41-NEXT: paddb %xmm7, %xmm0
1363 ; SSE41-NEXT: paddb %xmm6, %xmm1
1364 ; SSE41-NEXT: paddb %xmm5, %xmm2
1365 ; SSE41-NEXT: paddb %xmm4, %xmm3
1368 ; AVX1-LABEL: test_arg_v64i8:
1370 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1371 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3
1372 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm4
1373 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm5
1374 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1375 ; AVX1-NEXT: vpaddb %xmm5, %xmm6, %xmm5
1376 ; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0
1377 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0
1378 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1379 ; AVX1-NEXT: vpaddb %xmm3, %xmm4, %xmm3
1380 ; AVX1-NEXT: vpaddb %xmm2, %xmm1, %xmm1
1381 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
1384 ; AVX2-LABEL: test_arg_v64i8:
1386 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1387 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1388 ; AVX2-NEXT: vpaddb %ymm3, %ymm0, %ymm0
1389 ; AVX2-NEXT: vpaddb %ymm2, %ymm1, %ymm1
1392 ; AVX512F-LABEL: test_arg_v64i8:
1394 ; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm2
1395 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm3
1396 ; AVX512F-NEXT: vpaddb %ymm3, %ymm0, %ymm0
1397 ; AVX512F-NEXT: vpaddb %ymm2, %ymm1, %ymm1
1398 ; AVX512F-NEXT: retq
1400 ; AVX512BW-LABEL: test_arg_v64i8:
1402 ; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm1
1403 ; AVX512BW-NEXT: vpaddb %zmm1, %zmm0, %zmm0
1404 ; AVX512BW-NEXT: retq
1406 ; AVX512VL-LABEL: test_arg_v64i8:
1408 ; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm2
1409 ; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm3
1410 ; AVX512VL-NEXT: vpaddb %ymm3, %ymm0, %ymm0
1411 ; AVX512VL-NEXT: vpaddb %ymm2, %ymm1, %ymm1
1412 ; AVX512VL-NEXT: retq
1413 %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1
1414 %2 = add <64 x i8> %arg, %1
1419 ; Unaligned non-temporal loads (not supported)
1421 define <4 x float> @test_unaligned_v4f32(<4 x float>* %src) {
1422 ; SSE-LABEL: test_unaligned_v4f32:
1424 ; SSE-NEXT: movups (%rdi), %xmm0
1427 ; AVX-LABEL: test_unaligned_v4f32:
1429 ; AVX-NEXT: vmovups (%rdi), %xmm0
1432 ; AVX512-LABEL: test_unaligned_v4f32:
1434 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1436 %1 = load <4 x float>, <4 x float>* %src, align 1, !nontemporal !1
1440 define <4 x i32> @test_unaligned_v4i32(<4 x i32>* %src) {
1441 ; SSE-LABEL: test_unaligned_v4i32:
1443 ; SSE-NEXT: movups (%rdi), %xmm0
1446 ; AVX-LABEL: test_unaligned_v4i32:
1448 ; AVX-NEXT: vmovups (%rdi), %xmm0
1451 ; AVX512-LABEL: test_unaligned_v4i32:
1453 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1455 %1 = load <4 x i32>, <4 x i32>* %src, align 1, !nontemporal !1
1459 define <2 x double> @test_unaligned_v2f64(<2 x double>* %src) {
1460 ; SSE-LABEL: test_unaligned_v2f64:
1462 ; SSE-NEXT: movups (%rdi), %xmm0
1465 ; AVX-LABEL: test_unaligned_v2f64:
1467 ; AVX-NEXT: vmovups (%rdi), %xmm0
1470 ; AVX512-LABEL: test_unaligned_v2f64:
1472 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1474 %1 = load <2 x double>, <2 x double>* %src, align 1, !nontemporal !1
1478 define <2 x i64> @test_unaligned_v2i64(<2 x i64>* %src) {
1479 ; SSE-LABEL: test_unaligned_v2i64:
1481 ; SSE-NEXT: movups (%rdi), %xmm0
1484 ; AVX-LABEL: test_unaligned_v2i64:
1486 ; AVX-NEXT: vmovups (%rdi), %xmm0
1489 ; AVX512-LABEL: test_unaligned_v2i64:
1491 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1493 %1 = load <2 x i64>, <2 x i64>* %src, align 1, !nontemporal !1
1497 define <8 x i16> @test_unaligned_v8i16(<8 x i16>* %src) {
1498 ; SSE-LABEL: test_unaligned_v8i16:
1500 ; SSE-NEXT: movups (%rdi), %xmm0
1503 ; AVX-LABEL: test_unaligned_v8i16:
1505 ; AVX-NEXT: vmovups (%rdi), %xmm0
1508 ; AVX512-LABEL: test_unaligned_v8i16:
1510 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1512 %1 = load <8 x i16>, <8 x i16>* %src, align 1, !nontemporal !1
1516 define <16 x i8> @test_unaligned_v16i8(<16 x i8>* %src) {
1517 ; SSE-LABEL: test_unaligned_v16i8:
1519 ; SSE-NEXT: movups (%rdi), %xmm0
1522 ; AVX-LABEL: test_unaligned_v16i8:
1524 ; AVX-NEXT: vmovups (%rdi), %xmm0
1527 ; AVX512-LABEL: test_unaligned_v16i8:
1529 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1531 %1 = load <16 x i8>, <16 x i8>* %src, align 1, !nontemporal !1
1535 ; And now YMM versions.
1537 define <8 x float> @test_unaligned_v8f32(<8 x float>* %src) {
1538 ; SSE-LABEL: test_unaligned_v8f32:
1540 ; SSE-NEXT: movups (%rdi), %xmm0
1541 ; SSE-NEXT: movups 16(%rdi), %xmm1
1544 ; AVX-LABEL: test_unaligned_v8f32:
1546 ; AVX-NEXT: vmovups (%rdi), %ymm0
1549 ; AVX512-LABEL: test_unaligned_v8f32:
1551 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1553 %1 = load <8 x float>, <8 x float>* %src, align 1, !nontemporal !1
1557 define <8 x i32> @test_unaligned_v8i32(<8 x i32>* %src) {
1558 ; SSE-LABEL: test_unaligned_v8i32:
1560 ; SSE-NEXT: movups (%rdi), %xmm0
1561 ; SSE-NEXT: movups 16(%rdi), %xmm1
1564 ; AVX-LABEL: test_unaligned_v8i32:
1566 ; AVX-NEXT: vmovups (%rdi), %ymm0
1569 ; AVX512-LABEL: test_unaligned_v8i32:
1571 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1573 %1 = load <8 x i32>, <8 x i32>* %src, align 1, !nontemporal !1
1577 define <4 x double> @test_unaligned_v4f64(<4 x double>* %src) {
1578 ; SSE-LABEL: test_unaligned_v4f64:
1580 ; SSE-NEXT: movups (%rdi), %xmm0
1581 ; SSE-NEXT: movups 16(%rdi), %xmm1
1584 ; AVX-LABEL: test_unaligned_v4f64:
1586 ; AVX-NEXT: vmovups (%rdi), %ymm0
1589 ; AVX512-LABEL: test_unaligned_v4f64:
1591 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1593 %1 = load <4 x double>, <4 x double>* %src, align 1, !nontemporal !1
1597 define <4 x i64> @test_unaligned_v4i64(<4 x i64>* %src) {
1598 ; SSE-LABEL: test_unaligned_v4i64:
1600 ; SSE-NEXT: movups (%rdi), %xmm0
1601 ; SSE-NEXT: movups 16(%rdi), %xmm1
1604 ; AVX-LABEL: test_unaligned_v4i64:
1606 ; AVX-NEXT: vmovups (%rdi), %ymm0
1609 ; AVX512-LABEL: test_unaligned_v4i64:
1611 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1613 %1 = load <4 x i64>, <4 x i64>* %src, align 1, !nontemporal !1
1617 define <16 x i16> @test_unaligned_v16i16(<16 x i16>* %src) {
1618 ; SSE-LABEL: test_unaligned_v16i16:
1620 ; SSE-NEXT: movups (%rdi), %xmm0
1621 ; SSE-NEXT: movups 16(%rdi), %xmm1
1624 ; AVX-LABEL: test_unaligned_v16i16:
1626 ; AVX-NEXT: vmovups (%rdi), %ymm0
1629 ; AVX512-LABEL: test_unaligned_v16i16:
1631 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1633 %1 = load <16 x i16>, <16 x i16>* %src, align 1, !nontemporal !1
1637 define <32 x i8> @test_unaligned_v32i8(<32 x i8>* %src) {
1638 ; SSE-LABEL: test_unaligned_v32i8:
1640 ; SSE-NEXT: movups (%rdi), %xmm0
1641 ; SSE-NEXT: movups 16(%rdi), %xmm1
1644 ; AVX-LABEL: test_unaligned_v32i8:
1646 ; AVX-NEXT: vmovups (%rdi), %ymm0
1649 ; AVX512-LABEL: test_unaligned_v32i8:
1651 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1653 %1 = load <32 x i8>, <32 x i8>* %src, align 1, !nontemporal !1
1657 ; And now ZMM versions.
1659 define <16 x float> @test_unaligned_v16f32(<16 x float>* %src) {
1660 ; SSE-LABEL: test_unaligned_v16f32:
1662 ; SSE-NEXT: movups (%rdi), %xmm0
1663 ; SSE-NEXT: movups 16(%rdi), %xmm1
1664 ; SSE-NEXT: movups 32(%rdi), %xmm2
1665 ; SSE-NEXT: movups 48(%rdi), %xmm3
1668 ; AVX-LABEL: test_unaligned_v16f32:
1670 ; AVX-NEXT: vmovups (%rdi), %ymm0
1671 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1674 ; AVX512-LABEL: test_unaligned_v16f32:
1676 ; AVX512-NEXT: vmovups (%rdi), %zmm0
1678 %1 = load <16 x float>, <16 x float>* %src, align 1, !nontemporal !1
1682 define <16 x i32> @test_unaligned_v16i32(<16 x i32>* %src) {
1683 ; SSE-LABEL: test_unaligned_v16i32:
1685 ; SSE-NEXT: movups (%rdi), %xmm0
1686 ; SSE-NEXT: movups 16(%rdi), %xmm1
1687 ; SSE-NEXT: movups 32(%rdi), %xmm2
1688 ; SSE-NEXT: movups 48(%rdi), %xmm3
1691 ; AVX-LABEL: test_unaligned_v16i32:
1693 ; AVX-NEXT: vmovups (%rdi), %ymm0
1694 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1697 ; AVX512-LABEL: test_unaligned_v16i32:
1699 ; AVX512-NEXT: vmovups (%rdi), %zmm0
1701 %1 = load <16 x i32>, <16 x i32>* %src, align 1, !nontemporal !1
1705 define <8 x double> @test_unaligned_v8f64(<8 x double>* %src) {
1706 ; SSE-LABEL: test_unaligned_v8f64:
1708 ; SSE-NEXT: movups (%rdi), %xmm0
1709 ; SSE-NEXT: movups 16(%rdi), %xmm1
1710 ; SSE-NEXT: movups 32(%rdi), %xmm2
1711 ; SSE-NEXT: movups 48(%rdi), %xmm3
1714 ; AVX-LABEL: test_unaligned_v8f64:
1716 ; AVX-NEXT: vmovups (%rdi), %ymm0
1717 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1720 ; AVX512-LABEL: test_unaligned_v8f64:
1722 ; AVX512-NEXT: vmovups (%rdi), %zmm0
1724 %1 = load <8 x double>, <8 x double>* %src, align 1, !nontemporal !1
1728 define <8 x i64> @test_unaligned_v8i64(<8 x i64>* %src) {
1729 ; SSE-LABEL: test_unaligned_v8i64:
1731 ; SSE-NEXT: movups (%rdi), %xmm0
1732 ; SSE-NEXT: movups 16(%rdi), %xmm1
1733 ; SSE-NEXT: movups 32(%rdi), %xmm2
1734 ; SSE-NEXT: movups 48(%rdi), %xmm3
1737 ; AVX-LABEL: test_unaligned_v8i64:
1739 ; AVX-NEXT: vmovups (%rdi), %ymm0
1740 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1743 ; AVX512-LABEL: test_unaligned_v8i64:
1745 ; AVX512-NEXT: vmovups (%rdi), %zmm0
1747 %1 = load <8 x i64>, <8 x i64>* %src, align 1, !nontemporal !1
1751 define <32 x i16> @test_unaligned_v32i16(<32 x i16>* %src) {
1752 ; SSE-LABEL: test_unaligned_v32i16:
1754 ; SSE-NEXT: movups (%rdi), %xmm0
1755 ; SSE-NEXT: movups 16(%rdi), %xmm1
1756 ; SSE-NEXT: movups 32(%rdi), %xmm2
1757 ; SSE-NEXT: movups 48(%rdi), %xmm3
1760 ; AVX-LABEL: test_unaligned_v32i16:
1762 ; AVX-NEXT: vmovups (%rdi), %ymm0
1763 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1766 ; AVX512F-LABEL: test_unaligned_v32i16:
1768 ; AVX512F-NEXT: vmovups (%rdi), %ymm0
1769 ; AVX512F-NEXT: vmovups 32(%rdi), %ymm1
1770 ; AVX512F-NEXT: retq
1772 ; AVX512BW-LABEL: test_unaligned_v32i16:
1774 ; AVX512BW-NEXT: vmovdqu16 (%rdi), %zmm0
1775 ; AVX512BW-NEXT: retq
1777 ; AVX512VL-LABEL: test_unaligned_v32i16:
1779 ; AVX512VL-NEXT: vmovups (%rdi), %ymm0
1780 ; AVX512VL-NEXT: vmovups 32(%rdi), %ymm1
1781 ; AVX512VL-NEXT: retq
1782 %1 = load <32 x i16>, <32 x i16>* %src, align 1, !nontemporal !1
1786 define <64 x i8> @test_unaligned_v64i8(<64 x i8>* %src) {
1787 ; SSE-LABEL: test_unaligned_v64i8:
1789 ; SSE-NEXT: movups (%rdi), %xmm0
1790 ; SSE-NEXT: movups 16(%rdi), %xmm1
1791 ; SSE-NEXT: movups 32(%rdi), %xmm2
1792 ; SSE-NEXT: movups 48(%rdi), %xmm3
1795 ; AVX-LABEL: test_unaligned_v64i8:
1797 ; AVX-NEXT: vmovups (%rdi), %ymm0
1798 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1801 ; AVX512F-LABEL: test_unaligned_v64i8:
1803 ; AVX512F-NEXT: vmovups (%rdi), %ymm0
1804 ; AVX512F-NEXT: vmovups 32(%rdi), %ymm1
1805 ; AVX512F-NEXT: retq
1807 ; AVX512BW-LABEL: test_unaligned_v64i8:
1809 ; AVX512BW-NEXT: vmovdqu8 (%rdi), %zmm0
1810 ; AVX512BW-NEXT: retq
1812 ; AVX512VL-LABEL: test_unaligned_v64i8:
1814 ; AVX512VL-NEXT: vmovups (%rdi), %ymm0
1815 ; AVX512VL-NEXT: vmovups 32(%rdi), %ymm1
1816 ; AVX512VL-NEXT: retq
1817 %1 = load <64 x i8>, <64 x i8>* %src, align 1, !nontemporal !1