Home | History | Annotate | Download | only in X86
      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
     10 
     11 ;
     12 ; Scalar Stores
     13 ;
     14 
     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)
     19 ; ALL-NEXT:    retq
     20 entry:
     21   store i32 %X, i32* %ptr, align 4, !nontemporal !1
     22   ret void
     23 }
     24 
     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)
     29 ; ALL-NEXT:    retq
     30 entry:
     31   store i64 %X, i64* %ptr, align 8, !nontemporal !1
     32   ret void
     33 }
     34 
     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)
     39 ; SSE2-NEXT:    retq
     40 ;
     41 ; SSE4A-LABEL: test_ntfloat:
     42 ; SSE4A:       # %bb.0: # %entry
     43 ; SSE4A-NEXT:    movntss %xmm0, (%rdi)
     44 ; SSE4A-NEXT:    retq
     45 ;
     46 ; SSE41-LABEL: test_ntfloat:
     47 ; SSE41:       # %bb.0: # %entry
     48 ; SSE41-NEXT:    movss %xmm0, (%rdi)
     49 ; SSE41-NEXT:    retq
     50 ;
     51 ; AVX-LABEL: test_ntfloat:
     52 ; AVX:       # %bb.0: # %entry
     53 ; AVX-NEXT:    vmovss %xmm0, (%rdi)
     54 ; AVX-NEXT:    retq
     55 ;
     56 ; AVX512-LABEL: test_ntfloat:
     57 ; AVX512:       # %bb.0: # %entry
     58 ; AVX512-NEXT:    vmovss %xmm0, (%rdi)
     59 ; AVX512-NEXT:    retq
     60 entry:
     61   store float %X, float* %ptr, align 4, !nontemporal !1
     62   ret void
     63 }
     64 
     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)
     69 ; SSE2-NEXT:    retq
     70 ;
     71 ; SSE4A-LABEL: test_ntdouble:
     72 ; SSE4A:       # %bb.0: # %entry
     73 ; SSE4A-NEXT:    movntsd %xmm0, (%rdi)
     74 ; SSE4A-NEXT:    retq
     75 ;
     76 ; SSE41-LABEL: test_ntdouble:
     77 ; SSE41:       # %bb.0: # %entry
     78 ; SSE41-NEXT:    movsd %xmm0, (%rdi)
     79 ; SSE41-NEXT:    retq
     80 ;
     81 ; AVX-LABEL: test_ntdouble:
     82 ; AVX:       # %bb.0: # %entry
     83 ; AVX-NEXT:    vmovsd %xmm0, (%rdi)
     84 ; AVX-NEXT:    retq
     85 ;
     86 ; AVX512-LABEL: test_ntdouble:
     87 ; AVX512:       # %bb.0: # %entry
     88 ; AVX512-NEXT:    vmovsd %xmm0, (%rdi)
     89 ; AVX512-NEXT:    retq
     90 entry:
     91   store double %X, double* %ptr, align 8, !nontemporal !1
     92   ret void
     93 }
     94 
     95 ;
     96 ; MMX Store
     97 ;
     98 
     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)
    105 ; ALL-NEXT:    retq
    106 entry:
    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
    110   ret void
    111 }
    112 declare x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx, i32) nounwind readnone
    113 
    114 ;
    115 ; 128-bit Vector Stores
    116 ;
    117 
    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)
    122 ; SSE-NEXT:    retq
    123 ;
    124 ; AVX-LABEL: test_nt4xfloat:
    125 ; AVX:       # %bb.0: # %entry
    126 ; AVX-NEXT:    vmovntps %xmm0, (%rdi)
    127 ; AVX-NEXT:    retq
    128 ;
    129 ; AVX512-LABEL: test_nt4xfloat:
    130 ; AVX512:       # %bb.0: # %entry
    131 ; AVX512-NEXT:    vmovntps %xmm0, (%rdi)
    132 ; AVX512-NEXT:    retq
    133 entry:
    134   store <4 x float> %X, <4 x float>* %ptr, align 16, !nontemporal !1
    135   ret void
    136 }
    137 
    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)
    142 ; SSE-NEXT:    retq
    143 ;
    144 ; AVX-LABEL: test_nt2xdouble:
    145 ; AVX:       # %bb.0: # %entry
    146 ; AVX-NEXT:    vmovntpd %xmm0, (%rdi)
    147 ; AVX-NEXT:    retq
    148 ;
    149 ; AVX512-LABEL: test_nt2xdouble:
    150 ; AVX512:       # %bb.0: # %entry
    151 ; AVX512-NEXT:    vmovntpd %xmm0, (%rdi)
    152 ; AVX512-NEXT:    retq
    153 entry:
    154   store <2 x double> %X, <2 x double>* %ptr, align 16, !nontemporal !1
    155   ret void
    156 }
    157 
    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)
    162 ; SSE-NEXT:    retq
    163 ;
    164 ; AVX-LABEL: test_nt16xi8:
    165 ; AVX:       # %bb.0: # %entry
    166 ; AVX-NEXT:    vmovntdq %xmm0, (%rdi)
    167 ; AVX-NEXT:    retq
    168 ;
    169 ; AVX512-LABEL: test_nt16xi8:
    170 ; AVX512:       # %bb.0: # %entry
    171 ; AVX512-NEXT:    vmovntdq %xmm0, (%rdi)
    172 ; AVX512-NEXT:    retq
    173 entry:
    174   store <16 x i8> %X, <16 x i8>* %ptr, align 16, !nontemporal !1
    175   ret void
    176 }
    177 
    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)
    182 ; SSE-NEXT:    retq
    183 ;
    184 ; AVX-LABEL: test_nt8xi16:
    185 ; AVX:       # %bb.0: # %entry
    186 ; AVX-NEXT:    vmovntdq %xmm0, (%rdi)
    187 ; AVX-NEXT:    retq
    188 ;
    189 ; AVX512-LABEL: test_nt8xi16:
    190 ; AVX512:       # %bb.0: # %entry
    191 ; AVX512-NEXT:    vmovntdq %xmm0, (%rdi)
    192 ; AVX512-NEXT:    retq
    193 entry:
    194   store <8 x i16> %X, <8 x i16>* %ptr, align 16, !nontemporal !1
    195   ret void
    196 }
    197 
    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)
    202 ; SSE-NEXT:    retq
    203 ;
    204 ; AVX-LABEL: test_nt4xi32:
    205 ; AVX:       # %bb.0: # %entry
    206 ; AVX-NEXT:    vmovntdq %xmm0, (%rdi)
    207 ; AVX-NEXT:    retq
    208 ;
    209 ; AVX512-LABEL: test_nt4xi32:
    210 ; AVX512:       # %bb.0: # %entry
    211 ; AVX512-NEXT:    vmovntdq %xmm0, (%rdi)
    212 ; AVX512-NEXT:    retq
    213 entry:
    214   store <4 x i32> %X, <4 x i32>* %ptr, align 16, !nontemporal !1
    215   ret void
    216 }
    217 
    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)
    222 ; SSE-NEXT:    retq
    223 ;
    224 ; AVX-LABEL: test_nt2xi64:
    225 ; AVX:       # %bb.0: # %entry
    226 ; AVX-NEXT:    vmovntdq %xmm0, (%rdi)
    227 ; AVX-NEXT:    retq
    228 ;
    229 ; AVX512-LABEL: test_nt2xi64:
    230 ; AVX512:       # %bb.0: # %entry
    231 ; AVX512-NEXT:    vmovntdq %xmm0, (%rdi)
    232 ; AVX512-NEXT:    retq
    233 entry:
    234   store <2 x i64> %X, <2 x i64>* %ptr, align 16, !nontemporal !1
    235   ret void
    236 }
    237 
    238 ;
    239 ; 128-bit Vector Loads
    240 ;
    241 
    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
    246 ; SSE2-NEXT:    retq
    247 ;
    248 ; SSE4A-LABEL: test_load_nt4xfloat:
    249 ; SSE4A:       # %bb.0: # %entry
    250 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
    251 ; SSE4A-NEXT:    retq
    252 ;
    253 ; SSE41-LABEL: test_load_nt4xfloat:
    254 ; SSE41:       # %bb.0: # %entry
    255 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    256 ; SSE41-NEXT:    retq
    257 ;
    258 ; AVX-LABEL: test_load_nt4xfloat:
    259 ; AVX:       # %bb.0: # %entry
    260 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    261 ; AVX-NEXT:    retq
    262 ;
    263 ; AVX512-LABEL: test_load_nt4xfloat:
    264 ; AVX512:       # %bb.0: # %entry
    265 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    266 ; AVX512-NEXT:    retq
    267 entry:
    268   %0 = load <4 x float>, <4 x float>* %ptr, align 16, !nontemporal !1
    269   ret <4 x float> %0
    270 }
    271 
    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
    276 ; SSE2-NEXT:    retq
    277 ;
    278 ; SSE4A-LABEL: test_load_nt2xdouble:
    279 ; SSE4A:       # %bb.0: # %entry
    280 ; SSE4A-NEXT:    movapd (%rdi), %xmm0
    281 ; SSE4A-NEXT:    retq
    282 ;
    283 ; SSE41-LABEL: test_load_nt2xdouble:
    284 ; SSE41:       # %bb.0: # %entry
    285 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    286 ; SSE41-NEXT:    retq
    287 ;
    288 ; AVX-LABEL: test_load_nt2xdouble:
    289 ; AVX:       # %bb.0: # %entry
    290 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    291 ; AVX-NEXT:    retq
    292 ;
    293 ; AVX512-LABEL: test_load_nt2xdouble:
    294 ; AVX512:       # %bb.0: # %entry
    295 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    296 ; AVX512-NEXT:    retq
    297 entry:
    298   %0 = load <2 x double>, <2 x double>* %ptr, align 16, !nontemporal !1
    299   ret <2 x double> %0
    300 }
    301 
    302 define <16 x i8> @test_load_nt16xi8(<16 x i8>* nocapture %ptr) {
    303 ; SSE-LABEL: test_load_nt16xi8:
    304 ; SSE:       # %bb.0: # %entry
    305 ; SSE-NEXT:    movntdqa (%rdi), %xmm0
    306 ; SSE-NEXT:    retq
    307 ;
    308 ; AVX-LABEL: test_load_nt16xi8:
    309 ; AVX:       # %bb.0: # %entry
    310 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    311 ; AVX-NEXT:    retq
    312 ;
    313 ; AVX512-LABEL: test_load_nt16xi8:
    314 ; AVX512:       # %bb.0: # %entry
    315 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    316 ; AVX512-NEXT:    retq
    317 entry:
    318   %0 = load <16 x i8>, <16 x i8>* %ptr, align 16, !nontemporal !1
    319   ret <16 x i8> %0
    320 }
    321 
    322 define <8 x i16> @test_load_nt8xi16(<8 x i16>* nocapture %ptr) {
    323 ; SSE-LABEL: test_load_nt8xi16:
    324 ; SSE:       # %bb.0: # %entry
    325 ; SSE-NEXT:    movntdqa (%rdi), %xmm0
    326 ; SSE-NEXT:    retq
    327 ;
    328 ; AVX-LABEL: test_load_nt8xi16:
    329 ; AVX:       # %bb.0: # %entry
    330 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    331 ; AVX-NEXT:    retq
    332 ;
    333 ; AVX512-LABEL: test_load_nt8xi16:
    334 ; AVX512:       # %bb.0: # %entry
    335 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    336 ; AVX512-NEXT:    retq
    337 entry:
    338   %0 = load <8 x i16>, <8 x i16>* %ptr, align 16, !nontemporal !1
    339   ret <8 x i16> %0
    340 }
    341 
    342 define <4 x i32> @test_load_nt4xi32(<4 x i32>* nocapture %ptr) {
    343 ; SSE-LABEL: test_load_nt4xi32:
    344 ; SSE:       # %bb.0: # %entry
    345 ; SSE-NEXT:    movntdqa (%rdi), %xmm0
    346 ; SSE-NEXT:    retq
    347 ;
    348 ; AVX-LABEL: test_load_nt4xi32:
    349 ; AVX:       # %bb.0: # %entry
    350 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    351 ; AVX-NEXT:    retq
    352 ;
    353 ; AVX512-LABEL: test_load_nt4xi32:
    354 ; AVX512:       # %bb.0: # %entry
    355 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    356 ; AVX512-NEXT:    retq
    357 entry:
    358   %0 = load <4 x i32>, <4 x i32>* %ptr, align 16, !nontemporal !1
    359   ret <4 x i32> %0
    360 }
    361 
    362 define <2 x i64> @test_load_nt2xi64(<2 x i64>* nocapture %ptr) {
    363 ; SSE-LABEL: test_load_nt2xi64:
    364 ; SSE:       # %bb.0: # %entry
    365 ; SSE-NEXT:    movntdqa (%rdi), %xmm0
    366 ; SSE-NEXT:    retq
    367 ;
    368 ; AVX-LABEL: test_load_nt2xi64:
    369 ; AVX:       # %bb.0: # %entry
    370 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    371 ; AVX-NEXT:    retq
    372 ;
    373 ; AVX512-LABEL: test_load_nt2xi64:
    374 ; AVX512:       # %bb.0: # %entry
    375 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    376 ; AVX512-NEXT:    retq
    377 entry:
    378   %0 = load <2 x i64>, <2 x i64>* %ptr, align 16, !nontemporal !1
    379   ret <2 x i64> %0
    380 }
    381 
    382 ;
    383 ; 256-bit Vector Stores
    384 ;
    385 
    386 define void @test_nt8xfloat(<8 x float>* nocapture %ptr, <8 x float> %X) {
    387 ; SSE-LABEL: test_nt8xfloat:
    388 ; SSE:       # %bb.0: # %entry
    389 ; SSE-NEXT:    movntps %xmm0, (%rdi)
    390 ; SSE-NEXT:    movntps %xmm1, 16(%rdi)
    391 ; SSE-NEXT:    retq
    392 ;
    393 ; AVX-LABEL: test_nt8xfloat:
    394 ; AVX:       # %bb.0: # %entry
    395 ; AVX-NEXT:    vmovntps %ymm0, (%rdi)
    396 ; AVX-NEXT:    vzeroupper
    397 ; AVX-NEXT:    retq
    398 ;
    399 ; AVX512-LABEL: test_nt8xfloat:
    400 ; AVX512:       # %bb.0: # %entry
    401 ; AVX512-NEXT:    vmovntps %ymm0, (%rdi)
    402 ; AVX512-NEXT:    vzeroupper
    403 ; AVX512-NEXT:    retq
    404 entry:
    405   store <8 x float> %X, <8 x float>* %ptr, align 32, !nontemporal !1
    406   ret void
    407 }
    408 
    409 define void @test_nt4xdouble(<4 x double>* nocapture %ptr, <4 x double> %X) {
    410 ; SSE-LABEL: test_nt4xdouble:
    411 ; SSE:       # %bb.0: # %entry
    412 ; SSE-NEXT:    movntpd %xmm0, (%rdi)
    413 ; SSE-NEXT:    movntpd %xmm1, 16(%rdi)
    414 ; SSE-NEXT:    retq
    415 ;
    416 ; AVX-LABEL: test_nt4xdouble:
    417 ; AVX:       # %bb.0: # %entry
    418 ; AVX-NEXT:    vmovntpd %ymm0, (%rdi)
    419 ; AVX-NEXT:    vzeroupper
    420 ; AVX-NEXT:    retq
    421 ;
    422 ; AVX512-LABEL: test_nt4xdouble:
    423 ; AVX512:       # %bb.0: # %entry
    424 ; AVX512-NEXT:    vmovntpd %ymm0, (%rdi)
    425 ; AVX512-NEXT:    vzeroupper
    426 ; AVX512-NEXT:    retq
    427 entry:
    428   store <4 x double> %X, <4 x double>* %ptr, align 32, !nontemporal !1
    429   ret void
    430 }
    431 
    432 define void @test_nt32xi8(<32 x i8>* nocapture %ptr, <32 x i8> %X) {
    433 ; SSE-LABEL: test_nt32xi8:
    434 ; SSE:       # %bb.0: # %entry
    435 ; SSE-NEXT:    movntdq %xmm0, (%rdi)
    436 ; SSE-NEXT:    movntdq %xmm1, 16(%rdi)
    437 ; SSE-NEXT:    retq
    438 ;
    439 ; AVX-LABEL: test_nt32xi8:
    440 ; AVX:       # %bb.0: # %entry
    441 ; AVX-NEXT:    vmovntdq %ymm0, (%rdi)
    442 ; AVX-NEXT:    vzeroupper
    443 ; AVX-NEXT:    retq
    444 ;
    445 ; AVX512-LABEL: test_nt32xi8:
    446 ; AVX512:       # %bb.0: # %entry
    447 ; AVX512-NEXT:    vmovntdq %ymm0, (%rdi)
    448 ; AVX512-NEXT:    vzeroupper
    449 ; AVX512-NEXT:    retq
    450 entry:
    451   store <32 x i8> %X, <32 x i8>* %ptr, align 32, !nontemporal !1
    452   ret void
    453 }
    454 
    455 define void @test_nt16xi16(<16 x i16>* nocapture %ptr, <16 x i16> %X) {
    456 ; SSE-LABEL: test_nt16xi16:
    457 ; SSE:       # %bb.0: # %entry
    458 ; SSE-NEXT:    movntdq %xmm0, (%rdi)
    459 ; SSE-NEXT:    movntdq %xmm1, 16(%rdi)
    460 ; SSE-NEXT:    retq
    461 ;
    462 ; AVX-LABEL: test_nt16xi16:
    463 ; AVX:       # %bb.0: # %entry
    464 ; AVX-NEXT:    vmovntdq %ymm0, (%rdi)
    465 ; AVX-NEXT:    vzeroupper
    466 ; AVX-NEXT:    retq
    467 ;
    468 ; AVX512-LABEL: test_nt16xi16:
    469 ; AVX512:       # %bb.0: # %entry
    470 ; AVX512-NEXT:    vmovntdq %ymm0, (%rdi)
    471 ; AVX512-NEXT:    vzeroupper
    472 ; AVX512-NEXT:    retq
    473 entry:
    474   store <16 x i16> %X, <16 x i16>* %ptr, align 32, !nontemporal !1
    475   ret void
    476 }
    477 
    478 define void @test_nt8xi32(<8 x i32>* nocapture %ptr, <8 x i32> %X) {
    479 ; SSE-LABEL: test_nt8xi32:
    480 ; SSE:       # %bb.0: # %entry
    481 ; SSE-NEXT:    movntdq %xmm0, (%rdi)
    482 ; SSE-NEXT:    movntdq %xmm1, 16(%rdi)
    483 ; SSE-NEXT:    retq
    484 ;
    485 ; AVX-LABEL: test_nt8xi32:
    486 ; AVX:       # %bb.0: # %entry
    487 ; AVX-NEXT:    vmovntdq %ymm0, (%rdi)
    488 ; AVX-NEXT:    vzeroupper
    489 ; AVX-NEXT:    retq
    490 ;
    491 ; AVX512-LABEL: test_nt8xi32:
    492 ; AVX512:       # %bb.0: # %entry
    493 ; AVX512-NEXT:    vmovntdq %ymm0, (%rdi)
    494 ; AVX512-NEXT:    vzeroupper
    495 ; AVX512-NEXT:    retq
    496 entry:
    497   store <8 x i32> %X, <8 x i32>* %ptr, align 32, !nontemporal !1
    498   ret void
    499 }
    500 
    501 define void @test_nt4xi64(<4 x i64>* nocapture %ptr, <4 x i64> %X) {
    502 ; SSE-LABEL: test_nt4xi64:
    503 ; SSE:       # %bb.0: # %entry
    504 ; SSE-NEXT:    movntdq %xmm0, (%rdi)
    505 ; SSE-NEXT:    movntdq %xmm1, 16(%rdi)
    506 ; SSE-NEXT:    retq
    507 ;
    508 ; AVX-LABEL: test_nt4xi64:
    509 ; AVX:       # %bb.0: # %entry
    510 ; AVX-NEXT:    vmovntdq %ymm0, (%rdi)
    511 ; AVX-NEXT:    vzeroupper
    512 ; AVX-NEXT:    retq
    513 ;
    514 ; AVX512-LABEL: test_nt4xi64:
    515 ; AVX512:       # %bb.0: # %entry
    516 ; AVX512-NEXT:    vmovntdq %ymm0, (%rdi)
    517 ; AVX512-NEXT:    vzeroupper
    518 ; AVX512-NEXT:    retq
    519 entry:
    520   store <4 x i64> %X, <4 x i64>* %ptr, align 32, !nontemporal !1
    521   ret void
    522 }
    523 
    524 ;
    525 ; 256-bit Vector Loads
    526 ;
    527 
    528 define <8 x float> @test_load_nt8xfloat(<8 x float>* nocapture %ptr) {
    529 ; SSE2-LABEL: test_load_nt8xfloat:
    530 ; SSE2:       # %bb.0: # %entry
    531 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    532 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    533 ; SSE2-NEXT:    retq
    534 ;
    535 ; SSE4A-LABEL: test_load_nt8xfloat:
    536 ; SSE4A:       # %bb.0: # %entry
    537 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
    538 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
    539 ; SSE4A-NEXT:    retq
    540 ;
    541 ; SSE41-LABEL: test_load_nt8xfloat:
    542 ; SSE41:       # %bb.0: # %entry
    543 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    544 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    545 ; SSE41-NEXT:    retq
    546 ;
    547 ; AVX1-LABEL: test_load_nt8xfloat:
    548 ; AVX1:       # %bb.0: # %entry
    549 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    550 ; AVX1-NEXT:    # implicit-def: $ymm1
    551 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
    552 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
    553 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    554 ; AVX1-NEXT:    retq
    555 ;
    556 ; AVX2-LABEL: test_load_nt8xfloat:
    557 ; AVX2:       # %bb.0: # %entry
    558 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    559 ; AVX2-NEXT:    retq
    560 ;
    561 ; AVX512-LABEL: test_load_nt8xfloat:
    562 ; AVX512:       # %bb.0: # %entry
    563 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    564 ; AVX512-NEXT:    retq
    565 entry:
    566   %0 = load <8 x float>, <8 x float>* %ptr, align 32, !nontemporal !1
    567   ret <8 x float> %0
    568 }
    569 
    570 define <4 x double> @test_load_nt4xdouble(<4 x double>* nocapture %ptr) {
    571 ; SSE2-LABEL: test_load_nt4xdouble:
    572 ; SSE2:       # %bb.0: # %entry
    573 ; SSE2-NEXT:    movapd (%rdi), %xmm0
    574 ; SSE2-NEXT:    movapd 16(%rdi), %xmm1
    575 ; SSE2-NEXT:    retq
    576 ;
    577 ; SSE4A-LABEL: test_load_nt4xdouble:
    578 ; SSE4A:       # %bb.0: # %entry
    579 ; SSE4A-NEXT:    movapd (%rdi), %xmm0
    580 ; SSE4A-NEXT:    movapd 16(%rdi), %xmm1
    581 ; SSE4A-NEXT:    retq
    582 ;
    583 ; SSE41-LABEL: test_load_nt4xdouble:
    584 ; SSE41:       # %bb.0: # %entry
    585 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    586 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    587 ; SSE41-NEXT:    retq
    588 ;
    589 ; AVX1-LABEL: test_load_nt4xdouble:
    590 ; AVX1:       # %bb.0: # %entry
    591 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    592 ; AVX1-NEXT:    # implicit-def: $ymm1
    593 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
    594 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
    595 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    596 ; AVX1-NEXT:    retq
    597 ;
    598 ; AVX2-LABEL: test_load_nt4xdouble:
    599 ; AVX2:       # %bb.0: # %entry
    600 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    601 ; AVX2-NEXT:    retq
    602 ;
    603 ; AVX512-LABEL: test_load_nt4xdouble:
    604 ; AVX512:       # %bb.0: # %entry
    605 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    606 ; AVX512-NEXT:    retq
    607 entry:
    608   %0 = load <4 x double>, <4 x double>* %ptr, align 32, !nontemporal !1
    609   ret <4 x double> %0
    610 }
    611 
    612 define <32 x i8> @test_load_nt32xi8(<32 x i8>* nocapture %ptr) {
    613 ; SSE2-LABEL: test_load_nt32xi8:
    614 ; SSE2:       # %bb.0: # %entry
    615 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    616 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    617 ; SSE2-NEXT:    retq
    618 ;
    619 ; SSE4A-LABEL: test_load_nt32xi8:
    620 ; SSE4A:       # %bb.0: # %entry
    621 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
    622 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
    623 ; SSE4A-NEXT:    retq
    624 ;
    625 ; SSE41-LABEL: test_load_nt32xi8:
    626 ; SSE41:       # %bb.0: # %entry
    627 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    628 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    629 ; SSE41-NEXT:    retq
    630 ;
    631 ; AVX1-LABEL: test_load_nt32xi8:
    632 ; AVX1:       # %bb.0: # %entry
    633 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    634 ; AVX1-NEXT:    # implicit-def: $ymm1
    635 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
    636 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
    637 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    638 ; AVX1-NEXT:    retq
    639 ;
    640 ; AVX2-LABEL: test_load_nt32xi8:
    641 ; AVX2:       # %bb.0: # %entry
    642 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    643 ; AVX2-NEXT:    retq
    644 ;
    645 ; AVX512-LABEL: test_load_nt32xi8:
    646 ; AVX512:       # %bb.0: # %entry
    647 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    648 ; AVX512-NEXT:    retq
    649 entry:
    650   %0 = load <32 x i8>, <32 x i8>* %ptr, align 32, !nontemporal !1
    651   ret <32 x i8> %0
    652 }
    653 
    654 define <16 x i16> @test_load_nt16xi16(<16 x i16>* nocapture %ptr) {
    655 ; SSE2-LABEL: test_load_nt16xi16:
    656 ; SSE2:       # %bb.0: # %entry
    657 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    658 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    659 ; SSE2-NEXT:    retq
    660 ;
    661 ; SSE4A-LABEL: test_load_nt16xi16:
    662 ; SSE4A:       # %bb.0: # %entry
    663 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
    664 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
    665 ; SSE4A-NEXT:    retq
    666 ;
    667 ; SSE41-LABEL: test_load_nt16xi16:
    668 ; SSE41:       # %bb.0: # %entry
    669 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    670 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    671 ; SSE41-NEXT:    retq
    672 ;
    673 ; AVX1-LABEL: test_load_nt16xi16:
    674 ; AVX1:       # %bb.0: # %entry
    675 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    676 ; AVX1-NEXT:    # implicit-def: $ymm1
    677 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
    678 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
    679 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    680 ; AVX1-NEXT:    retq
    681 ;
    682 ; AVX2-LABEL: test_load_nt16xi16:
    683 ; AVX2:       # %bb.0: # %entry
    684 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    685 ; AVX2-NEXT:    retq
    686 ;
    687 ; AVX512-LABEL: test_load_nt16xi16:
    688 ; AVX512:       # %bb.0: # %entry
    689 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    690 ; AVX512-NEXT:    retq
    691 entry:
    692   %0 = load <16 x i16>, <16 x i16>* %ptr, align 32, !nontemporal !1
    693   ret <16 x i16> %0
    694 }
    695 
    696 define <8 x i32> @test_load_nt8xi32(<8 x i32>* nocapture %ptr) {
    697 ; SSE2-LABEL: test_load_nt8xi32:
    698 ; SSE2:       # %bb.0: # %entry
    699 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    700 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    701 ; SSE2-NEXT:    retq
    702 ;
    703 ; SSE4A-LABEL: test_load_nt8xi32:
    704 ; SSE4A:       # %bb.0: # %entry
    705 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
    706 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
    707 ; SSE4A-NEXT:    retq
    708 ;
    709 ; SSE41-LABEL: test_load_nt8xi32:
    710 ; SSE41:       # %bb.0: # %entry
    711 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    712 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    713 ; SSE41-NEXT:    retq
    714 ;
    715 ; AVX1-LABEL: test_load_nt8xi32:
    716 ; AVX1:       # %bb.0: # %entry
    717 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    718 ; AVX1-NEXT:    # implicit-def: $ymm1
    719 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
    720 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
    721 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    722 ; AVX1-NEXT:    retq
    723 ;
    724 ; AVX2-LABEL: test_load_nt8xi32:
    725 ; AVX2:       # %bb.0: # %entry
    726 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    727 ; AVX2-NEXT:    retq
    728 ;
    729 ; AVX512-LABEL: test_load_nt8xi32:
    730 ; AVX512:       # %bb.0: # %entry
    731 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    732 ; AVX512-NEXT:    retq
    733 entry:
    734   %0 = load <8 x i32>, <8 x i32>* %ptr, align 32, !nontemporal !1
    735   ret <8 x i32> %0
    736 }
    737 
    738 define <4 x i64> @test_load_nt4xi64(<4 x i64>* nocapture %ptr) {
    739 ; SSE2-LABEL: test_load_nt4xi64:
    740 ; SSE2:       # %bb.0: # %entry
    741 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    742 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    743 ; SSE2-NEXT:    retq
    744 ;
    745 ; SSE4A-LABEL: test_load_nt4xi64:
    746 ; SSE4A:       # %bb.0: # %entry
    747 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
    748 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
    749 ; SSE4A-NEXT:    retq
    750 ;
    751 ; SSE41-LABEL: test_load_nt4xi64:
    752 ; SSE41:       # %bb.0: # %entry
    753 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    754 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    755 ; SSE41-NEXT:    retq
    756 ;
    757 ; AVX1-LABEL: test_load_nt4xi64:
    758 ; AVX1:       # %bb.0: # %entry
    759 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    760 ; AVX1-NEXT:    # implicit-def: $ymm1
    761 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
    762 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
    763 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    764 ; AVX1-NEXT:    retq
    765 ;
    766 ; AVX2-LABEL: test_load_nt4xi64:
    767 ; AVX2:       # %bb.0: # %entry
    768 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    769 ; AVX2-NEXT:    retq
    770 ;
    771 ; AVX512-LABEL: test_load_nt4xi64:
    772 ; AVX512:       # %bb.0: # %entry
    773 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    774 ; AVX512-NEXT:    retq
    775 entry:
    776   %0 = load <4 x i64>, <4 x i64>* %ptr, align 32, !nontemporal !1
    777   ret <4 x i64> %0
    778 }
    779 
    780 ;
    781 ; 512-bit Vector Stores
    782 ;
    783 
    784 define void @test_nt16xfloat(<16 x float>* nocapture %ptr, <16 x float> %X) {
    785 ; SSE-LABEL: test_nt16xfloat:
    786 ; SSE:       # %bb.0: # %entry
    787 ; SSE-NEXT:    movntps %xmm0, (%rdi)
    788 ; SSE-NEXT:    movntps %xmm1, 16(%rdi)
    789 ; SSE-NEXT:    movntps %xmm2, 32(%rdi)
    790 ; SSE-NEXT:    movntps %xmm3, 48(%rdi)
    791 ; SSE-NEXT:    retq
    792 ;
    793 ; AVX-LABEL: test_nt16xfloat:
    794 ; AVX:       # %bb.0: # %entry
    795 ; AVX-NEXT:    vmovntps %ymm0, (%rdi)
    796 ; AVX-NEXT:    vmovntps %ymm1, 32(%rdi)
    797 ; AVX-NEXT:    vzeroupper
    798 ; AVX-NEXT:    retq
    799 ;
    800 ; AVX512-LABEL: test_nt16xfloat:
    801 ; AVX512:       # %bb.0: # %entry
    802 ; AVX512-NEXT:    vmovntps %zmm0, (%rdi)
    803 ; AVX512-NEXT:    vzeroupper
    804 ; AVX512-NEXT:    retq
    805 entry:
    806   store <16 x float> %X, <16 x float>* %ptr, align 64, !nontemporal !1
    807   ret void
    808 }
    809 
    810 define void @test_nt8xdouble(<8 x double>* nocapture %ptr, <8 x double> %X) {
    811 ; SSE-LABEL: test_nt8xdouble:
    812 ; SSE:       # %bb.0: # %entry
    813 ; SSE-NEXT:    movntpd %xmm0, (%rdi)
    814 ; SSE-NEXT:    movntpd %xmm1, 16(%rdi)
    815 ; SSE-NEXT:    movntpd %xmm2, 32(%rdi)
    816 ; SSE-NEXT:    movntpd %xmm3, 48(%rdi)
    817 ; SSE-NEXT:    retq
    818 ;
    819 ; AVX-LABEL: test_nt8xdouble:
    820 ; AVX:       # %bb.0: # %entry
    821 ; AVX-NEXT:    vmovntpd %ymm0, (%rdi)
    822 ; AVX-NEXT:    vmovntpd %ymm1, 32(%rdi)
    823 ; AVX-NEXT:    vzeroupper
    824 ; AVX-NEXT:    retq
    825 ;
    826 ; AVX512-LABEL: test_nt8xdouble:
    827 ; AVX512:       # %bb.0: # %entry
    828 ; AVX512-NEXT:    vmovntpd %zmm0, (%rdi)
    829 ; AVX512-NEXT:    vzeroupper
    830 ; AVX512-NEXT:    retq
    831 entry:
    832   store <8 x double> %X, <8 x double>* %ptr, align 64, !nontemporal !1
    833   ret void
    834 }
    835 
    836 define void @test_nt64xi8(<64 x i8>* nocapture %ptr, <64 x i8> %X) {
    837 ; SSE-LABEL: test_nt64xi8:
    838 ; SSE:       # %bb.0: # %entry
    839 ; SSE-NEXT:    movntdq %xmm0, (%rdi)
    840 ; SSE-NEXT:    movntdq %xmm1, 16(%rdi)
    841 ; SSE-NEXT:    movntdq %xmm2, 32(%rdi)
    842 ; SSE-NEXT:    movntdq %xmm3, 48(%rdi)
    843 ; SSE-NEXT:    retq
    844 ;
    845 ; AVX-LABEL: test_nt64xi8:
    846 ; AVX:       # %bb.0: # %entry
    847 ; AVX-NEXT:    vmovntdq %ymm0, (%rdi)
    848 ; AVX-NEXT:    vmovntdq %ymm1, 32(%rdi)
    849 ; AVX-NEXT:    vzeroupper
    850 ; AVX-NEXT:    retq
    851 ;
    852 ; AVX512VL-LABEL: test_nt64xi8:
    853 ; AVX512VL:       # %bb.0: # %entry
    854 ; AVX512VL-NEXT:    vmovntdq %ymm0, (%rdi)
    855 ; AVX512VL-NEXT:    vmovntdq %ymm1, 32(%rdi)
    856 ; AVX512VL-NEXT:    vzeroupper
    857 ; AVX512VL-NEXT:    retq
    858 ;
    859 ; AVX512F-LABEL: test_nt64xi8:
    860 ; AVX512F:       # %bb.0: # %entry
    861 ; AVX512F-NEXT:    vmovntdq %ymm0, (%rdi)
    862 ; AVX512F-NEXT:    vmovntdq %ymm1, 32(%rdi)
    863 ; AVX512F-NEXT:    vzeroupper
    864 ; AVX512F-NEXT:    retq
    865 ;
    866 ; AVX512BW-LABEL: test_nt64xi8:
    867 ; AVX512BW:       # %bb.0: # %entry
    868 ; AVX512BW-NEXT:    vmovntdq %zmm0, (%rdi)
    869 ; AVX512BW-NEXT:    vzeroupper
    870 ; AVX512BW-NEXT:    retq
    871 entry:
    872   store <64 x i8> %X, <64 x i8>* %ptr, align 64, !nontemporal !1
    873   ret void
    874 }
    875 
    876 define void @test_nt32xi16(<32 x i16>* nocapture %ptr, <32 x i16> %X) {
    877 ; SSE-LABEL: test_nt32xi16:
    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)
    883 ; SSE-NEXT:    retq
    884 ;
    885 ; AVX-LABEL: test_nt32xi16:
    886 ; AVX:       # %bb.0: # %entry
    887 ; AVX-NEXT:    vmovntdq %ymm0, (%rdi)
    888 ; AVX-NEXT:    vmovntdq %ymm1, 32(%rdi)
    889 ; AVX-NEXT:    vzeroupper
    890 ; AVX-NEXT:    retq
    891 ;
    892 ; AVX512VL-LABEL: test_nt32xi16:
    893 ; AVX512VL:       # %bb.0: # %entry
    894 ; AVX512VL-NEXT:    vmovntdq %ymm0, (%rdi)
    895 ; AVX512VL-NEXT:    vmovntdq %ymm1, 32(%rdi)
    896 ; AVX512VL-NEXT:    vzeroupper
    897 ; AVX512VL-NEXT:    retq
    898 ;
    899 ; AVX512F-LABEL: test_nt32xi16:
    900 ; AVX512F:       # %bb.0: # %entry
    901 ; AVX512F-NEXT:    vmovntdq %ymm0, (%rdi)
    902 ; AVX512F-NEXT:    vmovntdq %ymm1, 32(%rdi)
    903 ; AVX512F-NEXT:    vzeroupper
    904 ; AVX512F-NEXT:    retq
    905 ;
    906 ; AVX512BW-LABEL: test_nt32xi16:
    907 ; AVX512BW:       # %bb.0: # %entry
    908 ; AVX512BW-NEXT:    vmovntdq %zmm0, (%rdi)
    909 ; AVX512BW-NEXT:    vzeroupper
    910 ; AVX512BW-NEXT:    retq
    911 entry:
    912   store <32 x i16> %X, <32 x i16>* %ptr, align 64, !nontemporal !1
    913   ret void
    914 }
    915 
    916 define void @test_nt16xi32(<16 x i32>* nocapture %ptr, <16 x i32> %X) {
    917 ; SSE-LABEL: test_nt16xi32:
    918 ; SSE:       # %bb.0: # %entry
    919 ; SSE-NEXT:    movntdq %xmm0, (%rdi)
    920 ; SSE-NEXT:    movntdq %xmm1, 16(%rdi)
    921 ; SSE-NEXT:    movntdq %xmm2, 32(%rdi)
    922 ; SSE-NEXT:    movntdq %xmm3, 48(%rdi)
    923 ; SSE-NEXT:    retq
    924 ;
    925 ; AVX-LABEL: test_nt16xi32:
    926 ; AVX:       # %bb.0: # %entry
    927 ; AVX-NEXT:    vmovntdq %ymm0, (%rdi)
    928 ; AVX-NEXT:    vmovntdq %ymm1, 32(%rdi)
    929 ; AVX-NEXT:    vzeroupper
    930 ; AVX-NEXT:    retq
    931 ;
    932 ; AVX512-LABEL: test_nt16xi32:
    933 ; AVX512:       # %bb.0: # %entry
    934 ; AVX512-NEXT:    vmovntdq %zmm0, (%rdi)
    935 ; AVX512-NEXT:    vzeroupper
    936 ; AVX512-NEXT:    retq
    937 entry:
    938   store <16 x i32> %X, <16 x i32>* %ptr, align 64, !nontemporal !1
    939   ret void
    940 }
    941 
    942 define void @test_nt8xi64(<8 x i64>* nocapture %ptr, <8 x i64> %X) {
    943 ; SSE-LABEL: test_nt8xi64:
    944 ; SSE:       # %bb.0: # %entry
    945 ; SSE-NEXT:    movntdq %xmm0, (%rdi)
    946 ; SSE-NEXT:    movntdq %xmm1, 16(%rdi)
    947 ; SSE-NEXT:    movntdq %xmm2, 32(%rdi)
    948 ; SSE-NEXT:    movntdq %xmm3, 48(%rdi)
    949 ; SSE-NEXT:    retq
    950 ;
    951 ; AVX-LABEL: test_nt8xi64:
    952 ; AVX:       # %bb.0: # %entry
    953 ; AVX-NEXT:    vmovntdq %ymm0, (%rdi)
    954 ; AVX-NEXT:    vmovntdq %ymm1, 32(%rdi)
    955 ; AVX-NEXT:    vzeroupper
    956 ; AVX-NEXT:    retq
    957 ;
    958 ; AVX512-LABEL: test_nt8xi64:
    959 ; AVX512:       # %bb.0: # %entry
    960 ; AVX512-NEXT:    vmovntdq %zmm0, (%rdi)
    961 ; AVX512-NEXT:    vzeroupper
    962 ; AVX512-NEXT:    retq
    963 entry:
    964   store <8 x i64> %X, <8 x i64>* %ptr, align 64, !nontemporal !1
    965   ret void
    966 }
    967 
    968 ;
    969 ; 512-bit Vector Loads
    970 ;
    971 
    972 define <16 x float> @test_load_nt16xfloat(<16 x float>* nocapture %ptr) {
    973 ; SSE2-LABEL: test_load_nt16xfloat:
    974 ; SSE2:       # %bb.0: # %entry
    975 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    976 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    977 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    978 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    979 ; SSE2-NEXT:    retq
    980 ;
    981 ; SSE4A-LABEL: test_load_nt16xfloat:
    982 ; SSE4A:       # %bb.0: # %entry
    983 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
    984 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
    985 ; SSE4A-NEXT:    movaps 32(%rdi), %xmm2
    986 ; SSE4A-NEXT:    movaps 48(%rdi), %xmm3
    987 ; SSE4A-NEXT:    retq
    988 ;
    989 ; SSE41-LABEL: test_load_nt16xfloat:
    990 ; SSE41:       # %bb.0: # %entry
    991 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    992 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    993 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    994 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    995 ; SSE41-NEXT:    retq
    996 ;
    997 ; AVX1-LABEL: test_load_nt16xfloat:
    998 ; AVX1:       # %bb.0: # %entry
    999 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
   1000 ; AVX1-NEXT:    # implicit-def: $ymm1
   1001 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
   1002 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
   1003 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1004 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1005 ; AVX1-NEXT:    # implicit-def: $ymm1
   1006 ; AVX1-NEXT:    vmovaps %xmm2, %xmm1
   1007 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
   1008 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1009 ; AVX1-NEXT:    retq
   1010 ;
   1011 ; AVX2-LABEL: test_load_nt16xfloat:
   1012 ; AVX2:       # %bb.0: # %entry
   1013 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
   1014 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1015 ; AVX2-NEXT:    retq
   1016 ;
   1017 ; AVX512-LABEL: test_load_nt16xfloat:
   1018 ; AVX512:       # %bb.0: # %entry
   1019 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
   1020 ; AVX512-NEXT:    retq
   1021 entry:
   1022   %0 = load <16 x float>, <16 x float>* %ptr, align 64, !nontemporal !1
   1023   ret <16 x float> %0
   1024 }
   1025 
   1026 define <8 x double> @test_load_nt8xdouble(<8 x double>* nocapture %ptr) {
   1027 ; SSE2-LABEL: test_load_nt8xdouble:
   1028 ; SSE2:       # %bb.0: # %entry
   1029 ; SSE2-NEXT:    movapd (%rdi), %xmm0
   1030 ; SSE2-NEXT:    movapd 16(%rdi), %xmm1
   1031 ; SSE2-NEXT:    movapd 32(%rdi), %xmm2
   1032 ; SSE2-NEXT:    movapd 48(%rdi), %xmm3
   1033 ; SSE2-NEXT:    retq
   1034 ;
   1035 ; SSE4A-LABEL: test_load_nt8xdouble:
   1036 ; SSE4A:       # %bb.0: # %entry
   1037 ; SSE4A-NEXT:    movapd (%rdi), %xmm0
   1038 ; SSE4A-NEXT:    movapd 16(%rdi), %xmm1
   1039 ; SSE4A-NEXT:    movapd 32(%rdi), %xmm2
   1040 ; SSE4A-NEXT:    movapd 48(%rdi), %xmm3
   1041 ; SSE4A-NEXT:    retq
   1042 ;
   1043 ; SSE41-LABEL: test_load_nt8xdouble:
   1044 ; SSE41:       # %bb.0: # %entry
   1045 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
   1046 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
   1047 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
   1048 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
   1049 ; SSE41-NEXT:    retq
   1050 ;
   1051 ; AVX1-LABEL: test_load_nt8xdouble:
   1052 ; AVX1:       # %bb.0: # %entry
   1053 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
   1054 ; AVX1-NEXT:    # implicit-def: $ymm1
   1055 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
   1056 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
   1057 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1058 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1059 ; AVX1-NEXT:    # implicit-def: $ymm1
   1060 ; AVX1-NEXT:    vmovaps %xmm2, %xmm1
   1061 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
   1062 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1063 ; AVX1-NEXT:    retq
   1064 ;
   1065 ; AVX2-LABEL: test_load_nt8xdouble:
   1066 ; AVX2:       # %bb.0: # %entry
   1067 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
   1068 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1069 ; AVX2-NEXT:    retq
   1070 ;
   1071 ; AVX512-LABEL: test_load_nt8xdouble:
   1072 ; AVX512:       # %bb.0: # %entry
   1073 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
   1074 ; AVX512-NEXT:    retq
   1075 entry:
   1076   %0 = load <8 x double>, <8 x double>* %ptr, align 64, !nontemporal !1
   1077   ret <8 x double> %0
   1078 }
   1079 
   1080 define <64 x i8> @test_load_nt64xi8(<64 x i8>* nocapture %ptr) {
   1081 ; SSE2-LABEL: test_load_nt64xi8:
   1082 ; SSE2:       # %bb.0: # %entry
   1083 ; SSE2-NEXT:    movaps (%rdi), %xmm0
   1084 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
   1085 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
   1086 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
   1087 ; SSE2-NEXT:    retq
   1088 ;
   1089 ; SSE4A-LABEL: test_load_nt64xi8:
   1090 ; SSE4A:       # %bb.0: # %entry
   1091 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
   1092 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
   1093 ; SSE4A-NEXT:    movaps 32(%rdi), %xmm2
   1094 ; SSE4A-NEXT:    movaps 48(%rdi), %xmm3
   1095 ; SSE4A-NEXT:    retq
   1096 ;
   1097 ; SSE41-LABEL: test_load_nt64xi8:
   1098 ; SSE41:       # %bb.0: # %entry
   1099 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
   1100 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
   1101 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
   1102 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
   1103 ; SSE41-NEXT:    retq
   1104 ;
   1105 ; AVX1-LABEL: test_load_nt64xi8:
   1106 ; AVX1:       # %bb.0: # %entry
   1107 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
   1108 ; AVX1-NEXT:    # implicit-def: $ymm1
   1109 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
   1110 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
   1111 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1112 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1113 ; AVX1-NEXT:    # implicit-def: $ymm1
   1114 ; AVX1-NEXT:    vmovaps %xmm2, %xmm1
   1115 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
   1116 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1117 ; AVX1-NEXT:    retq
   1118 ;
   1119 ; AVX2-LABEL: test_load_nt64xi8:
   1120 ; AVX2:       # %bb.0: # %entry
   1121 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
   1122 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1123 ; AVX2-NEXT:    retq
   1124 ;
   1125 ; AVX512VL-LABEL: test_load_nt64xi8:
   1126 ; AVX512VL:       # %bb.0: # %entry
   1127 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm0
   1128 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1129 ; AVX512VL-NEXT:    retq
   1130 ;
   1131 ; AVX512F-LABEL: test_load_nt64xi8:
   1132 ; AVX512F:       # %bb.0: # %entry
   1133 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm0
   1134 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1135 ; AVX512F-NEXT:    retq
   1136 ;
   1137 ; AVX512BW-LABEL: test_load_nt64xi8:
   1138 ; AVX512BW:       # %bb.0: # %entry
   1139 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm0
   1140 ; AVX512BW-NEXT:    retq
   1141 entry:
   1142   %0 = load <64 x i8>, <64 x i8>* %ptr, align 64, !nontemporal !1
   1143   ret <64 x i8> %0
   1144 }
   1145 
   1146 define <32 x i16> @test_load_nt32xi16(<32 x i16>* nocapture %ptr) {
   1147 ; SSE2-LABEL: test_load_nt32xi16:
   1148 ; SSE2:       # %bb.0: # %entry
   1149 ; SSE2-NEXT:    movaps (%rdi), %xmm0
   1150 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
   1151 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
   1152 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
   1153 ; SSE2-NEXT:    retq
   1154 ;
   1155 ; SSE4A-LABEL: test_load_nt32xi16:
   1156 ; SSE4A:       # %bb.0: # %entry
   1157 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
   1158 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
   1159 ; SSE4A-NEXT:    movaps 32(%rdi), %xmm2
   1160 ; SSE4A-NEXT:    movaps 48(%rdi), %xmm3
   1161 ; SSE4A-NEXT:    retq
   1162 ;
   1163 ; SSE41-LABEL: test_load_nt32xi16:
   1164 ; SSE41:       # %bb.0: # %entry
   1165 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
   1166 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
   1167 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
   1168 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
   1169 ; SSE41-NEXT:    retq
   1170 ;
   1171 ; AVX1-LABEL: test_load_nt32xi16:
   1172 ; AVX1:       # %bb.0: # %entry
   1173 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
   1174 ; AVX1-NEXT:    # implicit-def: $ymm1
   1175 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
   1176 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
   1177 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1178 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1179 ; AVX1-NEXT:    # implicit-def: $ymm1
   1180 ; AVX1-NEXT:    vmovaps %xmm2, %xmm1
   1181 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
   1182 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1183 ; AVX1-NEXT:    retq
   1184 ;
   1185 ; AVX2-LABEL: test_load_nt32xi16:
   1186 ; AVX2:       # %bb.0: # %entry
   1187 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
   1188 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1189 ; AVX2-NEXT:    retq
   1190 ;
   1191 ; AVX512VL-LABEL: test_load_nt32xi16:
   1192 ; AVX512VL:       # %bb.0: # %entry
   1193 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm0
   1194 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1195 ; AVX512VL-NEXT:    retq
   1196 ;
   1197 ; AVX512F-LABEL: test_load_nt32xi16:
   1198 ; AVX512F:       # %bb.0: # %entry
   1199 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm0
   1200 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1201 ; AVX512F-NEXT:    retq
   1202 ;
   1203 ; AVX512BW-LABEL: test_load_nt32xi16:
   1204 ; AVX512BW:       # %bb.0: # %entry
   1205 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm0
   1206 ; AVX512BW-NEXT:    retq
   1207 entry:
   1208   %0 = load <32 x i16>, <32 x i16>* %ptr, align 64, !nontemporal !1
   1209   ret <32 x i16> %0
   1210 }
   1211 
   1212 define <16 x i32> @test_load_nt16xi32(<16 x i32>* nocapture %ptr) {
   1213 ; SSE2-LABEL: test_load_nt16xi32:
   1214 ; SSE2:       # %bb.0: # %entry
   1215 ; SSE2-NEXT:    movaps (%rdi), %xmm0
   1216 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
   1217 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
   1218 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
   1219 ; SSE2-NEXT:    retq
   1220 ;
   1221 ; SSE4A-LABEL: test_load_nt16xi32:
   1222 ; SSE4A:       # %bb.0: # %entry
   1223 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
   1224 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
   1225 ; SSE4A-NEXT:    movaps 32(%rdi), %xmm2
   1226 ; SSE4A-NEXT:    movaps 48(%rdi), %xmm3
   1227 ; SSE4A-NEXT:    retq
   1228 ;
   1229 ; SSE41-LABEL: test_load_nt16xi32:
   1230 ; SSE41:       # %bb.0: # %entry
   1231 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
   1232 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
   1233 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
   1234 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
   1235 ; SSE41-NEXT:    retq
   1236 ;
   1237 ; AVX1-LABEL: test_load_nt16xi32:
   1238 ; AVX1:       # %bb.0: # %entry
   1239 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
   1240 ; AVX1-NEXT:    # implicit-def: $ymm1
   1241 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
   1242 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
   1243 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1244 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1245 ; AVX1-NEXT:    # implicit-def: $ymm1
   1246 ; AVX1-NEXT:    vmovaps %xmm2, %xmm1
   1247 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
   1248 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1249 ; AVX1-NEXT:    retq
   1250 ;
   1251 ; AVX2-LABEL: test_load_nt16xi32:
   1252 ; AVX2:       # %bb.0: # %entry
   1253 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
   1254 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1255 ; AVX2-NEXT:    retq
   1256 ;
   1257 ; AVX512-LABEL: test_load_nt16xi32:
   1258 ; AVX512:       # %bb.0: # %entry
   1259 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
   1260 ; AVX512-NEXT:    retq
   1261 entry:
   1262   %0 = load <16 x i32>, <16 x i32>* %ptr, align 64, !nontemporal !1
   1263   ret <16 x i32> %0
   1264 }
   1265 
   1266 define <8 x i64> @test_load_nt8xi64(<8 x i64>* nocapture %ptr) {
   1267 ; SSE2-LABEL: test_load_nt8xi64:
   1268 ; SSE2:       # %bb.0: # %entry
   1269 ; SSE2-NEXT:    movaps (%rdi), %xmm0
   1270 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
   1271 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
   1272 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
   1273 ; SSE2-NEXT:    retq
   1274 ;
   1275 ; SSE4A-LABEL: test_load_nt8xi64:
   1276 ; SSE4A:       # %bb.0: # %entry
   1277 ; SSE4A-NEXT:    movaps (%rdi), %xmm0
   1278 ; SSE4A-NEXT:    movaps 16(%rdi), %xmm1
   1279 ; SSE4A-NEXT:    movaps 32(%rdi), %xmm2
   1280 ; SSE4A-NEXT:    movaps 48(%rdi), %xmm3
   1281 ; SSE4A-NEXT:    retq
   1282 ;
   1283 ; SSE41-LABEL: test_load_nt8xi64:
   1284 ; SSE41:       # %bb.0: # %entry
   1285 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
   1286 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
   1287 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
   1288 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
   1289 ; SSE41-NEXT:    retq
   1290 ;
   1291 ; AVX1-LABEL: test_load_nt8xi64:
   1292 ; AVX1:       # %bb.0: # %entry
   1293 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
   1294 ; AVX1-NEXT:    # implicit-def: $ymm1
   1295 ; AVX1-NEXT:    vmovaps %xmm0, %xmm1
   1296 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm0
   1297 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1298 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1299 ; AVX1-NEXT:    # implicit-def: $ymm1
   1300 ; AVX1-NEXT:    vmovaps %xmm2, %xmm1
   1301 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
   1302 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1303 ; AVX1-NEXT:    retq
   1304 ;
   1305 ; AVX2-LABEL: test_load_nt8xi64:
   1306 ; AVX2:       # %bb.0: # %entry
   1307 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
   1308 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
   1309 ; AVX2-NEXT:    retq
   1310 ;
   1311 ; AVX512-LABEL: test_load_nt8xi64:
   1312 ; AVX512:       # %bb.0: # %entry
   1313 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
   1314 ; AVX512-NEXT:    retq
   1315 entry:
   1316   %0 = load <8 x i64>, <8 x i64>* %ptr, align 64, !nontemporal !1
   1317   ret <8 x i64> %0
   1318 }
   1319 
   1320 !1 = !{i32 1}
   1321