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 ; AVX512-LABEL: test_v8i32:
216 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
218 %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1
222 define <4 x double> @test_v4f64(<4 x double>* %src) {
223 ; SSE2-LABEL: test_v4f64:
225 ; SSE2-NEXT: movaps (%rdi), %xmm0
226 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
229 ; SSE41-LABEL: test_v4f64:
231 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
232 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
235 ; AVX1-LABEL: test_v4f64:
237 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
238 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
239 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
242 ; AVX2-LABEL: test_v4f64:
244 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
247 ; AVX512-LABEL: test_v4f64:
249 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
251 %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1
255 define <4 x i64> @test_v4i64(<4 x i64>* %src) {
256 ; SSE2-LABEL: test_v4i64:
258 ; SSE2-NEXT: movaps (%rdi), %xmm0
259 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
262 ; SSE41-LABEL: test_v4i64:
264 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
265 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
268 ; AVX1-LABEL: test_v4i64:
270 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
271 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
272 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
275 ; AVX2-LABEL: test_v4i64:
277 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
280 ; AVX512-LABEL: test_v4i64:
282 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
284 %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1
288 define <16 x i16> @test_v16i16(<16 x i16>* %src) {
289 ; SSE2-LABEL: test_v16i16:
291 ; SSE2-NEXT: movaps (%rdi), %xmm0
292 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
295 ; SSE41-LABEL: test_v16i16:
297 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
298 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
301 ; AVX1-LABEL: test_v16i16:
303 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
304 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
305 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
308 ; AVX2-LABEL: test_v16i16:
310 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
313 ; AVX512-LABEL: test_v16i16:
315 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
317 %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1
321 define <32 x i8> @test_v32i8(<32 x i8>* %src) {
322 ; SSE2-LABEL: test_v32i8:
324 ; SSE2-NEXT: movaps (%rdi), %xmm0
325 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
328 ; SSE41-LABEL: test_v32i8:
330 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
331 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
334 ; AVX1-LABEL: test_v32i8:
336 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
337 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
338 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
341 ; AVX2-LABEL: test_v32i8:
343 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
346 ; AVX512-LABEL: test_v32i8:
348 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
350 %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1
354 ; And now ZMM versions.
356 define <16 x float> @test_v16f32(<16 x float>* %src) {
357 ; SSE2-LABEL: test_v16f32:
359 ; SSE2-NEXT: movaps (%rdi), %xmm0
360 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
361 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
362 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
365 ; SSE41-LABEL: test_v16f32:
367 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
368 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
369 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
370 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
373 ; AVX1-LABEL: test_v16f32:
375 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
376 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
377 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
378 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
379 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
380 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
383 ; AVX2-LABEL: test_v16f32:
385 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
386 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
389 ; AVX512-LABEL: test_v16f32:
391 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
393 %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1
397 define <16 x i32> @test_v16i32(<16 x i32>* %src) {
398 ; SSE2-LABEL: test_v16i32:
400 ; SSE2-NEXT: movaps (%rdi), %xmm0
401 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
402 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
403 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
406 ; SSE41-LABEL: test_v16i32:
408 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
409 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
410 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
411 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
414 ; AVX1-LABEL: test_v16i32:
416 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
417 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
418 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
419 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
420 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
421 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
424 ; AVX2-LABEL: test_v16i32:
426 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
427 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
430 ; AVX512-LABEL: test_v16i32:
432 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
434 %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1
438 define <8 x double> @test_v8f64(<8 x double>* %src) {
439 ; SSE2-LABEL: test_v8f64:
441 ; SSE2-NEXT: movaps (%rdi), %xmm0
442 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
443 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
444 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
447 ; SSE41-LABEL: test_v8f64:
449 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
450 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
451 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
452 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
455 ; AVX1-LABEL: test_v8f64:
457 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
458 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
459 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
460 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
461 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
462 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
465 ; AVX2-LABEL: test_v8f64:
467 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
468 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
471 ; AVX512-LABEL: test_v8f64:
473 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
475 %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1
479 define <8 x i64> @test_v8i64(<8 x i64>* %src) {
480 ; SSE2-LABEL: test_v8i64:
482 ; SSE2-NEXT: movaps (%rdi), %xmm0
483 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
484 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
485 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
488 ; SSE41-LABEL: test_v8i64:
490 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
491 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
492 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
493 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
496 ; AVX1-LABEL: test_v8i64:
498 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
499 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
500 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
501 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
502 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
503 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
506 ; AVX2-LABEL: test_v8i64:
508 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
509 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
512 ; AVX512-LABEL: test_v8i64:
514 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
516 %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1
520 define <32 x i16> @test_v32i16(<32 x i16>* %src) {
521 ; SSE2-LABEL: test_v32i16:
523 ; SSE2-NEXT: movaps (%rdi), %xmm0
524 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
525 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
526 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
529 ; SSE41-LABEL: test_v32i16:
531 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
532 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
533 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
534 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
537 ; AVX1-LABEL: test_v32i16:
539 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
540 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
541 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
542 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
543 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
544 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
547 ; AVX2-LABEL: test_v32i16:
549 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
550 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
553 ; AVX512F-LABEL: test_v32i16:
555 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0
556 ; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm1
559 ; AVX512BW-LABEL: test_v32i16:
561 ; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm0
562 ; AVX512BW-NEXT: retq
564 ; AVX512VL-LABEL: test_v32i16:
566 ; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm0
567 ; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm1
568 ; AVX512VL-NEXT: retq
569 %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1
573 define <64 x i8> @test_v64i8(<64 x i8>* %src) {
574 ; SSE2-LABEL: test_v64i8:
576 ; SSE2-NEXT: movaps (%rdi), %xmm0
577 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
578 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
579 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
582 ; SSE41-LABEL: test_v64i8:
584 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
585 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
586 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
587 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
590 ; AVX1-LABEL: test_v64i8:
592 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
593 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
594 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
595 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1
596 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
597 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
600 ; AVX2-LABEL: test_v64i8:
602 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
603 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
606 ; AVX512F-LABEL: test_v64i8:
608 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0
609 ; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm1
612 ; AVX512BW-LABEL: test_v64i8:
614 ; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm0
615 ; AVX512BW-NEXT: retq
617 ; AVX512VL-LABEL: test_v64i8:
619 ; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm0
620 ; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm1
621 ; AVX512VL-NEXT: retq
622 %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1
627 ; Check cases where the load would be folded.
629 define <4 x float> @test_arg_v4f32(<4 x float> %arg, <4 x float>* %src) {
630 ; SSE2-LABEL: test_arg_v4f32:
632 ; SSE2-NEXT: addps (%rdi), %xmm0
635 ; SSE41-LABEL: test_arg_v4f32:
637 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
638 ; SSE41-NEXT: addps %xmm1, %xmm0
641 ; AVX-LABEL: test_arg_v4f32:
643 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
644 ; AVX-NEXT: vaddps %xmm1, %xmm0, %xmm0
647 ; AVX512-LABEL: test_arg_v4f32:
649 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
650 ; AVX512-NEXT: vaddps %xmm1, %xmm0, %xmm0
652 %1 = load <4 x float>, <4 x float>* %src, align 16, !nontemporal !1
653 %2 = fadd <4 x float> %arg, %1
657 define <4 x i32> @test_arg_v4i32(<4 x i32> %arg, <4 x i32>* %src) {
658 ; SSE2-LABEL: test_arg_v4i32:
660 ; SSE2-NEXT: paddd (%rdi), %xmm0
663 ; SSE41-LABEL: test_arg_v4i32:
665 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
666 ; SSE41-NEXT: paddd %xmm1, %xmm0
669 ; AVX-LABEL: test_arg_v4i32:
671 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
672 ; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
675 ; AVX512-LABEL: test_arg_v4i32:
677 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
678 ; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0
680 %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1
681 %2 = add <4 x i32> %arg, %1
685 define <2 x double> @test_arg_v2f64(<2 x double> %arg, <2 x double>* %src) {
686 ; SSE2-LABEL: test_arg_v2f64:
688 ; SSE2-NEXT: addpd (%rdi), %xmm0
691 ; SSE41-LABEL: test_arg_v2f64:
693 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
694 ; SSE41-NEXT: addpd %xmm1, %xmm0
697 ; AVX-LABEL: test_arg_v2f64:
699 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
700 ; AVX-NEXT: vaddpd %xmm1, %xmm0, %xmm0
703 ; AVX512-LABEL: test_arg_v2f64:
705 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
706 ; AVX512-NEXT: vaddpd %xmm1, %xmm0, %xmm0
708 %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1
709 %2 = fadd <2 x double> %arg, %1
713 define <2 x i64> @test_arg_v2i64(<2 x i64> %arg, <2 x i64>* %src) {
714 ; SSE2-LABEL: test_arg_v2i64:
716 ; SSE2-NEXT: paddq (%rdi), %xmm0
719 ; SSE41-LABEL: test_arg_v2i64:
721 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
722 ; SSE41-NEXT: paddq %xmm1, %xmm0
725 ; AVX-LABEL: test_arg_v2i64:
727 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
728 ; AVX-NEXT: vpaddq %xmm1, %xmm0, %xmm0
731 ; AVX512-LABEL: test_arg_v2i64:
733 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
734 ; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
736 %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1
737 %2 = add <2 x i64> %arg, %1
741 define <8 x i16> @test_arg_v8i16(<8 x i16> %arg, <8 x i16>* %src) {
742 ; SSE2-LABEL: test_arg_v8i16:
744 ; SSE2-NEXT: paddw (%rdi), %xmm0
747 ; SSE41-LABEL: test_arg_v8i16:
749 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
750 ; SSE41-NEXT: paddw %xmm1, %xmm0
753 ; AVX-LABEL: test_arg_v8i16:
755 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
756 ; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
759 ; AVX512-LABEL: test_arg_v8i16:
761 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
762 ; AVX512-NEXT: vpaddw %xmm1, %xmm0, %xmm0
764 %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1
765 %2 = add <8 x i16> %arg, %1
769 define <16 x i8> @test_arg_v16i8(<16 x i8> %arg, <16 x i8>* %src) {
770 ; SSE2-LABEL: test_arg_v16i8:
772 ; SSE2-NEXT: paddb (%rdi), %xmm0
775 ; SSE41-LABEL: test_arg_v16i8:
777 ; SSE41-NEXT: movntdqa (%rdi), %xmm1
778 ; SSE41-NEXT: paddb %xmm1, %xmm0
781 ; AVX-LABEL: test_arg_v16i8:
783 ; AVX-NEXT: vmovntdqa (%rdi), %xmm1
784 ; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
787 ; AVX512-LABEL: test_arg_v16i8:
789 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm1
790 ; AVX512-NEXT: vpaddb %xmm1, %xmm0, %xmm0
792 %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1
793 %2 = add <16 x i8> %arg, %1
797 ; And now YMM versions.
799 define <8 x float> @test_arg_v8f32(<8 x float> %arg, <8 x float>* %src) {
800 ; SSE2-LABEL: test_arg_v8f32:
802 ; SSE2-NEXT: addps (%rdi), %xmm0
803 ; SSE2-NEXT: addps 16(%rdi), %xmm1
806 ; SSE41-LABEL: test_arg_v8f32:
808 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
809 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
810 ; SSE41-NEXT: addps %xmm3, %xmm0
811 ; SSE41-NEXT: addps %xmm2, %xmm1
814 ; AVX1-LABEL: test_arg_v8f32:
816 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
817 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
818 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
819 ; AVX1-NEXT: vaddps %ymm1, %ymm0, %ymm0
822 ; AVX2-LABEL: test_arg_v8f32:
824 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
825 ; AVX2-NEXT: vaddps %ymm1, %ymm0, %ymm0
828 ; AVX512-LABEL: test_arg_v8f32:
830 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
831 ; AVX512-NEXT: vaddps %ymm1, %ymm0, %ymm0
833 %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1
834 %2 = fadd <8 x float> %arg, %1
838 define <8 x i32> @test_arg_v8i32(<8 x i32> %arg, <8 x i32>* %src) {
839 ; SSE2-LABEL: test_arg_v8i32:
841 ; SSE2-NEXT: paddd (%rdi), %xmm0
842 ; SSE2-NEXT: paddd 16(%rdi), %xmm1
845 ; SSE41-LABEL: test_arg_v8i32:
847 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
848 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
849 ; SSE41-NEXT: paddd %xmm3, %xmm0
850 ; SSE41-NEXT: paddd %xmm2, %xmm1
853 ; AVX1-LABEL: test_arg_v8i32:
855 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
856 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
857 ; AVX1-NEXT: vpaddd %xmm1, %xmm2, %xmm1
858 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm2
859 ; AVX1-NEXT: vpaddd %xmm2, %xmm0, %xmm0
860 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
863 ; AVX2-LABEL: test_arg_v8i32:
865 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
866 ; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0
869 ; AVX512-LABEL: test_arg_v8i32:
871 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
872 ; AVX512-NEXT: vpaddd %ymm1, %ymm0, %ymm0
874 %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1
875 %2 = add <8 x i32> %arg, %1
879 define <4 x double> @test_arg_v4f64(<4 x double> %arg, <4 x double>* %src) {
880 ; SSE2-LABEL: test_arg_v4f64:
882 ; SSE2-NEXT: addpd (%rdi), %xmm0
883 ; SSE2-NEXT: addpd 16(%rdi), %xmm1
886 ; SSE41-LABEL: test_arg_v4f64:
888 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
889 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
890 ; SSE41-NEXT: addpd %xmm3, %xmm0
891 ; SSE41-NEXT: addpd %xmm2, %xmm1
894 ; AVX1-LABEL: test_arg_v4f64:
896 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
897 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
898 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
899 ; AVX1-NEXT: vaddpd %ymm1, %ymm0, %ymm0
902 ; AVX2-LABEL: test_arg_v4f64:
904 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
905 ; AVX2-NEXT: vaddpd %ymm1, %ymm0, %ymm0
908 ; AVX512-LABEL: test_arg_v4f64:
910 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
911 ; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0
913 %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1
914 %2 = fadd <4 x double> %arg, %1
918 define <4 x i64> @test_arg_v4i64(<4 x i64> %arg, <4 x i64>* %src) {
919 ; SSE2-LABEL: test_arg_v4i64:
921 ; SSE2-NEXT: paddq (%rdi), %xmm0
922 ; SSE2-NEXT: paddq 16(%rdi), %xmm1
925 ; SSE41-LABEL: test_arg_v4i64:
927 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
928 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
929 ; SSE41-NEXT: paddq %xmm3, %xmm0
930 ; SSE41-NEXT: paddq %xmm2, %xmm1
933 ; AVX1-LABEL: test_arg_v4i64:
935 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
936 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
937 ; AVX1-NEXT: vpaddq %xmm1, %xmm2, %xmm1
938 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm2
939 ; AVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm0
940 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
943 ; AVX2-LABEL: test_arg_v4i64:
945 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
946 ; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0
949 ; AVX512-LABEL: test_arg_v4i64:
951 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
952 ; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
954 %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1
955 %2 = add <4 x i64> %arg, %1
959 define <16 x i16> @test_arg_v16i16(<16 x i16> %arg, <16 x i16>* %src) {
960 ; SSE2-LABEL: test_arg_v16i16:
962 ; SSE2-NEXT: paddw (%rdi), %xmm0
963 ; SSE2-NEXT: paddw 16(%rdi), %xmm1
966 ; SSE41-LABEL: test_arg_v16i16:
968 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
969 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
970 ; SSE41-NEXT: paddw %xmm3, %xmm0
971 ; SSE41-NEXT: paddw %xmm2, %xmm1
974 ; AVX1-LABEL: test_arg_v16i16:
976 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
977 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
978 ; AVX1-NEXT: vpaddw %xmm1, %xmm2, %xmm1
979 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm2
980 ; AVX1-NEXT: vpaddw %xmm2, %xmm0, %xmm0
981 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
984 ; AVX2-LABEL: test_arg_v16i16:
986 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
987 ; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm0
990 ; AVX512-LABEL: test_arg_v16i16:
992 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
993 ; AVX512-NEXT: vpaddw %ymm1, %ymm0, %ymm0
995 %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1
996 %2 = add <16 x i16> %arg, %1
1000 define <32 x i8> @test_arg_v32i8(<32 x i8> %arg, <32 x i8>* %src) {
1001 ; SSE2-LABEL: test_arg_v32i8:
1003 ; SSE2-NEXT: paddb (%rdi), %xmm0
1004 ; SSE2-NEXT: paddb 16(%rdi), %xmm1
1007 ; SSE41-LABEL: test_arg_v32i8:
1009 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm2
1010 ; SSE41-NEXT: movntdqa (%rdi), %xmm3
1011 ; SSE41-NEXT: paddb %xmm3, %xmm0
1012 ; SSE41-NEXT: paddb %xmm2, %xmm1
1015 ; AVX1-LABEL: test_arg_v32i8:
1017 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
1018 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1019 ; AVX1-NEXT: vpaddb %xmm1, %xmm2, %xmm1
1020 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm2
1021 ; AVX1-NEXT: vpaddb %xmm2, %xmm0, %xmm0
1022 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1025 ; AVX2-LABEL: test_arg_v32i8:
1027 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm1
1028 ; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm0
1031 ; AVX512-LABEL: test_arg_v32i8:
1033 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm1
1034 ; AVX512-NEXT: vpaddb %ymm1, %ymm0, %ymm0
1036 %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1
1037 %2 = add <32 x i8> %arg, %1
1041 ; And now ZMM versions.
1043 define <16 x float> @test_arg_v16f32(<16 x float> %arg, <16 x float>* %src) {
1044 ; SSE2-LABEL: test_arg_v16f32:
1046 ; SSE2-NEXT: addps (%rdi), %xmm0
1047 ; SSE2-NEXT: addps 16(%rdi), %xmm1
1048 ; SSE2-NEXT: addps 32(%rdi), %xmm2
1049 ; SSE2-NEXT: addps 48(%rdi), %xmm3
1052 ; SSE41-LABEL: test_arg_v16f32:
1054 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1055 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1056 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1057 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1058 ; SSE41-NEXT: addps %xmm7, %xmm0
1059 ; SSE41-NEXT: addps %xmm6, %xmm1
1060 ; SSE41-NEXT: addps %xmm5, %xmm2
1061 ; SSE41-NEXT: addps %xmm4, %xmm3
1064 ; AVX1-LABEL: test_arg_v16f32:
1066 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1067 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3
1068 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1069 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1070 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm4
1071 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1072 ; AVX1-NEXT: vaddps %ymm3, %ymm0, %ymm0
1073 ; AVX1-NEXT: vaddps %ymm2, %ymm1, %ymm1
1076 ; AVX2-LABEL: test_arg_v16f32:
1078 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1079 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1080 ; AVX2-NEXT: vaddps %ymm3, %ymm0, %ymm0
1081 ; AVX2-NEXT: vaddps %ymm2, %ymm1, %ymm1
1084 ; AVX512-LABEL: test_arg_v16f32:
1086 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1087 ; AVX512-NEXT: vaddps %zmm1, %zmm0, %zmm0
1089 %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1
1090 %2 = fadd <16 x float> %arg, %1
1094 define <16 x i32> @test_arg_v16i32(<16 x i32> %arg, <16 x i32>* %src) {
1095 ; SSE2-LABEL: test_arg_v16i32:
1097 ; SSE2-NEXT: paddd (%rdi), %xmm0
1098 ; SSE2-NEXT: paddd 16(%rdi), %xmm1
1099 ; SSE2-NEXT: paddd 32(%rdi), %xmm2
1100 ; SSE2-NEXT: paddd 48(%rdi), %xmm3
1103 ; SSE41-LABEL: test_arg_v16i32:
1105 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1106 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1107 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1108 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1109 ; SSE41-NEXT: paddd %xmm7, %xmm0
1110 ; SSE41-NEXT: paddd %xmm6, %xmm1
1111 ; SSE41-NEXT: paddd %xmm5, %xmm2
1112 ; SSE41-NEXT: paddd %xmm4, %xmm3
1115 ; AVX1-LABEL: test_arg_v16i32:
1117 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
1118 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1119 ; AVX1-NEXT: vpaddd %xmm2, %xmm3, %xmm2
1120 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1121 ; AVX1-NEXT: vpaddd %xmm3, %xmm0, %xmm0
1122 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1123 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1124 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1125 ; AVX1-NEXT: vpaddd %xmm2, %xmm3, %xmm2
1126 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm3
1127 ; AVX1-NEXT: vpaddd %xmm3, %xmm1, %xmm1
1128 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1131 ; AVX2-LABEL: test_arg_v16i32:
1133 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1134 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1135 ; AVX2-NEXT: vpaddd %ymm3, %ymm0, %ymm0
1136 ; AVX2-NEXT: vpaddd %ymm2, %ymm1, %ymm1
1139 ; AVX512-LABEL: test_arg_v16i32:
1141 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1142 ; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
1144 %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1
1145 %2 = add <16 x i32> %arg, %1
1149 define <8 x double> @test_arg_v8f64(<8 x double> %arg, <8 x double>* %src) {
1150 ; SSE2-LABEL: test_arg_v8f64:
1152 ; SSE2-NEXT: addpd (%rdi), %xmm0
1153 ; SSE2-NEXT: addpd 16(%rdi), %xmm1
1154 ; SSE2-NEXT: addpd 32(%rdi), %xmm2
1155 ; SSE2-NEXT: addpd 48(%rdi), %xmm3
1158 ; SSE41-LABEL: test_arg_v8f64:
1160 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1161 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1162 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1163 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1164 ; SSE41-NEXT: addpd %xmm7, %xmm0
1165 ; SSE41-NEXT: addpd %xmm6, %xmm1
1166 ; SSE41-NEXT: addpd %xmm5, %xmm2
1167 ; SSE41-NEXT: addpd %xmm4, %xmm3
1170 ; AVX1-LABEL: test_arg_v8f64:
1172 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1173 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3
1174 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1175 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1176 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm4
1177 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1178 ; AVX1-NEXT: vaddpd %ymm3, %ymm0, %ymm0
1179 ; AVX1-NEXT: vaddpd %ymm2, %ymm1, %ymm1
1182 ; AVX2-LABEL: test_arg_v8f64:
1184 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1185 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1186 ; AVX2-NEXT: vaddpd %ymm3, %ymm0, %ymm0
1187 ; AVX2-NEXT: vaddpd %ymm2, %ymm1, %ymm1
1190 ; AVX512-LABEL: test_arg_v8f64:
1192 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1193 ; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm0
1195 %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1
1196 %2 = fadd <8 x double> %arg, %1
1200 define <8 x i64> @test_arg_v8i64(<8 x i64> %arg, <8 x i64>* %src) {
1201 ; SSE2-LABEL: test_arg_v8i64:
1203 ; SSE2-NEXT: paddq (%rdi), %xmm0
1204 ; SSE2-NEXT: paddq 16(%rdi), %xmm1
1205 ; SSE2-NEXT: paddq 32(%rdi), %xmm2
1206 ; SSE2-NEXT: paddq 48(%rdi), %xmm3
1209 ; SSE41-LABEL: test_arg_v8i64:
1211 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1212 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1213 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1214 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1215 ; SSE41-NEXT: paddq %xmm7, %xmm0
1216 ; SSE41-NEXT: paddq %xmm6, %xmm1
1217 ; SSE41-NEXT: paddq %xmm5, %xmm2
1218 ; SSE41-NEXT: paddq %xmm4, %xmm3
1221 ; AVX1-LABEL: test_arg_v8i64:
1223 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
1224 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1225 ; AVX1-NEXT: vpaddq %xmm2, %xmm3, %xmm2
1226 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1227 ; AVX1-NEXT: vpaddq %xmm3, %xmm0, %xmm0
1228 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1229 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1230 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1231 ; AVX1-NEXT: vpaddq %xmm2, %xmm3, %xmm2
1232 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm3
1233 ; AVX1-NEXT: vpaddq %xmm3, %xmm1, %xmm1
1234 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1237 ; AVX2-LABEL: test_arg_v8i64:
1239 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1240 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1241 ; AVX2-NEXT: vpaddq %ymm3, %ymm0, %ymm0
1242 ; AVX2-NEXT: vpaddq %ymm2, %ymm1, %ymm1
1245 ; AVX512-LABEL: test_arg_v8i64:
1247 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1248 ; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
1250 %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1
1251 %2 = add <8 x i64> %arg, %1
1255 define <32 x i16> @test_arg_v32i16(<32 x i16> %arg, <32 x i16>* %src) {
1256 ; SSE2-LABEL: test_arg_v32i16:
1258 ; SSE2-NEXT: paddw (%rdi), %xmm0
1259 ; SSE2-NEXT: paddw 16(%rdi), %xmm1
1260 ; SSE2-NEXT: paddw 32(%rdi), %xmm2
1261 ; SSE2-NEXT: paddw 48(%rdi), %xmm3
1264 ; SSE41-LABEL: test_arg_v32i16:
1266 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1267 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1268 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1269 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1270 ; SSE41-NEXT: paddw %xmm7, %xmm0
1271 ; SSE41-NEXT: paddw %xmm6, %xmm1
1272 ; SSE41-NEXT: paddw %xmm5, %xmm2
1273 ; SSE41-NEXT: paddw %xmm4, %xmm3
1276 ; AVX1-LABEL: test_arg_v32i16:
1278 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
1279 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1280 ; AVX1-NEXT: vpaddw %xmm2, %xmm3, %xmm2
1281 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1282 ; AVX1-NEXT: vpaddw %xmm3, %xmm0, %xmm0
1283 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1284 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1285 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1286 ; AVX1-NEXT: vpaddw %xmm2, %xmm3, %xmm2
1287 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm3
1288 ; AVX1-NEXT: vpaddw %xmm3, %xmm1, %xmm1
1289 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1292 ; AVX2-LABEL: test_arg_v32i16:
1294 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1295 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1296 ; AVX2-NEXT: vpaddw %ymm3, %ymm0, %ymm0
1297 ; AVX2-NEXT: vpaddw %ymm2, %ymm1, %ymm1
1300 ; AVX512F-LABEL: test_arg_v32i16:
1302 ; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm2
1303 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm3
1304 ; AVX512F-NEXT: vpaddw %ymm3, %ymm0, %ymm0
1305 ; AVX512F-NEXT: vpaddw %ymm2, %ymm1, %ymm1
1306 ; AVX512F-NEXT: retq
1308 ; AVX512BW-LABEL: test_arg_v32i16:
1309 ; AVX512BW: # %bb.0:
1310 ; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm1
1311 ; AVX512BW-NEXT: vpaddw %zmm1, %zmm0, %zmm0
1312 ; AVX512BW-NEXT: retq
1314 ; AVX512VL-LABEL: test_arg_v32i16:
1315 ; AVX512VL: # %bb.0:
1316 ; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm2
1317 ; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm3
1318 ; AVX512VL-NEXT: vpaddw %ymm3, %ymm0, %ymm0
1319 ; AVX512VL-NEXT: vpaddw %ymm2, %ymm1, %ymm1
1320 ; AVX512VL-NEXT: retq
1321 %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1
1322 %2 = add <32 x i16> %arg, %1
1326 define <64 x i8> @test_arg_v64i8(<64 x i8> %arg, <64 x i8>* %src) {
1327 ; SSE2-LABEL: test_arg_v64i8:
1329 ; SSE2-NEXT: paddb (%rdi), %xmm0
1330 ; SSE2-NEXT: paddb 16(%rdi), %xmm1
1331 ; SSE2-NEXT: paddb 32(%rdi), %xmm2
1332 ; SSE2-NEXT: paddb 48(%rdi), %xmm3
1335 ; SSE41-LABEL: test_arg_v64i8:
1337 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1338 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm5
1339 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1340 ; SSE41-NEXT: movntdqa (%rdi), %xmm7
1341 ; SSE41-NEXT: paddb %xmm7, %xmm0
1342 ; SSE41-NEXT: paddb %xmm6, %xmm1
1343 ; SSE41-NEXT: paddb %xmm5, %xmm2
1344 ; SSE41-NEXT: paddb %xmm4, %xmm3
1347 ; AVX1-LABEL: test_arg_v64i8:
1349 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2
1350 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1351 ; AVX1-NEXT: vpaddb %xmm2, %xmm3, %xmm2
1352 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1353 ; AVX1-NEXT: vpaddb %xmm3, %xmm0, %xmm0
1354 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1355 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1356 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1357 ; AVX1-NEXT: vpaddb %xmm2, %xmm3, %xmm2
1358 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm3
1359 ; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm1
1360 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1363 ; AVX2-LABEL: test_arg_v64i8:
1365 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2
1366 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1367 ; AVX2-NEXT: vpaddb %ymm3, %ymm0, %ymm0
1368 ; AVX2-NEXT: vpaddb %ymm2, %ymm1, %ymm1
1371 ; AVX512F-LABEL: test_arg_v64i8:
1373 ; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm2
1374 ; AVX512F-NEXT: vmovntdqa (%rdi), %ymm3
1375 ; AVX512F-NEXT: vpaddb %ymm3, %ymm0, %ymm0
1376 ; AVX512F-NEXT: vpaddb %ymm2, %ymm1, %ymm1
1377 ; AVX512F-NEXT: retq
1379 ; AVX512BW-LABEL: test_arg_v64i8:
1380 ; AVX512BW: # %bb.0:
1381 ; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm1
1382 ; AVX512BW-NEXT: vpaddb %zmm1, %zmm0, %zmm0
1383 ; AVX512BW-NEXT: retq
1385 ; AVX512VL-LABEL: test_arg_v64i8:
1386 ; AVX512VL: # %bb.0:
1387 ; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm2
1388 ; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm3
1389 ; AVX512VL-NEXT: vpaddb %ymm3, %ymm0, %ymm0
1390 ; AVX512VL-NEXT: vpaddb %ymm2, %ymm1, %ymm1
1391 ; AVX512VL-NEXT: retq
1392 %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1
1393 %2 = add <64 x i8> %arg, %1
1398 ; Unaligned non-temporal loads (not supported)
1400 define <4 x float> @test_unaligned_v4f32(<4 x float>* %src) {
1401 ; SSE-LABEL: test_unaligned_v4f32:
1403 ; SSE-NEXT: movups (%rdi), %xmm0
1406 ; AVX-LABEL: test_unaligned_v4f32:
1408 ; AVX-NEXT: vmovups (%rdi), %xmm0
1411 ; AVX512-LABEL: test_unaligned_v4f32:
1413 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1415 %1 = load <4 x float>, <4 x float>* %src, align 1, !nontemporal !1
1419 define <4 x i32> @test_unaligned_v4i32(<4 x i32>* %src) {
1420 ; SSE-LABEL: test_unaligned_v4i32:
1422 ; SSE-NEXT: movups (%rdi), %xmm0
1425 ; AVX-LABEL: test_unaligned_v4i32:
1427 ; AVX-NEXT: vmovups (%rdi), %xmm0
1430 ; AVX512-LABEL: test_unaligned_v4i32:
1432 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1434 %1 = load <4 x i32>, <4 x i32>* %src, align 1, !nontemporal !1
1438 define <2 x double> @test_unaligned_v2f64(<2 x double>* %src) {
1439 ; SSE-LABEL: test_unaligned_v2f64:
1441 ; SSE-NEXT: movups (%rdi), %xmm0
1444 ; AVX-LABEL: test_unaligned_v2f64:
1446 ; AVX-NEXT: vmovups (%rdi), %xmm0
1449 ; AVX512-LABEL: test_unaligned_v2f64:
1451 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1453 %1 = load <2 x double>, <2 x double>* %src, align 1, !nontemporal !1
1457 define <2 x i64> @test_unaligned_v2i64(<2 x i64>* %src) {
1458 ; SSE-LABEL: test_unaligned_v2i64:
1460 ; SSE-NEXT: movups (%rdi), %xmm0
1463 ; AVX-LABEL: test_unaligned_v2i64:
1465 ; AVX-NEXT: vmovups (%rdi), %xmm0
1468 ; AVX512-LABEL: test_unaligned_v2i64:
1470 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1472 %1 = load <2 x i64>, <2 x i64>* %src, align 1, !nontemporal !1
1476 define <8 x i16> @test_unaligned_v8i16(<8 x i16>* %src) {
1477 ; SSE-LABEL: test_unaligned_v8i16:
1479 ; SSE-NEXT: movups (%rdi), %xmm0
1482 ; AVX-LABEL: test_unaligned_v8i16:
1484 ; AVX-NEXT: vmovups (%rdi), %xmm0
1487 ; AVX512-LABEL: test_unaligned_v8i16:
1489 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1491 %1 = load <8 x i16>, <8 x i16>* %src, align 1, !nontemporal !1
1495 define <16 x i8> @test_unaligned_v16i8(<16 x i8>* %src) {
1496 ; SSE-LABEL: test_unaligned_v16i8:
1498 ; SSE-NEXT: movups (%rdi), %xmm0
1501 ; AVX-LABEL: test_unaligned_v16i8:
1503 ; AVX-NEXT: vmovups (%rdi), %xmm0
1506 ; AVX512-LABEL: test_unaligned_v16i8:
1508 ; AVX512-NEXT: vmovups (%rdi), %xmm0
1510 %1 = load <16 x i8>, <16 x i8>* %src, align 1, !nontemporal !1
1514 ; And now YMM versions.
1516 define <8 x float> @test_unaligned_v8f32(<8 x float>* %src) {
1517 ; SSE-LABEL: test_unaligned_v8f32:
1519 ; SSE-NEXT: movups (%rdi), %xmm0
1520 ; SSE-NEXT: movups 16(%rdi), %xmm1
1523 ; AVX-LABEL: test_unaligned_v8f32:
1525 ; AVX-NEXT: vmovups (%rdi), %ymm0
1528 ; AVX512-LABEL: test_unaligned_v8f32:
1530 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1532 %1 = load <8 x float>, <8 x float>* %src, align 1, !nontemporal !1
1536 define <8 x i32> @test_unaligned_v8i32(<8 x i32>* %src) {
1537 ; SSE-LABEL: test_unaligned_v8i32:
1539 ; SSE-NEXT: movups (%rdi), %xmm0
1540 ; SSE-NEXT: movups 16(%rdi), %xmm1
1543 ; AVX-LABEL: test_unaligned_v8i32:
1545 ; AVX-NEXT: vmovups (%rdi), %ymm0
1548 ; AVX512-LABEL: test_unaligned_v8i32:
1550 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1552 %1 = load <8 x i32>, <8 x i32>* %src, align 1, !nontemporal !1
1556 define <4 x double> @test_unaligned_v4f64(<4 x double>* %src) {
1557 ; SSE-LABEL: test_unaligned_v4f64:
1559 ; SSE-NEXT: movups (%rdi), %xmm0
1560 ; SSE-NEXT: movups 16(%rdi), %xmm1
1563 ; AVX-LABEL: test_unaligned_v4f64:
1565 ; AVX-NEXT: vmovups (%rdi), %ymm0
1568 ; AVX512-LABEL: test_unaligned_v4f64:
1570 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1572 %1 = load <4 x double>, <4 x double>* %src, align 1, !nontemporal !1
1576 define <4 x i64> @test_unaligned_v4i64(<4 x i64>* %src) {
1577 ; SSE-LABEL: test_unaligned_v4i64:
1579 ; SSE-NEXT: movups (%rdi), %xmm0
1580 ; SSE-NEXT: movups 16(%rdi), %xmm1
1583 ; AVX-LABEL: test_unaligned_v4i64:
1585 ; AVX-NEXT: vmovups (%rdi), %ymm0
1588 ; AVX512-LABEL: test_unaligned_v4i64:
1590 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1592 %1 = load <4 x i64>, <4 x i64>* %src, align 1, !nontemporal !1
1596 define <16 x i16> @test_unaligned_v16i16(<16 x i16>* %src) {
1597 ; SSE-LABEL: test_unaligned_v16i16:
1599 ; SSE-NEXT: movups (%rdi), %xmm0
1600 ; SSE-NEXT: movups 16(%rdi), %xmm1
1603 ; AVX-LABEL: test_unaligned_v16i16:
1605 ; AVX-NEXT: vmovups (%rdi), %ymm0
1608 ; AVX512-LABEL: test_unaligned_v16i16:
1610 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1612 %1 = load <16 x i16>, <16 x i16>* %src, align 1, !nontemporal !1
1616 define <32 x i8> @test_unaligned_v32i8(<32 x i8>* %src) {
1617 ; SSE-LABEL: test_unaligned_v32i8:
1619 ; SSE-NEXT: movups (%rdi), %xmm0
1620 ; SSE-NEXT: movups 16(%rdi), %xmm1
1623 ; AVX-LABEL: test_unaligned_v32i8:
1625 ; AVX-NEXT: vmovups (%rdi), %ymm0
1628 ; AVX512-LABEL: test_unaligned_v32i8:
1630 ; AVX512-NEXT: vmovups (%rdi), %ymm0
1632 %1 = load <32 x i8>, <32 x i8>* %src, align 1, !nontemporal !1
1636 ; And now ZMM versions.
1638 define <16 x float> @test_unaligned_v16f32(<16 x float>* %src) {
1639 ; SSE-LABEL: test_unaligned_v16f32:
1641 ; SSE-NEXT: movups (%rdi), %xmm0
1642 ; SSE-NEXT: movups 16(%rdi), %xmm1
1643 ; SSE-NEXT: movups 32(%rdi), %xmm2
1644 ; SSE-NEXT: movups 48(%rdi), %xmm3
1647 ; AVX-LABEL: test_unaligned_v16f32:
1649 ; AVX-NEXT: vmovups (%rdi), %ymm0
1650 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1653 ; AVX512-LABEL: test_unaligned_v16f32:
1655 ; AVX512-NEXT: vmovups (%rdi), %zmm0
1657 %1 = load <16 x float>, <16 x float>* %src, align 1, !nontemporal !1
1661 define <16 x i32> @test_unaligned_v16i32(<16 x i32>* %src) {
1662 ; SSE-LABEL: test_unaligned_v16i32:
1664 ; SSE-NEXT: movups (%rdi), %xmm0
1665 ; SSE-NEXT: movups 16(%rdi), %xmm1
1666 ; SSE-NEXT: movups 32(%rdi), %xmm2
1667 ; SSE-NEXT: movups 48(%rdi), %xmm3
1670 ; AVX-LABEL: test_unaligned_v16i32:
1672 ; AVX-NEXT: vmovups (%rdi), %ymm0
1673 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1676 ; AVX512-LABEL: test_unaligned_v16i32:
1678 ; AVX512-NEXT: vmovups (%rdi), %zmm0
1680 %1 = load <16 x i32>, <16 x i32>* %src, align 1, !nontemporal !1
1684 define <8 x double> @test_unaligned_v8f64(<8 x double>* %src) {
1685 ; SSE-LABEL: test_unaligned_v8f64:
1687 ; SSE-NEXT: movups (%rdi), %xmm0
1688 ; SSE-NEXT: movups 16(%rdi), %xmm1
1689 ; SSE-NEXT: movups 32(%rdi), %xmm2
1690 ; SSE-NEXT: movups 48(%rdi), %xmm3
1693 ; AVX-LABEL: test_unaligned_v8f64:
1695 ; AVX-NEXT: vmovups (%rdi), %ymm0
1696 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1699 ; AVX512-LABEL: test_unaligned_v8f64:
1701 ; AVX512-NEXT: vmovups (%rdi), %zmm0
1703 %1 = load <8 x double>, <8 x double>* %src, align 1, !nontemporal !1
1707 define <8 x i64> @test_unaligned_v8i64(<8 x i64>* %src) {
1708 ; SSE-LABEL: test_unaligned_v8i64:
1710 ; SSE-NEXT: movups (%rdi), %xmm0
1711 ; SSE-NEXT: movups 16(%rdi), %xmm1
1712 ; SSE-NEXT: movups 32(%rdi), %xmm2
1713 ; SSE-NEXT: movups 48(%rdi), %xmm3
1716 ; AVX-LABEL: test_unaligned_v8i64:
1718 ; AVX-NEXT: vmovups (%rdi), %ymm0
1719 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1722 ; AVX512-LABEL: test_unaligned_v8i64:
1724 ; AVX512-NEXT: vmovups (%rdi), %zmm0
1726 %1 = load <8 x i64>, <8 x i64>* %src, align 1, !nontemporal !1
1730 define <32 x i16> @test_unaligned_v32i16(<32 x i16>* %src) {
1731 ; SSE-LABEL: test_unaligned_v32i16:
1733 ; SSE-NEXT: movups (%rdi), %xmm0
1734 ; SSE-NEXT: movups 16(%rdi), %xmm1
1735 ; SSE-NEXT: movups 32(%rdi), %xmm2
1736 ; SSE-NEXT: movups 48(%rdi), %xmm3
1739 ; AVX-LABEL: test_unaligned_v32i16:
1741 ; AVX-NEXT: vmovups (%rdi), %ymm0
1742 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1745 ; AVX512F-LABEL: test_unaligned_v32i16:
1747 ; AVX512F-NEXT: vmovups (%rdi), %ymm0
1748 ; AVX512F-NEXT: vmovups 32(%rdi), %ymm1
1749 ; AVX512F-NEXT: retq
1751 ; AVX512BW-LABEL: test_unaligned_v32i16:
1752 ; AVX512BW: # %bb.0:
1753 ; AVX512BW-NEXT: vmovups (%rdi), %zmm0
1754 ; AVX512BW-NEXT: retq
1756 ; AVX512VL-LABEL: test_unaligned_v32i16:
1757 ; AVX512VL: # %bb.0:
1758 ; AVX512VL-NEXT: vmovups (%rdi), %ymm0
1759 ; AVX512VL-NEXT: vmovups 32(%rdi), %ymm1
1760 ; AVX512VL-NEXT: retq
1761 %1 = load <32 x i16>, <32 x i16>* %src, align 1, !nontemporal !1
1765 define <64 x i8> @test_unaligned_v64i8(<64 x i8>* %src) {
1766 ; SSE-LABEL: test_unaligned_v64i8:
1768 ; SSE-NEXT: movups (%rdi), %xmm0
1769 ; SSE-NEXT: movups 16(%rdi), %xmm1
1770 ; SSE-NEXT: movups 32(%rdi), %xmm2
1771 ; SSE-NEXT: movups 48(%rdi), %xmm3
1774 ; AVX-LABEL: test_unaligned_v64i8:
1776 ; AVX-NEXT: vmovups (%rdi), %ymm0
1777 ; AVX-NEXT: vmovups 32(%rdi), %ymm1
1780 ; AVX512F-LABEL: test_unaligned_v64i8:
1782 ; AVX512F-NEXT: vmovups (%rdi), %ymm0
1783 ; AVX512F-NEXT: vmovups 32(%rdi), %ymm1
1784 ; AVX512F-NEXT: retq
1786 ; AVX512BW-LABEL: test_unaligned_v64i8:
1787 ; AVX512BW: # %bb.0:
1788 ; AVX512BW-NEXT: vmovups (%rdi), %zmm0
1789 ; AVX512BW-NEXT: retq
1791 ; AVX512VL-LABEL: test_unaligned_v64i8:
1792 ; AVX512VL: # %bb.0:
1793 ; AVX512VL-NEXT: vmovups (%rdi), %ymm0
1794 ; AVX512VL-NEXT: vmovups 32(%rdi), %ymm1
1795 ; AVX512VL-NEXT: retq
1796 %1 = load <64 x i8>, <64 x i8>* %src, align 1, !nontemporal !1
1800 define <16 x i32> @test_masked_v16i32(i8 * %addr, <16 x i32> %old, <16 x i32> %mask1) {
1801 ; SSE2-LABEL: test_masked_v16i32:
1803 ; SSE2-NEXT: pxor %xmm8, %xmm8
1804 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm7
1805 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm6
1806 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm5
1807 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm4
1808 ; SSE2-NEXT: pand %xmm4, %xmm0
1809 ; SSE2-NEXT: pandn (%rdi), %xmm4
1810 ; SSE2-NEXT: por %xmm4, %xmm0
1811 ; SSE2-NEXT: pand %xmm5, %xmm1
1812 ; SSE2-NEXT: pandn 16(%rdi), %xmm5
1813 ; SSE2-NEXT: por %xmm5, %xmm1
1814 ; SSE2-NEXT: pand %xmm6, %xmm2
1815 ; SSE2-NEXT: pandn 32(%rdi), %xmm6
1816 ; SSE2-NEXT: por %xmm6, %xmm2
1817 ; SSE2-NEXT: pand %xmm7, %xmm3
1818 ; SSE2-NEXT: pandn 48(%rdi), %xmm7
1819 ; SSE2-NEXT: por %xmm7, %xmm3
1822 ; SSE41-LABEL: test_masked_v16i32:
1824 ; SSE41-NEXT: movdqa %xmm7, %xmm9
1825 ; SSE41-NEXT: movdqa %xmm6, %xmm10
1826 ; SSE41-NEXT: movdqa %xmm5, %xmm11
1827 ; SSE41-NEXT: movdqa %xmm0, %xmm8
1828 ; SSE41-NEXT: pxor %xmm0, %xmm0
1829 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm9
1830 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm10
1831 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm11
1832 ; SSE41-NEXT: pcmpeqd %xmm4, %xmm0
1833 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm4
1834 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm7
1835 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm6
1836 ; SSE41-NEXT: movntdqa (%rdi), %xmm5
1837 ; SSE41-NEXT: blendvps %xmm0, %xmm8, %xmm5
1838 ; SSE41-NEXT: movdqa %xmm11, %xmm0
1839 ; SSE41-NEXT: blendvps %xmm0, %xmm1, %xmm6
1840 ; SSE41-NEXT: movdqa %xmm10, %xmm0
1841 ; SSE41-NEXT: blendvps %xmm0, %xmm2, %xmm7
1842 ; SSE41-NEXT: movdqa %xmm9, %xmm0
1843 ; SSE41-NEXT: blendvps %xmm0, %xmm3, %xmm4
1844 ; SSE41-NEXT: movaps %xmm5, %xmm0
1845 ; SSE41-NEXT: movaps %xmm6, %xmm1
1846 ; SSE41-NEXT: movaps %xmm7, %xmm2
1847 ; SSE41-NEXT: movaps %xmm4, %xmm3
1850 ; AVX1-LABEL: test_masked_v16i32:
1852 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
1853 ; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5
1854 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm4, %xmm4
1855 ; AVX1-NEXT: vpcmpeqd %xmm6, %xmm6, %xmm6
1856 ; AVX1-NEXT: vpxor %xmm6, %xmm4, %xmm4
1857 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm3, %xmm3
1858 ; AVX1-NEXT: vpxor %xmm6, %xmm3, %xmm3
1859 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1860 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
1861 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm4, %xmm4
1862 ; AVX1-NEXT: vpxor %xmm6, %xmm4, %xmm4
1863 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm2, %xmm2
1864 ; AVX1-NEXT: vpxor %xmm6, %xmm2, %xmm2
1865 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm2, %ymm2
1866 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm4
1867 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm5
1868 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm4, %ymm4
1869 ; AVX1-NEXT: vblendvps %ymm3, %ymm4, %ymm1, %ymm1
1870 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm3
1871 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm4
1872 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1873 ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
1876 ; AVX2-LABEL: test_masked_v16i32:
1878 ; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4
1879 ; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm3
1880 ; AVX2-NEXT: vpcmpeqd %ymm4, %ymm2, %ymm2
1881 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm4
1882 ; AVX2-NEXT: vblendvps %ymm3, %ymm1, %ymm4, %ymm1
1883 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm3
1884 ; AVX2-NEXT: vblendvps %ymm2, %ymm0, %ymm3, %ymm0
1887 ; AVX512-LABEL: test_masked_v16i32:
1889 ; AVX512-NEXT: vptestmd %zmm1, %zmm1, %k1
1890 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm1
1891 ; AVX512-NEXT: vmovdqa32 %zmm1, %zmm0 {%k1}
1893 %mask = icmp ne <16 x i32> %mask1, zeroinitializer
1894 %vaddr = bitcast i8* %addr to <16 x i32>*
1895 %r = load <16 x i32>, <16 x i32>* %vaddr, align 64, !nontemporal !1
1896 %res = select <16 x i1> %mask, <16 x i32> %r, <16 x i32> %old
1900 ; Reduced from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10895
1901 define i32 @PR39256(float* %ptr) {
1902 ; SSE-LABEL: PR39256:
1903 ; SSE: # %bb.0: # %entry
1904 ; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1905 ; SSE-NEXT: ucomiss {{.*}}(%rip), %xmm0
1906 ; SSE-NEXT: setb (%rax)
1907 ; SSE-NEXT: movl $-2147483648, %eax # imm = 0x80000000
1910 ; AVX-LABEL: PR39256:
1911 ; AVX: # %bb.0: # %entry
1912 ; AVX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1913 ; AVX-NEXT: vucomiss {{.*}}(%rip), %xmm0
1914 ; AVX-NEXT: setb (%rax)
1915 ; AVX-NEXT: movl $-2147483648, %eax # imm = 0x80000000
1918 ; AVX512-LABEL: PR39256:
1919 ; AVX512: # %bb.0: # %entry
1920 ; AVX512-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1921 ; AVX512-NEXT: vucomiss {{.*}}(%rip), %xmm0
1922 ; AVX512-NEXT: setb (%rax)
1923 ; AVX512-NEXT: movl $-2147483648, %eax # imm = 0x80000000
1926 %l = load float, float* %ptr, !nontemporal !1
1927 %C = fcmp ult float %l, 0x36A0000000000000
1928 store i1 %C, i1* undef