1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse2 -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,SSE,SSE2
3 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse4a -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,SSE,SSE4A
4 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse4.1 -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,SSE,SSE41
5 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX,AVX1
6 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx2 -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX,AVX2
7 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512vl -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX512
8 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512f -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX512
9 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512bw -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX512
15 define void @test_nti32(ptr nocapture %ptr, i32 %X) {
16 ; ALL-LABEL: test_nti32:
17 ; ALL: # %bb.0: # %entry
18 ; ALL-NEXT: movntil %esi, (%rdi)
21 store i32 %X, ptr %ptr, align 4, !nontemporal !1
25 define void @test_nti64(ptr nocapture %ptr, i64 %X) {
26 ; ALL-LABEL: test_nti64:
27 ; ALL: # %bb.0: # %entry
28 ; ALL-NEXT: movntiq %rsi, (%rdi)
31 store i64 %X, ptr %ptr, align 8, !nontemporal !1
35 define void @test_ntfloat(ptr nocapture %ptr, float %X) {
36 ; SSE2-LABEL: test_ntfloat:
37 ; SSE2: # %bb.0: # %entry
38 ; SSE2-NEXT: movss %xmm0, (%rdi)
41 ; SSE4A-LABEL: test_ntfloat:
42 ; SSE4A: # %bb.0: # %entry
43 ; SSE4A-NEXT: movntss %xmm0, (%rdi)
46 ; SSE41-LABEL: test_ntfloat:
47 ; SSE41: # %bb.0: # %entry
48 ; SSE41-NEXT: movss %xmm0, (%rdi)
51 ; AVX-LABEL: test_ntfloat:
52 ; AVX: # %bb.0: # %entry
53 ; AVX-NEXT: vmovss %xmm0, (%rdi)
56 ; AVX512-LABEL: test_ntfloat:
57 ; AVX512: # %bb.0: # %entry
58 ; AVX512-NEXT: vmovss %xmm0, (%rdi)
61 store float %X, ptr %ptr, align 4, !nontemporal !1
65 define void @test_ntdouble(ptr nocapture %ptr, double %X) {
66 ; SSE2-LABEL: test_ntdouble:
67 ; SSE2: # %bb.0: # %entry
68 ; SSE2-NEXT: movsd %xmm0, (%rdi)
71 ; SSE4A-LABEL: test_ntdouble:
72 ; SSE4A: # %bb.0: # %entry
73 ; SSE4A-NEXT: movntsd %xmm0, (%rdi)
76 ; SSE41-LABEL: test_ntdouble:
77 ; SSE41: # %bb.0: # %entry
78 ; SSE41-NEXT: movsd %xmm0, (%rdi)
81 ; AVX-LABEL: test_ntdouble:
82 ; AVX: # %bb.0: # %entry
83 ; AVX-NEXT: vmovsd %xmm0, (%rdi)
86 ; AVX512-LABEL: test_ntdouble:
87 ; AVX512: # %bb.0: # %entry
88 ; AVX512-NEXT: vmovsd %xmm0, (%rdi)
91 store double %X, ptr %ptr, align 8, !nontemporal !1
99 define void @test_mmx(ptr nocapture %a0, ptr nocapture %a1) {
100 ; ALL-LABEL: test_mmx:
101 ; ALL: # %bb.0: # %entry
102 ; ALL-NEXT: movq (%rdi), %mm0
103 ; ALL-NEXT: psrlq $3, %mm0
104 ; ALL-NEXT: movntq %mm0, (%rsi)
107 %0 = load x86_mmx, ptr %a0
108 %1 = call x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx %0, i32 3)
109 store x86_mmx %1, ptr %a1, align 8, !nontemporal !1
112 declare x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx, i32) nounwind readnone
115 ; 128-bit Vector Stores
118 define void @test_nt4xfloat(ptr nocapture %ptr, <4 x float> %X) {
119 ; SSE-LABEL: test_nt4xfloat:
120 ; SSE: # %bb.0: # %entry
121 ; SSE-NEXT: movntps %xmm0, (%rdi)
124 ; AVX-LABEL: test_nt4xfloat:
125 ; AVX: # %bb.0: # %entry
126 ; AVX-NEXT: vmovntps %xmm0, (%rdi)
129 ; AVX512-LABEL: test_nt4xfloat:
130 ; AVX512: # %bb.0: # %entry
131 ; AVX512-NEXT: vmovntps %xmm0, (%rdi)
134 store <4 x float> %X, ptr %ptr, align 16, !nontemporal !1
138 define void @test_nt2xdouble(ptr nocapture %ptr, <2 x double> %X) {
139 ; SSE-LABEL: test_nt2xdouble:
140 ; SSE: # %bb.0: # %entry
141 ; SSE-NEXT: movntpd %xmm0, (%rdi)
144 ; AVX-LABEL: test_nt2xdouble:
145 ; AVX: # %bb.0: # %entry
146 ; AVX-NEXT: vmovntpd %xmm0, (%rdi)
149 ; AVX512-LABEL: test_nt2xdouble:
150 ; AVX512: # %bb.0: # %entry
151 ; AVX512-NEXT: vmovntpd %xmm0, (%rdi)
154 store <2 x double> %X, ptr %ptr, align 16, !nontemporal !1
158 define void @test_nt16xi8(ptr nocapture %ptr, <16 x i8> %X) {
159 ; SSE-LABEL: test_nt16xi8:
160 ; SSE: # %bb.0: # %entry
161 ; SSE-NEXT: movntdq %xmm0, (%rdi)
164 ; AVX-LABEL: test_nt16xi8:
165 ; AVX: # %bb.0: # %entry
166 ; AVX-NEXT: vmovntdq %xmm0, (%rdi)
169 ; AVX512-LABEL: test_nt16xi8:
170 ; AVX512: # %bb.0: # %entry
171 ; AVX512-NEXT: vmovntdq %xmm0, (%rdi)
174 store <16 x i8> %X, ptr %ptr, align 16, !nontemporal !1
178 define void @test_nt8xi16(ptr nocapture %ptr, <8 x i16> %X) {
179 ; SSE-LABEL: test_nt8xi16:
180 ; SSE: # %bb.0: # %entry
181 ; SSE-NEXT: movntdq %xmm0, (%rdi)
184 ; AVX-LABEL: test_nt8xi16:
185 ; AVX: # %bb.0: # %entry
186 ; AVX-NEXT: vmovntdq %xmm0, (%rdi)
189 ; AVX512-LABEL: test_nt8xi16:
190 ; AVX512: # %bb.0: # %entry
191 ; AVX512-NEXT: vmovntdq %xmm0, (%rdi)
194 store <8 x i16> %X, ptr %ptr, align 16, !nontemporal !1
198 define void @test_nt4xi32(ptr nocapture %ptr, <4 x i32> %X) {
199 ; SSE-LABEL: test_nt4xi32:
200 ; SSE: # %bb.0: # %entry
201 ; SSE-NEXT: movntdq %xmm0, (%rdi)
204 ; AVX-LABEL: test_nt4xi32:
205 ; AVX: # %bb.0: # %entry
206 ; AVX-NEXT: vmovntdq %xmm0, (%rdi)
209 ; AVX512-LABEL: test_nt4xi32:
210 ; AVX512: # %bb.0: # %entry
211 ; AVX512-NEXT: vmovntdq %xmm0, (%rdi)
214 store <4 x i32> %X, ptr %ptr, align 16, !nontemporal !1
218 define void @test_nt2xi64(ptr nocapture %ptr, <2 x i64> %X) {
219 ; SSE-LABEL: test_nt2xi64:
220 ; SSE: # %bb.0: # %entry
221 ; SSE-NEXT: movntdq %xmm0, (%rdi)
224 ; AVX-LABEL: test_nt2xi64:
225 ; AVX: # %bb.0: # %entry
226 ; AVX-NEXT: vmovntdq %xmm0, (%rdi)
229 ; AVX512-LABEL: test_nt2xi64:
230 ; AVX512: # %bb.0: # %entry
231 ; AVX512-NEXT: vmovntdq %xmm0, (%rdi)
234 store <2 x i64> %X, ptr %ptr, align 16, !nontemporal !1
239 ; 128-bit Vector Loads
242 define <4 x float> @test_load_nt4xfloat(ptr nocapture %ptr) {
243 ; SSE2-LABEL: test_load_nt4xfloat:
244 ; SSE2: # %bb.0: # %entry
245 ; SSE2-NEXT: movaps (%rdi), %xmm0
248 ; SSE4A-LABEL: test_load_nt4xfloat:
249 ; SSE4A: # %bb.0: # %entry
250 ; SSE4A-NEXT: movaps (%rdi), %xmm0
253 ; SSE41-LABEL: test_load_nt4xfloat:
254 ; SSE41: # %bb.0: # %entry
255 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
258 ; AVX-LABEL: test_load_nt4xfloat:
259 ; AVX: # %bb.0: # %entry
260 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
263 ; AVX512-LABEL: test_load_nt4xfloat:
264 ; AVX512: # %bb.0: # %entry
265 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
268 %0 = load <4 x float>, ptr %ptr, align 16, !nontemporal !1
272 define <2 x double> @test_load_nt2xdouble(ptr nocapture %ptr) {
273 ; SSE2-LABEL: test_load_nt2xdouble:
274 ; SSE2: # %bb.0: # %entry
275 ; SSE2-NEXT: movapd (%rdi), %xmm0
278 ; SSE4A-LABEL: test_load_nt2xdouble:
279 ; SSE4A: # %bb.0: # %entry
280 ; SSE4A-NEXT: movapd (%rdi), %xmm0
283 ; SSE41-LABEL: test_load_nt2xdouble:
284 ; SSE41: # %bb.0: # %entry
285 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
288 ; AVX-LABEL: test_load_nt2xdouble:
289 ; AVX: # %bb.0: # %entry
290 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
293 ; AVX512-LABEL: test_load_nt2xdouble:
294 ; AVX512: # %bb.0: # %entry
295 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
298 %0 = load <2 x double>, ptr %ptr, align 16, !nontemporal !1
302 define <16 x i8> @test_load_nt16xi8(ptr nocapture %ptr) {
303 ; SSE2-LABEL: test_load_nt16xi8:
304 ; SSE2: # %bb.0: # %entry
305 ; SSE2-NEXT: movdqa (%rdi), %xmm0
308 ; SSE4A-LABEL: test_load_nt16xi8:
309 ; SSE4A: # %bb.0: # %entry
310 ; SSE4A-NEXT: movdqa (%rdi), %xmm0
313 ; SSE41-LABEL: test_load_nt16xi8:
314 ; SSE41: # %bb.0: # %entry
315 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
318 ; AVX-LABEL: test_load_nt16xi8:
319 ; AVX: # %bb.0: # %entry
320 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
323 ; AVX512-LABEL: test_load_nt16xi8:
324 ; AVX512: # %bb.0: # %entry
325 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
328 %0 = load <16 x i8>, ptr %ptr, align 16, !nontemporal !1
332 define <8 x i16> @test_load_nt8xi16(ptr nocapture %ptr) {
333 ; SSE2-LABEL: test_load_nt8xi16:
334 ; SSE2: # %bb.0: # %entry
335 ; SSE2-NEXT: movdqa (%rdi), %xmm0
338 ; SSE4A-LABEL: test_load_nt8xi16:
339 ; SSE4A: # %bb.0: # %entry
340 ; SSE4A-NEXT: movdqa (%rdi), %xmm0
343 ; SSE41-LABEL: test_load_nt8xi16:
344 ; SSE41: # %bb.0: # %entry
345 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
348 ; AVX-LABEL: test_load_nt8xi16:
349 ; AVX: # %bb.0: # %entry
350 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
353 ; AVX512-LABEL: test_load_nt8xi16:
354 ; AVX512: # %bb.0: # %entry
355 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
358 %0 = load <8 x i16>, ptr %ptr, align 16, !nontemporal !1
362 define <4 x i32> @test_load_nt4xi32(ptr nocapture %ptr) {
363 ; SSE2-LABEL: test_load_nt4xi32:
364 ; SSE2: # %bb.0: # %entry
365 ; SSE2-NEXT: movdqa (%rdi), %xmm0
368 ; SSE4A-LABEL: test_load_nt4xi32:
369 ; SSE4A: # %bb.0: # %entry
370 ; SSE4A-NEXT: movdqa (%rdi), %xmm0
373 ; SSE41-LABEL: test_load_nt4xi32:
374 ; SSE41: # %bb.0: # %entry
375 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
378 ; AVX-LABEL: test_load_nt4xi32:
379 ; AVX: # %bb.0: # %entry
380 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
383 ; AVX512-LABEL: test_load_nt4xi32:
384 ; AVX512: # %bb.0: # %entry
385 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
388 %0 = load <4 x i32>, ptr %ptr, align 16, !nontemporal !1
392 define <2 x i64> @test_load_nt2xi64(ptr nocapture %ptr) {
393 ; SSE2-LABEL: test_load_nt2xi64:
394 ; SSE2: # %bb.0: # %entry
395 ; SSE2-NEXT: movdqa (%rdi), %xmm0
398 ; SSE4A-LABEL: test_load_nt2xi64:
399 ; SSE4A: # %bb.0: # %entry
400 ; SSE4A-NEXT: movdqa (%rdi), %xmm0
403 ; SSE41-LABEL: test_load_nt2xi64:
404 ; SSE41: # %bb.0: # %entry
405 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
408 ; AVX-LABEL: test_load_nt2xi64:
409 ; AVX: # %bb.0: # %entry
410 ; AVX-NEXT: vmovntdqa (%rdi), %xmm0
413 ; AVX512-LABEL: test_load_nt2xi64:
414 ; AVX512: # %bb.0: # %entry
415 ; AVX512-NEXT: vmovntdqa (%rdi), %xmm0
418 %0 = load <2 x i64>, ptr %ptr, align 16, !nontemporal !1
423 ; 256-bit Vector Stores
426 define void @test_nt8xfloat(ptr nocapture %ptr, <8 x float> %X) {
427 ; SSE-LABEL: test_nt8xfloat:
428 ; SSE: # %bb.0: # %entry
429 ; SSE-NEXT: movntps %xmm0, (%rdi)
430 ; SSE-NEXT: movntps %xmm1, 16(%rdi)
433 ; AVX-LABEL: test_nt8xfloat:
434 ; AVX: # %bb.0: # %entry
435 ; AVX-NEXT: vmovntps %ymm0, (%rdi)
436 ; AVX-NEXT: vzeroupper
439 ; AVX512-LABEL: test_nt8xfloat:
440 ; AVX512: # %bb.0: # %entry
441 ; AVX512-NEXT: vmovntps %ymm0, (%rdi)
442 ; AVX512-NEXT: vzeroupper
445 store <8 x float> %X, ptr %ptr, align 32, !nontemporal !1
449 define void @test_nt4xdouble(ptr nocapture %ptr, <4 x double> %X) {
450 ; SSE-LABEL: test_nt4xdouble:
451 ; SSE: # %bb.0: # %entry
452 ; SSE-NEXT: movntpd %xmm0, (%rdi)
453 ; SSE-NEXT: movntpd %xmm1, 16(%rdi)
456 ; AVX-LABEL: test_nt4xdouble:
457 ; AVX: # %bb.0: # %entry
458 ; AVX-NEXT: vmovntpd %ymm0, (%rdi)
459 ; AVX-NEXT: vzeroupper
462 ; AVX512-LABEL: test_nt4xdouble:
463 ; AVX512: # %bb.0: # %entry
464 ; AVX512-NEXT: vmovntpd %ymm0, (%rdi)
465 ; AVX512-NEXT: vzeroupper
468 store <4 x double> %X, ptr %ptr, align 32, !nontemporal !1
472 define void @test_nt32xi8(ptr nocapture %ptr, <32 x i8> %X) {
473 ; SSE-LABEL: test_nt32xi8:
474 ; SSE: # %bb.0: # %entry
475 ; SSE-NEXT: movntdq %xmm0, (%rdi)
476 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
479 ; AVX-LABEL: test_nt32xi8:
480 ; AVX: # %bb.0: # %entry
481 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
482 ; AVX-NEXT: vzeroupper
485 ; AVX512-LABEL: test_nt32xi8:
486 ; AVX512: # %bb.0: # %entry
487 ; AVX512-NEXT: vmovntdq %ymm0, (%rdi)
488 ; AVX512-NEXT: vzeroupper
491 store <32 x i8> %X, ptr %ptr, align 32, !nontemporal !1
495 define void @test_nt16xi16(ptr nocapture %ptr, <16 x i16> %X) {
496 ; SSE-LABEL: test_nt16xi16:
497 ; SSE: # %bb.0: # %entry
498 ; SSE-NEXT: movntdq %xmm0, (%rdi)
499 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
502 ; AVX-LABEL: test_nt16xi16:
503 ; AVX: # %bb.0: # %entry
504 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
505 ; AVX-NEXT: vzeroupper
508 ; AVX512-LABEL: test_nt16xi16:
509 ; AVX512: # %bb.0: # %entry
510 ; AVX512-NEXT: vmovntdq %ymm0, (%rdi)
511 ; AVX512-NEXT: vzeroupper
514 store <16 x i16> %X, ptr %ptr, align 32, !nontemporal !1
518 define void @test_nt8xi32(ptr nocapture %ptr, <8 x i32> %X) {
519 ; SSE-LABEL: test_nt8xi32:
520 ; SSE: # %bb.0: # %entry
521 ; SSE-NEXT: movntdq %xmm0, (%rdi)
522 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
525 ; AVX-LABEL: test_nt8xi32:
526 ; AVX: # %bb.0: # %entry
527 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
528 ; AVX-NEXT: vzeroupper
531 ; AVX512-LABEL: test_nt8xi32:
532 ; AVX512: # %bb.0: # %entry
533 ; AVX512-NEXT: vmovntdq %ymm0, (%rdi)
534 ; AVX512-NEXT: vzeroupper
537 store <8 x i32> %X, ptr %ptr, align 32, !nontemporal !1
541 define void @test_nt4xi64(ptr nocapture %ptr, <4 x i64> %X) {
542 ; SSE-LABEL: test_nt4xi64:
543 ; SSE: # %bb.0: # %entry
544 ; SSE-NEXT: movntdq %xmm0, (%rdi)
545 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
548 ; AVX-LABEL: test_nt4xi64:
549 ; AVX: # %bb.0: # %entry
550 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
551 ; AVX-NEXT: vzeroupper
554 ; AVX512-LABEL: test_nt4xi64:
555 ; AVX512: # %bb.0: # %entry
556 ; AVX512-NEXT: vmovntdq %ymm0, (%rdi)
557 ; AVX512-NEXT: vzeroupper
560 store <4 x i64> %X, ptr %ptr, align 32, !nontemporal !1
565 ; 256-bit Vector Loads
568 define <8 x float> @test_load_nt8xfloat(ptr nocapture %ptr) {
569 ; SSE2-LABEL: test_load_nt8xfloat:
570 ; SSE2: # %bb.0: # %entry
571 ; SSE2-NEXT: movaps (%rdi), %xmm0
572 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
575 ; SSE4A-LABEL: test_load_nt8xfloat:
576 ; SSE4A: # %bb.0: # %entry
577 ; SSE4A-NEXT: movaps (%rdi), %xmm0
578 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
581 ; SSE41-LABEL: test_load_nt8xfloat:
582 ; SSE41: # %bb.0: # %entry
583 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
584 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
587 ; AVX1-LABEL: test_load_nt8xfloat:
588 ; AVX1: # %bb.0: # %entry
589 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
590 ; AVX1-NEXT: # implicit-def: $ymm0
591 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
592 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
593 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
596 ; AVX2-LABEL: test_load_nt8xfloat:
597 ; AVX2: # %bb.0: # %entry
598 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
601 ; AVX512-LABEL: test_load_nt8xfloat:
602 ; AVX512: # %bb.0: # %entry
603 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
606 %0 = load <8 x float>, ptr %ptr, align 32, !nontemporal !1
610 define <4 x double> @test_load_nt4xdouble(ptr nocapture %ptr) {
611 ; SSE2-LABEL: test_load_nt4xdouble:
612 ; SSE2: # %bb.0: # %entry
613 ; SSE2-NEXT: movapd (%rdi), %xmm0
614 ; SSE2-NEXT: movapd 16(%rdi), %xmm1
617 ; SSE4A-LABEL: test_load_nt4xdouble:
618 ; SSE4A: # %bb.0: # %entry
619 ; SSE4A-NEXT: movapd (%rdi), %xmm0
620 ; SSE4A-NEXT: movapd 16(%rdi), %xmm1
623 ; SSE41-LABEL: test_load_nt4xdouble:
624 ; SSE41: # %bb.0: # %entry
625 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
626 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
629 ; AVX1-LABEL: test_load_nt4xdouble:
630 ; AVX1: # %bb.0: # %entry
631 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
632 ; AVX1-NEXT: # implicit-def: $ymm0
633 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
634 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
635 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
638 ; AVX2-LABEL: test_load_nt4xdouble:
639 ; AVX2: # %bb.0: # %entry
640 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
643 ; AVX512-LABEL: test_load_nt4xdouble:
644 ; AVX512: # %bb.0: # %entry
645 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
648 %0 = load <4 x double>, ptr %ptr, align 32, !nontemporal !1
652 define <32 x i8> @test_load_nt32xi8(ptr nocapture %ptr) {
653 ; SSE2-LABEL: test_load_nt32xi8:
654 ; SSE2: # %bb.0: # %entry
655 ; SSE2-NEXT: movaps (%rdi), %xmm0
656 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
659 ; SSE4A-LABEL: test_load_nt32xi8:
660 ; SSE4A: # %bb.0: # %entry
661 ; SSE4A-NEXT: movaps (%rdi), %xmm0
662 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
665 ; SSE41-LABEL: test_load_nt32xi8:
666 ; SSE41: # %bb.0: # %entry
667 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
668 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
671 ; AVX1-LABEL: test_load_nt32xi8:
672 ; AVX1: # %bb.0: # %entry
673 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
674 ; AVX1-NEXT: # implicit-def: $ymm0
675 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
676 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
677 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
680 ; AVX2-LABEL: test_load_nt32xi8:
681 ; AVX2: # %bb.0: # %entry
682 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
685 ; AVX512-LABEL: test_load_nt32xi8:
686 ; AVX512: # %bb.0: # %entry
687 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
690 %0 = load <32 x i8>, ptr %ptr, align 32, !nontemporal !1
694 define <16 x i16> @test_load_nt16xi16(ptr nocapture %ptr) {
695 ; SSE2-LABEL: test_load_nt16xi16:
696 ; SSE2: # %bb.0: # %entry
697 ; SSE2-NEXT: movaps (%rdi), %xmm0
698 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
701 ; SSE4A-LABEL: test_load_nt16xi16:
702 ; SSE4A: # %bb.0: # %entry
703 ; SSE4A-NEXT: movaps (%rdi), %xmm0
704 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
707 ; SSE41-LABEL: test_load_nt16xi16:
708 ; SSE41: # %bb.0: # %entry
709 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
710 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
713 ; AVX1-LABEL: test_load_nt16xi16:
714 ; AVX1: # %bb.0: # %entry
715 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
716 ; AVX1-NEXT: # implicit-def: $ymm0
717 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
718 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
719 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
722 ; AVX2-LABEL: test_load_nt16xi16:
723 ; AVX2: # %bb.0: # %entry
724 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
727 ; AVX512-LABEL: test_load_nt16xi16:
728 ; AVX512: # %bb.0: # %entry
729 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
732 %0 = load <16 x i16>, ptr %ptr, align 32, !nontemporal !1
736 define <8 x i32> @test_load_nt8xi32(ptr nocapture %ptr) {
737 ; SSE2-LABEL: test_load_nt8xi32:
738 ; SSE2: # %bb.0: # %entry
739 ; SSE2-NEXT: movaps (%rdi), %xmm0
740 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
743 ; SSE4A-LABEL: test_load_nt8xi32:
744 ; SSE4A: # %bb.0: # %entry
745 ; SSE4A-NEXT: movaps (%rdi), %xmm0
746 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
749 ; SSE41-LABEL: test_load_nt8xi32:
750 ; SSE41: # %bb.0: # %entry
751 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
752 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
755 ; AVX1-LABEL: test_load_nt8xi32:
756 ; AVX1: # %bb.0: # %entry
757 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
758 ; AVX1-NEXT: # implicit-def: $ymm0
759 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
760 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
761 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
764 ; AVX2-LABEL: test_load_nt8xi32:
765 ; AVX2: # %bb.0: # %entry
766 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
769 ; AVX512-LABEL: test_load_nt8xi32:
770 ; AVX512: # %bb.0: # %entry
771 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
774 %0 = load <8 x i32>, ptr %ptr, align 32, !nontemporal !1
778 define <4 x i64> @test_load_nt4xi64(ptr nocapture %ptr) {
779 ; SSE2-LABEL: test_load_nt4xi64:
780 ; SSE2: # %bb.0: # %entry
781 ; SSE2-NEXT: movaps (%rdi), %xmm0
782 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
785 ; SSE4A-LABEL: test_load_nt4xi64:
786 ; SSE4A: # %bb.0: # %entry
787 ; SSE4A-NEXT: movaps (%rdi), %xmm0
788 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
791 ; SSE41-LABEL: test_load_nt4xi64:
792 ; SSE41: # %bb.0: # %entry
793 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
794 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
797 ; AVX1-LABEL: test_load_nt4xi64:
798 ; AVX1: # %bb.0: # %entry
799 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
800 ; AVX1-NEXT: # implicit-def: $ymm0
801 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
802 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
803 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
806 ; AVX2-LABEL: test_load_nt4xi64:
807 ; AVX2: # %bb.0: # %entry
808 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
811 ; AVX512-LABEL: test_load_nt4xi64:
812 ; AVX512: # %bb.0: # %entry
813 ; AVX512-NEXT: vmovntdqa (%rdi), %ymm0
816 %0 = load <4 x i64>, ptr %ptr, align 32, !nontemporal !1
821 ; 512-bit Vector Stores
824 define void @test_nt16xfloat(ptr nocapture %ptr, <16 x float> %X) {
825 ; SSE-LABEL: test_nt16xfloat:
826 ; SSE: # %bb.0: # %entry
827 ; SSE-NEXT: movntps %xmm0, (%rdi)
828 ; SSE-NEXT: movntps %xmm1, 16(%rdi)
829 ; SSE-NEXT: movntps %xmm2, 32(%rdi)
830 ; SSE-NEXT: movntps %xmm3, 48(%rdi)
833 ; AVX-LABEL: test_nt16xfloat:
834 ; AVX: # %bb.0: # %entry
835 ; AVX-NEXT: vmovntps %ymm0, (%rdi)
836 ; AVX-NEXT: vmovntps %ymm1, 32(%rdi)
837 ; AVX-NEXT: vzeroupper
840 ; AVX512-LABEL: test_nt16xfloat:
841 ; AVX512: # %bb.0: # %entry
842 ; AVX512-NEXT: vmovntps %zmm0, (%rdi)
843 ; AVX512-NEXT: vzeroupper
846 store <16 x float> %X, ptr %ptr, align 64, !nontemporal !1
850 define void @test_nt8xdouble(ptr nocapture %ptr, <8 x double> %X) {
851 ; SSE-LABEL: test_nt8xdouble:
852 ; SSE: # %bb.0: # %entry
853 ; SSE-NEXT: movntpd %xmm0, (%rdi)
854 ; SSE-NEXT: movntpd %xmm1, 16(%rdi)
855 ; SSE-NEXT: movntpd %xmm2, 32(%rdi)
856 ; SSE-NEXT: movntpd %xmm3, 48(%rdi)
859 ; AVX-LABEL: test_nt8xdouble:
860 ; AVX: # %bb.0: # %entry
861 ; AVX-NEXT: vmovntpd %ymm0, (%rdi)
862 ; AVX-NEXT: vmovntpd %ymm1, 32(%rdi)
863 ; AVX-NEXT: vzeroupper
866 ; AVX512-LABEL: test_nt8xdouble:
867 ; AVX512: # %bb.0: # %entry
868 ; AVX512-NEXT: vmovntpd %zmm0, (%rdi)
869 ; AVX512-NEXT: vzeroupper
872 store <8 x double> %X, ptr %ptr, align 64, !nontemporal !1
876 define void @test_nt64xi8(ptr nocapture %ptr, <64 x i8> %X) {
877 ; SSE-LABEL: test_nt64xi8:
878 ; SSE: # %bb.0: # %entry
879 ; SSE-NEXT: movntdq %xmm0, (%rdi)
880 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
881 ; SSE-NEXT: movntdq %xmm2, 32(%rdi)
882 ; SSE-NEXT: movntdq %xmm3, 48(%rdi)
885 ; AVX-LABEL: test_nt64xi8:
886 ; AVX: # %bb.0: # %entry
887 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
888 ; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)
889 ; AVX-NEXT: vzeroupper
892 ; AVX512-LABEL: test_nt64xi8:
893 ; AVX512: # %bb.0: # %entry
894 ; AVX512-NEXT: vmovntdq %zmm0, (%rdi)
895 ; AVX512-NEXT: vzeroupper
899 store <64 x i8> %X, ptr %ptr, align 64, !nontemporal !1
903 define void @test_nt32xi16(ptr nocapture %ptr, <32 x i16> %X) {
904 ; SSE-LABEL: test_nt32xi16:
905 ; SSE: # %bb.0: # %entry
906 ; SSE-NEXT: movntdq %xmm0, (%rdi)
907 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
908 ; SSE-NEXT: movntdq %xmm2, 32(%rdi)
909 ; SSE-NEXT: movntdq %xmm3, 48(%rdi)
912 ; AVX-LABEL: test_nt32xi16:
913 ; AVX: # %bb.0: # %entry
914 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
915 ; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)
916 ; AVX-NEXT: vzeroupper
919 ; AVX512-LABEL: test_nt32xi16:
920 ; AVX512: # %bb.0: # %entry
921 ; AVX512-NEXT: vmovntdq %zmm0, (%rdi)
922 ; AVX512-NEXT: vzeroupper
926 store <32 x i16> %X, ptr %ptr, align 64, !nontemporal !1
930 define void @test_nt16xi32(ptr nocapture %ptr, <16 x i32> %X) {
931 ; SSE-LABEL: test_nt16xi32:
932 ; SSE: # %bb.0: # %entry
933 ; SSE-NEXT: movntdq %xmm0, (%rdi)
934 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
935 ; SSE-NEXT: movntdq %xmm2, 32(%rdi)
936 ; SSE-NEXT: movntdq %xmm3, 48(%rdi)
939 ; AVX-LABEL: test_nt16xi32:
940 ; AVX: # %bb.0: # %entry
941 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
942 ; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)
943 ; AVX-NEXT: vzeroupper
946 ; AVX512-LABEL: test_nt16xi32:
947 ; AVX512: # %bb.0: # %entry
948 ; AVX512-NEXT: vmovntdq %zmm0, (%rdi)
949 ; AVX512-NEXT: vzeroupper
952 store <16 x i32> %X, ptr %ptr, align 64, !nontemporal !1
956 define void @test_nt8xi64(ptr nocapture %ptr, <8 x i64> %X) {
957 ; SSE-LABEL: test_nt8xi64:
958 ; SSE: # %bb.0: # %entry
959 ; SSE-NEXT: movntdq %xmm0, (%rdi)
960 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
961 ; SSE-NEXT: movntdq %xmm2, 32(%rdi)
962 ; SSE-NEXT: movntdq %xmm3, 48(%rdi)
965 ; AVX-LABEL: test_nt8xi64:
966 ; AVX: # %bb.0: # %entry
967 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
968 ; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)
969 ; AVX-NEXT: vzeroupper
972 ; AVX512-LABEL: test_nt8xi64:
973 ; AVX512: # %bb.0: # %entry
974 ; AVX512-NEXT: vmovntdq %zmm0, (%rdi)
975 ; AVX512-NEXT: vzeroupper
978 store <8 x i64> %X, ptr %ptr, align 64, !nontemporal !1
983 ; 512-bit Vector Loads
986 define <16 x float> @test_load_nt16xfloat(ptr nocapture %ptr) {
987 ; SSE2-LABEL: test_load_nt16xfloat:
988 ; SSE2: # %bb.0: # %entry
989 ; SSE2-NEXT: movaps (%rdi), %xmm0
990 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
991 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
992 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
995 ; SSE4A-LABEL: test_load_nt16xfloat:
996 ; SSE4A: # %bb.0: # %entry
997 ; SSE4A-NEXT: movaps (%rdi), %xmm0
998 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
999 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1000 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1003 ; SSE41-LABEL: test_load_nt16xfloat:
1004 ; SSE41: # %bb.0: # %entry
1005 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1006 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1007 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1008 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1011 ; AVX1-LABEL: test_load_nt16xfloat:
1012 ; AVX1: # %bb.0: # %entry
1013 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
1014 ; AVX1-NEXT: # implicit-def: $ymm0
1015 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
1016 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
1017 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1018 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1019 ; AVX1-NEXT: # implicit-def: $ymm1
1020 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1021 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1022 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1025 ; AVX2-LABEL: test_load_nt16xfloat:
1026 ; AVX2: # %bb.0: # %entry
1027 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1028 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1031 ; AVX512-LABEL: test_load_nt16xfloat:
1032 ; AVX512: # %bb.0: # %entry
1033 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1036 %0 = load <16 x float>, ptr %ptr, align 64, !nontemporal !1
1040 define <8 x double> @test_load_nt8xdouble(ptr nocapture %ptr) {
1041 ; SSE2-LABEL: test_load_nt8xdouble:
1042 ; SSE2: # %bb.0: # %entry
1043 ; SSE2-NEXT: movapd (%rdi), %xmm0
1044 ; SSE2-NEXT: movapd 16(%rdi), %xmm1
1045 ; SSE2-NEXT: movapd 32(%rdi), %xmm2
1046 ; SSE2-NEXT: movapd 48(%rdi), %xmm3
1049 ; SSE4A-LABEL: test_load_nt8xdouble:
1050 ; SSE4A: # %bb.0: # %entry
1051 ; SSE4A-NEXT: movapd (%rdi), %xmm0
1052 ; SSE4A-NEXT: movapd 16(%rdi), %xmm1
1053 ; SSE4A-NEXT: movapd 32(%rdi), %xmm2
1054 ; SSE4A-NEXT: movapd 48(%rdi), %xmm3
1057 ; SSE41-LABEL: test_load_nt8xdouble:
1058 ; SSE41: # %bb.0: # %entry
1059 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1060 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1061 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1062 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1065 ; AVX1-LABEL: test_load_nt8xdouble:
1066 ; AVX1: # %bb.0: # %entry
1067 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
1068 ; AVX1-NEXT: # implicit-def: $ymm0
1069 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
1070 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
1071 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1072 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1073 ; AVX1-NEXT: # implicit-def: $ymm1
1074 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1075 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1076 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1079 ; AVX2-LABEL: test_load_nt8xdouble:
1080 ; AVX2: # %bb.0: # %entry
1081 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1082 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1085 ; AVX512-LABEL: test_load_nt8xdouble:
1086 ; AVX512: # %bb.0: # %entry
1087 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1090 %0 = load <8 x double>, ptr %ptr, align 64, !nontemporal !1
1094 define <64 x i8> @test_load_nt64xi8(ptr nocapture %ptr) {
1095 ; SSE2-LABEL: test_load_nt64xi8:
1096 ; SSE2: # %bb.0: # %entry
1097 ; SSE2-NEXT: movaps (%rdi), %xmm0
1098 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1099 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1100 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1103 ; SSE4A-LABEL: test_load_nt64xi8:
1104 ; SSE4A: # %bb.0: # %entry
1105 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1106 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1107 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1108 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1111 ; SSE41-LABEL: test_load_nt64xi8:
1112 ; SSE41: # %bb.0: # %entry
1113 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1114 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1115 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1116 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1119 ; AVX1-LABEL: test_load_nt64xi8:
1120 ; AVX1: # %bb.0: # %entry
1121 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
1122 ; AVX1-NEXT: # implicit-def: $ymm0
1123 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
1124 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
1125 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1126 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1127 ; AVX1-NEXT: # implicit-def: $ymm1
1128 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1129 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1130 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1133 ; AVX2-LABEL: test_load_nt64xi8:
1134 ; AVX2: # %bb.0: # %entry
1135 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1136 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1139 ; AVX512-LABEL: test_load_nt64xi8:
1140 ; AVX512: # %bb.0: # %entry
1141 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1144 %0 = load <64 x i8>, ptr %ptr, align 64, !nontemporal !1
1148 define <32 x i16> @test_load_nt32xi16(ptr nocapture %ptr) {
1149 ; SSE2-LABEL: test_load_nt32xi16:
1150 ; SSE2: # %bb.0: # %entry
1151 ; SSE2-NEXT: movaps (%rdi), %xmm0
1152 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1153 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1154 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1157 ; SSE4A-LABEL: test_load_nt32xi16:
1158 ; SSE4A: # %bb.0: # %entry
1159 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1160 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1161 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1162 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1165 ; SSE41-LABEL: test_load_nt32xi16:
1166 ; SSE41: # %bb.0: # %entry
1167 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1168 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1169 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1170 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1173 ; AVX1-LABEL: test_load_nt32xi16:
1174 ; AVX1: # %bb.0: # %entry
1175 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
1176 ; AVX1-NEXT: # implicit-def: $ymm0
1177 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
1178 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
1179 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1180 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1181 ; AVX1-NEXT: # implicit-def: $ymm1
1182 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1183 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1184 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1187 ; AVX2-LABEL: test_load_nt32xi16:
1188 ; AVX2: # %bb.0: # %entry
1189 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1190 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1193 ; AVX512-LABEL: test_load_nt32xi16:
1194 ; AVX512: # %bb.0: # %entry
1195 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1198 %0 = load <32 x i16>, ptr %ptr, align 64, !nontemporal !1
1202 define <16 x i32> @test_load_nt16xi32(ptr nocapture %ptr) {
1203 ; SSE2-LABEL: test_load_nt16xi32:
1204 ; SSE2: # %bb.0: # %entry
1205 ; SSE2-NEXT: movaps (%rdi), %xmm0
1206 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1207 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1208 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1211 ; SSE4A-LABEL: test_load_nt16xi32:
1212 ; SSE4A: # %bb.0: # %entry
1213 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1214 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1215 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1216 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1219 ; SSE41-LABEL: test_load_nt16xi32:
1220 ; SSE41: # %bb.0: # %entry
1221 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1222 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1223 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1224 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1227 ; AVX1-LABEL: test_load_nt16xi32:
1228 ; AVX1: # %bb.0: # %entry
1229 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
1230 ; AVX1-NEXT: # implicit-def: $ymm0
1231 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
1232 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
1233 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1234 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1235 ; AVX1-NEXT: # implicit-def: $ymm1
1236 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1237 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1238 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1241 ; AVX2-LABEL: test_load_nt16xi32:
1242 ; AVX2: # %bb.0: # %entry
1243 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1244 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1247 ; AVX512-LABEL: test_load_nt16xi32:
1248 ; AVX512: # %bb.0: # %entry
1249 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1252 %0 = load <16 x i32>, ptr %ptr, align 64, !nontemporal !1
1256 define <8 x i64> @test_load_nt8xi64(ptr nocapture %ptr) {
1257 ; SSE2-LABEL: test_load_nt8xi64:
1258 ; SSE2: # %bb.0: # %entry
1259 ; SSE2-NEXT: movaps (%rdi), %xmm0
1260 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1261 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1262 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1265 ; SSE4A-LABEL: test_load_nt8xi64:
1266 ; SSE4A: # %bb.0: # %entry
1267 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1268 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1269 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1270 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1273 ; SSE41-LABEL: test_load_nt8xi64:
1274 ; SSE41: # %bb.0: # %entry
1275 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1276 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1277 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1278 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1281 ; AVX1-LABEL: test_load_nt8xi64:
1282 ; AVX1: # %bb.0: # %entry
1283 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm1
1284 ; AVX1-NEXT: # implicit-def: $ymm0
1285 ; AVX1-NEXT: vmovaps %xmm1, %xmm0
1286 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1
1287 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1288 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1289 ; AVX1-NEXT: # implicit-def: $ymm1
1290 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1291 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1292 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1295 ; AVX2-LABEL: test_load_nt8xi64:
1296 ; AVX2: # %bb.0: # %entry
1297 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1298 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1301 ; AVX512-LABEL: test_load_nt8xi64:
1302 ; AVX512: # %bb.0: # %entry
1303 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1306 %0 = load <8 x i64>, ptr %ptr, align 64, !nontemporal !1