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-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse4a -fast-isel -O0 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE4A
4 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse4.1 -fast-isel -O0 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
5 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx -fast-isel -O0 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
6 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx2 -fast-isel -O0 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
7 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512vl -fast-isel -O0 | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512VL
8 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512f -fast-isel -O0 | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512F
9 ; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512bw -fast-isel -O0 | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW
15 define void @test_nti32(i32* nocapture %ptr, i32 %X) {
16 ; ALL-LABEL: test_nti32:
17 ; ALL: # %bb.0: # %entry
18 ; ALL-NEXT: movntil %esi, (%rdi)
21 store i32 %X, i32* %ptr, align 4, !nontemporal !1
25 define void @test_nti64(i64* nocapture %ptr, i64 %X) {
26 ; ALL-LABEL: test_nti64:
27 ; ALL: # %bb.0: # %entry
28 ; ALL-NEXT: movntiq %rsi, (%rdi)
31 store i64 %X, i64* %ptr, align 8, !nontemporal !1
35 define void @test_ntfloat(float* 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, float* %ptr, align 4, !nontemporal !1
65 define void @test_ntdouble(double* 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, double* %ptr, align 8, !nontemporal !1
99 define void @test_mmx(x86_mmx* nocapture %a0, x86_mmx* 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, x86_mmx* %a0
108 %1 = call x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx %0, i32 3)
109 store x86_mmx %1, x86_mmx* %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(<4 x float>* 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, <4 x float>* %ptr, align 16, !nontemporal !1
138 define void @test_nt2xdouble(<2 x double>* 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, <2 x double>* %ptr, align 16, !nontemporal !1
158 define void @test_nt16xi8(<16 x i8>* 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, <16 x i8>* %ptr, align 16, !nontemporal !1
178 define void @test_nt8xi16(<8 x i16>* 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, <8 x i16>* %ptr, align 16, !nontemporal !1
198 define void @test_nt4xi32(<4 x i32>* 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, <4 x i32>* %ptr, align 16, !nontemporal !1
218 define void @test_nt2xi64(<2 x i64>* 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, <2 x i64>* %ptr, align 16, !nontemporal !1
239 ; 128-bit Vector Loads
242 define <4 x float> @test_load_nt4xfloat(<4 x float>* 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>, <4 x float>* %ptr, align 16, !nontemporal !1
272 define <2 x double> @test_load_nt2xdouble(<2 x double>* 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>, <2 x double>* %ptr, align 16, !nontemporal !1
302 define <16 x i8> @test_load_nt16xi8(<16 x i8>* 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>, <16 x i8>* %ptr, align 16, !nontemporal !1
332 define <8 x i16> @test_load_nt8xi16(<8 x i16>* 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>, <8 x i16>* %ptr, align 16, !nontemporal !1
362 define <4 x i32> @test_load_nt4xi32(<4 x i32>* 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>, <4 x i32>* %ptr, align 16, !nontemporal !1
392 define <2 x i64> @test_load_nt2xi64(<2 x i64>* 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>, <2 x i64>* %ptr, align 16, !nontemporal !1
423 ; 256-bit Vector Stores
426 define void @test_nt8xfloat(<8 x float>* 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, <8 x float>* %ptr, align 32, !nontemporal !1
449 define void @test_nt4xdouble(<4 x double>* 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, <4 x double>* %ptr, align 32, !nontemporal !1
472 define void @test_nt32xi8(<32 x i8>* 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, <32 x i8>* %ptr, align 32, !nontemporal !1
495 define void @test_nt16xi16(<16 x i16>* 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, <16 x i16>* %ptr, align 32, !nontemporal !1
518 define void @test_nt8xi32(<8 x i32>* 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, <8 x i32>* %ptr, align 32, !nontemporal !1
541 define void @test_nt4xi64(<4 x i64>* 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, <4 x i64>* %ptr, align 32, !nontemporal !1
565 ; 256-bit Vector Loads
568 define <8 x float> @test_load_nt8xfloat(<8 x float>* 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), %xmm0
590 ; AVX1-NEXT: # implicit-def: $ymm1
591 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
592 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
593 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %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>, <8 x float>* %ptr, align 32, !nontemporal !1
610 define <4 x double> @test_load_nt4xdouble(<4 x double>* 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), %xmm0
632 ; AVX1-NEXT: # implicit-def: $ymm1
633 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
634 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
635 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %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>, <4 x double>* %ptr, align 32, !nontemporal !1
652 define <32 x i8> @test_load_nt32xi8(<32 x i8>* 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), %xmm0
674 ; AVX1-NEXT: # implicit-def: $ymm1
675 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
676 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
677 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %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>, <32 x i8>* %ptr, align 32, !nontemporal !1
694 define <16 x i16> @test_load_nt16xi16(<16 x i16>* 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), %xmm0
716 ; AVX1-NEXT: # implicit-def: $ymm1
717 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
718 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
719 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %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>, <16 x i16>* %ptr, align 32, !nontemporal !1
736 define <8 x i32> @test_load_nt8xi32(<8 x i32>* 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), %xmm0
758 ; AVX1-NEXT: # implicit-def: $ymm1
759 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
760 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
761 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %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>, <8 x i32>* %ptr, align 32, !nontemporal !1
778 define <4 x i64> @test_load_nt4xi64(<4 x i64>* 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), %xmm0
800 ; AVX1-NEXT: # implicit-def: $ymm1
801 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
802 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
803 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %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>, <4 x i64>* %ptr, align 32, !nontemporal !1
821 ; 512-bit Vector Stores
824 define void @test_nt16xfloat(<16 x float>* 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, <16 x float>* %ptr, align 64, !nontemporal !1
850 define void @test_nt8xdouble(<8 x double>* 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, <8 x double>* %ptr, align 64, !nontemporal !1
876 define void @test_nt64xi8(<64 x i8>* 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 ; AVX512VL-LABEL: test_nt64xi8:
893 ; AVX512VL: # %bb.0: # %entry
894 ; AVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
895 ; AVX512VL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
896 ; AVX512VL-NEXT: vmovntdq %ymm0, (%rdi)
897 ; AVX512VL-NEXT: vmovntdq %ymm1, 32(%rdi)
898 ; AVX512VL-NEXT: vzeroupper
899 ; AVX512VL-NEXT: retq
901 ; AVX512F-LABEL: test_nt64xi8:
902 ; AVX512F: # %bb.0: # %entry
903 ; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm1
904 ; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
905 ; AVX512F-NEXT: vmovntdq %ymm0, (%rdi)
906 ; AVX512F-NEXT: vmovntdq %ymm1, 32(%rdi)
907 ; AVX512F-NEXT: vzeroupper
910 ; AVX512BW-LABEL: test_nt64xi8:
911 ; AVX512BW: # %bb.0: # %entry
912 ; AVX512BW-NEXT: vmovntdq %zmm0, (%rdi)
913 ; AVX512BW-NEXT: vzeroupper
914 ; AVX512BW-NEXT: retq
916 store <64 x i8> %X, <64 x i8>* %ptr, align 64, !nontemporal !1
920 define void @test_nt32xi16(<32 x i16>* nocapture %ptr, <32 x i16> %X) {
921 ; SSE-LABEL: test_nt32xi16:
922 ; SSE: # %bb.0: # %entry
923 ; SSE-NEXT: movntdq %xmm0, (%rdi)
924 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
925 ; SSE-NEXT: movntdq %xmm2, 32(%rdi)
926 ; SSE-NEXT: movntdq %xmm3, 48(%rdi)
929 ; AVX-LABEL: test_nt32xi16:
930 ; AVX: # %bb.0: # %entry
931 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
932 ; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)
933 ; AVX-NEXT: vzeroupper
936 ; AVX512VL-LABEL: test_nt32xi16:
937 ; AVX512VL: # %bb.0: # %entry
938 ; AVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
939 ; AVX512VL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
940 ; AVX512VL-NEXT: vmovntdq %ymm0, (%rdi)
941 ; AVX512VL-NEXT: vmovntdq %ymm1, 32(%rdi)
942 ; AVX512VL-NEXT: vzeroupper
943 ; AVX512VL-NEXT: retq
945 ; AVX512F-LABEL: test_nt32xi16:
946 ; AVX512F: # %bb.0: # %entry
947 ; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm1
948 ; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
949 ; AVX512F-NEXT: vmovntdq %ymm0, (%rdi)
950 ; AVX512F-NEXT: vmovntdq %ymm1, 32(%rdi)
951 ; AVX512F-NEXT: vzeroupper
954 ; AVX512BW-LABEL: test_nt32xi16:
955 ; AVX512BW: # %bb.0: # %entry
956 ; AVX512BW-NEXT: vmovntdq %zmm0, (%rdi)
957 ; AVX512BW-NEXT: vzeroupper
958 ; AVX512BW-NEXT: retq
960 store <32 x i16> %X, <32 x i16>* %ptr, align 64, !nontemporal !1
964 define void @test_nt16xi32(<16 x i32>* nocapture %ptr, <16 x i32> %X) {
965 ; SSE-LABEL: test_nt16xi32:
966 ; SSE: # %bb.0: # %entry
967 ; SSE-NEXT: movntdq %xmm0, (%rdi)
968 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
969 ; SSE-NEXT: movntdq %xmm2, 32(%rdi)
970 ; SSE-NEXT: movntdq %xmm3, 48(%rdi)
973 ; AVX-LABEL: test_nt16xi32:
974 ; AVX: # %bb.0: # %entry
975 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
976 ; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)
977 ; AVX-NEXT: vzeroupper
980 ; AVX512-LABEL: test_nt16xi32:
981 ; AVX512: # %bb.0: # %entry
982 ; AVX512-NEXT: vmovntdq %zmm0, (%rdi)
983 ; AVX512-NEXT: vzeroupper
986 store <16 x i32> %X, <16 x i32>* %ptr, align 64, !nontemporal !1
990 define void @test_nt8xi64(<8 x i64>* nocapture %ptr, <8 x i64> %X) {
991 ; SSE-LABEL: test_nt8xi64:
992 ; SSE: # %bb.0: # %entry
993 ; SSE-NEXT: movntdq %xmm0, (%rdi)
994 ; SSE-NEXT: movntdq %xmm1, 16(%rdi)
995 ; SSE-NEXT: movntdq %xmm2, 32(%rdi)
996 ; SSE-NEXT: movntdq %xmm3, 48(%rdi)
999 ; AVX-LABEL: test_nt8xi64:
1000 ; AVX: # %bb.0: # %entry
1001 ; AVX-NEXT: vmovntdq %ymm0, (%rdi)
1002 ; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)
1003 ; AVX-NEXT: vzeroupper
1006 ; AVX512-LABEL: test_nt8xi64:
1007 ; AVX512: # %bb.0: # %entry
1008 ; AVX512-NEXT: vmovntdq %zmm0, (%rdi)
1009 ; AVX512-NEXT: vzeroupper
1012 store <8 x i64> %X, <8 x i64>* %ptr, align 64, !nontemporal !1
1017 ; 512-bit Vector Loads
1020 define <16 x float> @test_load_nt16xfloat(<16 x float>* nocapture %ptr) {
1021 ; SSE2-LABEL: test_load_nt16xfloat:
1022 ; SSE2: # %bb.0: # %entry
1023 ; SSE2-NEXT: movaps (%rdi), %xmm0
1024 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1025 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1026 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1029 ; SSE4A-LABEL: test_load_nt16xfloat:
1030 ; SSE4A: # %bb.0: # %entry
1031 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1032 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1033 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1034 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1037 ; SSE41-LABEL: test_load_nt16xfloat:
1038 ; SSE41: # %bb.0: # %entry
1039 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1040 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1041 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1042 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1045 ; AVX1-LABEL: test_load_nt16xfloat:
1046 ; AVX1: # %bb.0: # %entry
1047 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
1048 ; AVX1-NEXT: # implicit-def: $ymm1
1049 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
1050 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
1051 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1052 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1053 ; AVX1-NEXT: # implicit-def: $ymm1
1054 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1055 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1056 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1059 ; AVX2-LABEL: test_load_nt16xfloat:
1060 ; AVX2: # %bb.0: # %entry
1061 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1062 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1065 ; AVX512-LABEL: test_load_nt16xfloat:
1066 ; AVX512: # %bb.0: # %entry
1067 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1070 %0 = load <16 x float>, <16 x float>* %ptr, align 64, !nontemporal !1
1074 define <8 x double> @test_load_nt8xdouble(<8 x double>* nocapture %ptr) {
1075 ; SSE2-LABEL: test_load_nt8xdouble:
1076 ; SSE2: # %bb.0: # %entry
1077 ; SSE2-NEXT: movapd (%rdi), %xmm0
1078 ; SSE2-NEXT: movapd 16(%rdi), %xmm1
1079 ; SSE2-NEXT: movapd 32(%rdi), %xmm2
1080 ; SSE2-NEXT: movapd 48(%rdi), %xmm3
1083 ; SSE4A-LABEL: test_load_nt8xdouble:
1084 ; SSE4A: # %bb.0: # %entry
1085 ; SSE4A-NEXT: movapd (%rdi), %xmm0
1086 ; SSE4A-NEXT: movapd 16(%rdi), %xmm1
1087 ; SSE4A-NEXT: movapd 32(%rdi), %xmm2
1088 ; SSE4A-NEXT: movapd 48(%rdi), %xmm3
1091 ; SSE41-LABEL: test_load_nt8xdouble:
1092 ; SSE41: # %bb.0: # %entry
1093 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1094 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1095 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1096 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1099 ; AVX1-LABEL: test_load_nt8xdouble:
1100 ; AVX1: # %bb.0: # %entry
1101 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
1102 ; AVX1-NEXT: # implicit-def: $ymm1
1103 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
1104 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
1105 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1106 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1107 ; AVX1-NEXT: # implicit-def: $ymm1
1108 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1109 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1110 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1113 ; AVX2-LABEL: test_load_nt8xdouble:
1114 ; AVX2: # %bb.0: # %entry
1115 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1116 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1119 ; AVX512-LABEL: test_load_nt8xdouble:
1120 ; AVX512: # %bb.0: # %entry
1121 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1124 %0 = load <8 x double>, <8 x double>* %ptr, align 64, !nontemporal !1
1128 define <64 x i8> @test_load_nt64xi8(<64 x i8>* nocapture %ptr) {
1129 ; SSE2-LABEL: test_load_nt64xi8:
1130 ; SSE2: # %bb.0: # %entry
1131 ; SSE2-NEXT: movaps (%rdi), %xmm0
1132 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1133 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1134 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1137 ; SSE4A-LABEL: test_load_nt64xi8:
1138 ; SSE4A: # %bb.0: # %entry
1139 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1140 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1141 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1142 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1145 ; SSE41-LABEL: test_load_nt64xi8:
1146 ; SSE41: # %bb.0: # %entry
1147 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1148 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1149 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1150 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1153 ; AVX1-LABEL: test_load_nt64xi8:
1154 ; AVX1: # %bb.0: # %entry
1155 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
1156 ; AVX1-NEXT: # implicit-def: $ymm1
1157 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
1158 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
1159 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1160 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1161 ; AVX1-NEXT: # implicit-def: $ymm1
1162 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1163 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1164 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1167 ; AVX2-LABEL: test_load_nt64xi8:
1168 ; AVX2: # %bb.0: # %entry
1169 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1170 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1173 ; AVX512-LABEL: test_load_nt64xi8:
1174 ; AVX512: # %bb.0: # %entry
1175 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1178 %0 = load <64 x i8>, <64 x i8>* %ptr, align 64, !nontemporal !1
1182 define <32 x i16> @test_load_nt32xi16(<32 x i16>* nocapture %ptr) {
1183 ; SSE2-LABEL: test_load_nt32xi16:
1184 ; SSE2: # %bb.0: # %entry
1185 ; SSE2-NEXT: movaps (%rdi), %xmm0
1186 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1187 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1188 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1191 ; SSE4A-LABEL: test_load_nt32xi16:
1192 ; SSE4A: # %bb.0: # %entry
1193 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1194 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1195 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1196 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1199 ; SSE41-LABEL: test_load_nt32xi16:
1200 ; SSE41: # %bb.0: # %entry
1201 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1202 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1203 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1204 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1207 ; AVX1-LABEL: test_load_nt32xi16:
1208 ; AVX1: # %bb.0: # %entry
1209 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
1210 ; AVX1-NEXT: # implicit-def: $ymm1
1211 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
1212 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
1213 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1214 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1215 ; AVX1-NEXT: # implicit-def: $ymm1
1216 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1217 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1218 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1221 ; AVX2-LABEL: test_load_nt32xi16:
1222 ; AVX2: # %bb.0: # %entry
1223 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1224 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1227 ; AVX512-LABEL: test_load_nt32xi16:
1228 ; AVX512: # %bb.0: # %entry
1229 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1232 %0 = load <32 x i16>, <32 x i16>* %ptr, align 64, !nontemporal !1
1236 define <16 x i32> @test_load_nt16xi32(<16 x i32>* nocapture %ptr) {
1237 ; SSE2-LABEL: test_load_nt16xi32:
1238 ; SSE2: # %bb.0: # %entry
1239 ; SSE2-NEXT: movaps (%rdi), %xmm0
1240 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1241 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1242 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1245 ; SSE4A-LABEL: test_load_nt16xi32:
1246 ; SSE4A: # %bb.0: # %entry
1247 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1248 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1249 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1250 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1253 ; SSE41-LABEL: test_load_nt16xi32:
1254 ; SSE41: # %bb.0: # %entry
1255 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1256 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1257 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1258 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1261 ; AVX1-LABEL: test_load_nt16xi32:
1262 ; AVX1: # %bb.0: # %entry
1263 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
1264 ; AVX1-NEXT: # implicit-def: $ymm1
1265 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
1266 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
1267 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1268 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1269 ; AVX1-NEXT: # implicit-def: $ymm1
1270 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1271 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1272 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1275 ; AVX2-LABEL: test_load_nt16xi32:
1276 ; AVX2: # %bb.0: # %entry
1277 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1278 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1281 ; AVX512-LABEL: test_load_nt16xi32:
1282 ; AVX512: # %bb.0: # %entry
1283 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1286 %0 = load <16 x i32>, <16 x i32>* %ptr, align 64, !nontemporal !1
1290 define <8 x i64> @test_load_nt8xi64(<8 x i64>* nocapture %ptr) {
1291 ; SSE2-LABEL: test_load_nt8xi64:
1292 ; SSE2: # %bb.0: # %entry
1293 ; SSE2-NEXT: movaps (%rdi), %xmm0
1294 ; SSE2-NEXT: movaps 16(%rdi), %xmm1
1295 ; SSE2-NEXT: movaps 32(%rdi), %xmm2
1296 ; SSE2-NEXT: movaps 48(%rdi), %xmm3
1299 ; SSE4A-LABEL: test_load_nt8xi64:
1300 ; SSE4A: # %bb.0: # %entry
1301 ; SSE4A-NEXT: movaps (%rdi), %xmm0
1302 ; SSE4A-NEXT: movaps 16(%rdi), %xmm1
1303 ; SSE4A-NEXT: movaps 32(%rdi), %xmm2
1304 ; SSE4A-NEXT: movaps 48(%rdi), %xmm3
1307 ; SSE41-LABEL: test_load_nt8xi64:
1308 ; SSE41: # %bb.0: # %entry
1309 ; SSE41-NEXT: movntdqa (%rdi), %xmm0
1310 ; SSE41-NEXT: movntdqa 16(%rdi), %xmm1
1311 ; SSE41-NEXT: movntdqa 32(%rdi), %xmm2
1312 ; SSE41-NEXT: movntdqa 48(%rdi), %xmm3
1315 ; AVX1-LABEL: test_load_nt8xi64:
1316 ; AVX1: # %bb.0: # %entry
1317 ; AVX1-NEXT: vmovntdqa (%rdi), %xmm0
1318 ; AVX1-NEXT: # implicit-def: $ymm1
1319 ; AVX1-NEXT: vmovaps %xmm0, %xmm1
1320 ; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm0
1321 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1322 ; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2
1323 ; AVX1-NEXT: # implicit-def: $ymm1
1324 ; AVX1-NEXT: vmovaps %xmm2, %xmm1
1325 ; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2
1326 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1329 ; AVX2-LABEL: test_load_nt8xi64:
1330 ; AVX2: # %bb.0: # %entry
1331 ; AVX2-NEXT: vmovntdqa (%rdi), %ymm0
1332 ; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1
1335 ; AVX512-LABEL: test_load_nt8xi64:
1336 ; AVX512: # %bb.0: # %entry
1337 ; AVX512-NEXT: vmovntdqa (%rdi), %zmm0
1340 %0 = load <8 x i64>, <8 x i64>* %ptr, align 64, !nontemporal !1