Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
      4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
      5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
      6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F
      7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512BW
      8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512VL
      9 
     10 define <4 x float> @test_v4f32(<4 x float>* %src) {
     11 ; SSE2-LABEL: test_v4f32:
     12 ; SSE2:       # BB#0:
     13 ; SSE2-NEXT:    movaps (%rdi), %xmm0
     14 ; SSE2-NEXT:    retq
     15 ;
     16 ; SSE41-LABEL: test_v4f32:
     17 ; SSE41:       # BB#0:
     18 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
     19 ; SSE41-NEXT:    retq
     20 ;
     21 ; AVX-LABEL: test_v4f32:
     22 ; AVX:       # BB#0:
     23 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
     24 ; AVX-NEXT:    retq
     25 ;
     26 ; AVX512-LABEL: test_v4f32:
     27 ; AVX512:       # BB#0:
     28 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
     29 ; AVX512-NEXT:    retq
     30   %1 = load <4 x float>, <4 x float>* %src, align 16, !nontemporal !1
     31   ret <4 x float> %1
     32 }
     33 
     34 define <4 x i32> @test_v4i32(<4 x i32>* %src) {
     35 ; SSE2-LABEL: test_v4i32:
     36 ; SSE2:       # BB#0:
     37 ; SSE2-NEXT:    movaps (%rdi), %xmm0
     38 ; SSE2-NEXT:    retq
     39 ;
     40 ; SSE41-LABEL: test_v4i32:
     41 ; SSE41:       # BB#0:
     42 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
     43 ; SSE41-NEXT:    retq
     44 ;
     45 ; AVX-LABEL: test_v4i32:
     46 ; AVX:       # BB#0:
     47 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
     48 ; AVX-NEXT:    retq
     49 ;
     50 ; AVX512F-LABEL: test_v4i32:
     51 ; AVX512F:       # BB#0:
     52 ; AVX512F-NEXT:    vmovntdqa (%rdi), %xmm0
     53 ; AVX512F-NEXT:    retq
     54 ;
     55 ; AVX512BW-LABEL: test_v4i32:
     56 ; AVX512BW:       # BB#0:
     57 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %xmm0
     58 ; AVX512BW-NEXT:    retq
     59 ;
     60 ; AVX512VL-LABEL: test_v4i32:
     61 ; AVX512VL:       # BB#0:
     62 ; AVX512VL-NEXT:    vmovdqa32 (%rdi), %xmm0
     63 ; AVX512VL-NEXT:    retq
     64   %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1
     65   ret <4 x i32> %1
     66 }
     67 
     68 define <2 x double> @test_v2f64(<2 x double>* %src) {
     69 ; SSE2-LABEL: test_v2f64:
     70 ; SSE2:       # BB#0:
     71 ; SSE2-NEXT:    movaps (%rdi), %xmm0
     72 ; SSE2-NEXT:    retq
     73 ;
     74 ; SSE41-LABEL: test_v2f64:
     75 ; SSE41:       # BB#0:
     76 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
     77 ; SSE41-NEXT:    retq
     78 ;
     79 ; AVX-LABEL: test_v2f64:
     80 ; AVX:       # BB#0:
     81 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
     82 ; AVX-NEXT:    retq
     83 ;
     84 ; AVX512-LABEL: test_v2f64:
     85 ; AVX512:       # BB#0:
     86 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
     87 ; AVX512-NEXT:    retq
     88   %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1
     89   ret <2 x double> %1
     90 }
     91 
     92 define <2 x i64> @test_v2i64(<2 x i64>* %src) {
     93 ; SSE2-LABEL: test_v2i64:
     94 ; SSE2:       # BB#0:
     95 ; SSE2-NEXT:    movaps (%rdi), %xmm0
     96 ; SSE2-NEXT:    retq
     97 ;
     98 ; SSE41-LABEL: test_v2i64:
     99 ; SSE41:       # BB#0:
    100 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    101 ; SSE41-NEXT:    retq
    102 ;
    103 ; AVX-LABEL: test_v2i64:
    104 ; AVX:       # BB#0:
    105 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    106 ; AVX-NEXT:    retq
    107 ;
    108 ; AVX512-LABEL: test_v2i64:
    109 ; AVX512:       # BB#0:
    110 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    111 ; AVX512-NEXT:    retq
    112   %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1
    113   ret <2 x i64> %1
    114 }
    115 
    116 define <8 x i16> @test_v8i16(<8 x i16>* %src) {
    117 ; SSE2-LABEL: test_v8i16:
    118 ; SSE2:       # BB#0:
    119 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    120 ; SSE2-NEXT:    retq
    121 ;
    122 ; SSE41-LABEL: test_v8i16:
    123 ; SSE41:       # BB#0:
    124 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    125 ; SSE41-NEXT:    retq
    126 ;
    127 ; AVX-LABEL: test_v8i16:
    128 ; AVX:       # BB#0:
    129 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    130 ; AVX-NEXT:    retq
    131 ;
    132 ; AVX512-LABEL: test_v8i16:
    133 ; AVX512:       # BB#0:
    134 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    135 ; AVX512-NEXT:    retq
    136   %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1
    137   ret <8 x i16> %1
    138 }
    139 
    140 define <16 x i8> @test_v16i8(<16 x i8>* %src) {
    141 ; SSE2-LABEL: test_v16i8:
    142 ; SSE2:       # BB#0:
    143 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    144 ; SSE2-NEXT:    retq
    145 ;
    146 ; SSE41-LABEL: test_v16i8:
    147 ; SSE41:       # BB#0:
    148 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    149 ; SSE41-NEXT:    retq
    150 ;
    151 ; AVX-LABEL: test_v16i8:
    152 ; AVX:       # BB#0:
    153 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    154 ; AVX-NEXT:    retq
    155 ;
    156 ; AVX512-LABEL: test_v16i8:
    157 ; AVX512:       # BB#0:
    158 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    159 ; AVX512-NEXT:    retq
    160   %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1
    161   ret <16 x i8> %1
    162 }
    163 
    164 ; And now YMM versions.
    165 
    166 define <8 x float> @test_v8f32(<8 x float>* %src) {
    167 ; SSE2-LABEL: test_v8f32:
    168 ; SSE2:       # BB#0:
    169 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    170 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    171 ; SSE2-NEXT:    retq
    172 ;
    173 ; SSE41-LABEL: test_v8f32:
    174 ; SSE41:       # BB#0:
    175 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    176 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    177 ; SSE41-NEXT:    retq
    178 ;
    179 ; AVX1-LABEL: test_v8f32:
    180 ; AVX1:       # BB#0:
    181 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    182 ; AVX1-NEXT:    retq
    183 ;
    184 ; AVX2-LABEL: test_v8f32:
    185 ; AVX2:       # BB#0:
    186 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    187 ; AVX2-NEXT:    retq
    188 ;
    189 ; AVX512-LABEL: test_v8f32:
    190 ; AVX512:       # BB#0:
    191 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    192 ; AVX512-NEXT:    retq
    193   %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1
    194   ret <8 x float> %1
    195 }
    196 
    197 define <8 x i32> @test_v8i32(<8 x i32>* %src) {
    198 ; SSE2-LABEL: test_v8i32:
    199 ; SSE2:       # BB#0:
    200 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    201 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    202 ; SSE2-NEXT:    retq
    203 ;
    204 ; SSE41-LABEL: test_v8i32:
    205 ; SSE41:       # BB#0:
    206 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    207 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    208 ; SSE41-NEXT:    retq
    209 ;
    210 ; AVX1-LABEL: test_v8i32:
    211 ; AVX1:       # BB#0:
    212 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    213 ; AVX1-NEXT:    retq
    214 ;
    215 ; AVX2-LABEL: test_v8i32:
    216 ; AVX2:       # BB#0:
    217 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    218 ; AVX2-NEXT:    retq
    219 ;
    220 ; AVX512F-LABEL: test_v8i32:
    221 ; AVX512F:       # BB#0:
    222 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm0
    223 ; AVX512F-NEXT:    retq
    224 ;
    225 ; AVX512BW-LABEL: test_v8i32:
    226 ; AVX512BW:       # BB#0:
    227 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %ymm0
    228 ; AVX512BW-NEXT:    retq
    229 ;
    230 ; AVX512VL-LABEL: test_v8i32:
    231 ; AVX512VL:       # BB#0:
    232 ; AVX512VL-NEXT:    vmovdqa32 (%rdi), %ymm0
    233 ; AVX512VL-NEXT:    retq
    234   %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1
    235   ret <8 x i32> %1
    236 }
    237 
    238 define <4 x double> @test_v4f64(<4 x double>* %src) {
    239 ; SSE2-LABEL: test_v4f64:
    240 ; SSE2:       # BB#0:
    241 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    242 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    243 ; SSE2-NEXT:    retq
    244 ;
    245 ; SSE41-LABEL: test_v4f64:
    246 ; SSE41:       # BB#0:
    247 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    248 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    249 ; SSE41-NEXT:    retq
    250 ;
    251 ; AVX1-LABEL: test_v4f64:
    252 ; AVX1:       # BB#0:
    253 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    254 ; AVX1-NEXT:    retq
    255 ;
    256 ; AVX2-LABEL: test_v4f64:
    257 ; AVX2:       # BB#0:
    258 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    259 ; AVX2-NEXT:    retq
    260 ;
    261 ; AVX512-LABEL: test_v4f64:
    262 ; AVX512:       # BB#0:
    263 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    264 ; AVX512-NEXT:    retq
    265   %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1
    266   ret <4 x double> %1
    267 }
    268 
    269 define <4 x i64> @test_v4i64(<4 x i64>* %src) {
    270 ; SSE2-LABEL: test_v4i64:
    271 ; SSE2:       # BB#0:
    272 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    273 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    274 ; SSE2-NEXT:    retq
    275 ;
    276 ; SSE41-LABEL: test_v4i64:
    277 ; SSE41:       # BB#0:
    278 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    279 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    280 ; SSE41-NEXT:    retq
    281 ;
    282 ; AVX1-LABEL: test_v4i64:
    283 ; AVX1:       # BB#0:
    284 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    285 ; AVX1-NEXT:    retq
    286 ;
    287 ; AVX2-LABEL: test_v4i64:
    288 ; AVX2:       # BB#0:
    289 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    290 ; AVX2-NEXT:    retq
    291 ;
    292 ; AVX512-LABEL: test_v4i64:
    293 ; AVX512:       # BB#0:
    294 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    295 ; AVX512-NEXT:    retq
    296   %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1
    297   ret <4 x i64> %1
    298 }
    299 
    300 define <16 x i16> @test_v16i16(<16 x i16>* %src) {
    301 ; SSE2-LABEL: test_v16i16:
    302 ; SSE2:       # BB#0:
    303 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    304 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    305 ; SSE2-NEXT:    retq
    306 ;
    307 ; SSE41-LABEL: test_v16i16:
    308 ; SSE41:       # BB#0:
    309 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    310 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    311 ; SSE41-NEXT:    retq
    312 ;
    313 ; AVX1-LABEL: test_v16i16:
    314 ; AVX1:       # BB#0:
    315 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    316 ; AVX1-NEXT:    retq
    317 ;
    318 ; AVX2-LABEL: test_v16i16:
    319 ; AVX2:       # BB#0:
    320 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    321 ; AVX2-NEXT:    retq
    322 ;
    323 ; AVX512-LABEL: test_v16i16:
    324 ; AVX512:       # BB#0:
    325 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    326 ; AVX512-NEXT:    retq
    327   %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1
    328   ret <16 x i16> %1
    329 }
    330 
    331 define <32 x i8> @test_v32i8(<32 x i8>* %src) {
    332 ; SSE2-LABEL: test_v32i8:
    333 ; SSE2:       # BB#0:
    334 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    335 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    336 ; SSE2-NEXT:    retq
    337 ;
    338 ; SSE41-LABEL: test_v32i8:
    339 ; SSE41:       # BB#0:
    340 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    341 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    342 ; SSE41-NEXT:    retq
    343 ;
    344 ; AVX1-LABEL: test_v32i8:
    345 ; AVX1:       # BB#0:
    346 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    347 ; AVX1-NEXT:    retq
    348 ;
    349 ; AVX2-LABEL: test_v32i8:
    350 ; AVX2:       # BB#0:
    351 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    352 ; AVX2-NEXT:    retq
    353 ;
    354 ; AVX512-LABEL: test_v32i8:
    355 ; AVX512:       # BB#0:
    356 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    357 ; AVX512-NEXT:    retq
    358   %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1
    359   ret <32 x i8> %1
    360 }
    361 
    362 ; And now ZMM versions.
    363 
    364 define <16 x float> @test_v16f32(<16 x float>* %src) {
    365 ; SSE2-LABEL: test_v16f32:
    366 ; SSE2:       # BB#0:
    367 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    368 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    369 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    370 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    371 ; SSE2-NEXT:    retq
    372 ;
    373 ; SSE41-LABEL: test_v16f32:
    374 ; SSE41:       # BB#0:
    375 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    376 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    377 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    378 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    379 ; SSE41-NEXT:    retq
    380 ;
    381 ; AVX1-LABEL: test_v16f32:
    382 ; AVX1:       # BB#0:
    383 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    384 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm1
    385 ; AVX1-NEXT:    retq
    386 ;
    387 ; AVX2-LABEL: test_v16f32:
    388 ; AVX2:       # BB#0:
    389 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    390 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    391 ; AVX2-NEXT:    retq
    392 ;
    393 ; AVX512-LABEL: test_v16f32:
    394 ; AVX512:       # BB#0:
    395 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
    396 ; AVX512-NEXT:    retq
    397   %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1
    398   ret <16 x float> %1
    399 }
    400 
    401 define <16 x i32> @test_v16i32(<16 x i32>* %src) {
    402 ; SSE2-LABEL: test_v16i32:
    403 ; SSE2:       # BB#0:
    404 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    405 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    406 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    407 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    408 ; SSE2-NEXT:    retq
    409 ;
    410 ; SSE41-LABEL: test_v16i32:
    411 ; SSE41:       # BB#0:
    412 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    413 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    414 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    415 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    416 ; SSE41-NEXT:    retq
    417 ;
    418 ; AVX1-LABEL: test_v16i32:
    419 ; AVX1:       # BB#0:
    420 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    421 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm1
    422 ; AVX1-NEXT:    retq
    423 ;
    424 ; AVX2-LABEL: test_v16i32:
    425 ; AVX2:       # BB#0:
    426 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    427 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    428 ; AVX2-NEXT:    retq
    429 ;
    430 ; AVX512-LABEL: test_v16i32:
    431 ; AVX512:       # BB#0:
    432 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
    433 ; AVX512-NEXT:    retq
    434   %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1
    435   ret <16 x i32> %1
    436 }
    437 
    438 define <8 x double> @test_v8f64(<8 x double>* %src) {
    439 ; SSE2-LABEL: test_v8f64:
    440 ; SSE2:       # BB#0:
    441 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    442 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    443 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    444 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    445 ; SSE2-NEXT:    retq
    446 ;
    447 ; SSE41-LABEL: test_v8f64:
    448 ; SSE41:       # BB#0:
    449 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    450 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    451 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    452 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    453 ; SSE41-NEXT:    retq
    454 ;
    455 ; AVX1-LABEL: test_v8f64:
    456 ; AVX1:       # BB#0:
    457 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    458 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm1
    459 ; AVX1-NEXT:    retq
    460 ;
    461 ; AVX2-LABEL: test_v8f64:
    462 ; AVX2:       # BB#0:
    463 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    464 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    465 ; AVX2-NEXT:    retq
    466 ;
    467 ; AVX512-LABEL: test_v8f64:
    468 ; AVX512:       # BB#0:
    469 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
    470 ; AVX512-NEXT:    retq
    471   %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1
    472   ret <8 x double> %1
    473 }
    474 
    475 define <8 x i64> @test_v8i64(<8 x i64>* %src) {
    476 ; SSE2-LABEL: test_v8i64:
    477 ; SSE2:       # BB#0:
    478 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    479 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    480 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    481 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    482 ; SSE2-NEXT:    retq
    483 ;
    484 ; SSE41-LABEL: test_v8i64:
    485 ; SSE41:       # BB#0:
    486 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    487 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    488 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    489 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    490 ; SSE41-NEXT:    retq
    491 ;
    492 ; AVX1-LABEL: test_v8i64:
    493 ; AVX1:       # BB#0:
    494 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    495 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm1
    496 ; AVX1-NEXT:    retq
    497 ;
    498 ; AVX2-LABEL: test_v8i64:
    499 ; AVX2:       # BB#0:
    500 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    501 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    502 ; AVX2-NEXT:    retq
    503 ;
    504 ; AVX512-LABEL: test_v8i64:
    505 ; AVX512:       # BB#0:
    506 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
    507 ; AVX512-NEXT:    retq
    508   %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1
    509   ret <8 x i64> %1
    510 }
    511 
    512 define <32 x i16> @test_v32i16(<32 x i16>* %src) {
    513 ; SSE2-LABEL: test_v32i16:
    514 ; SSE2:       # BB#0:
    515 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    516 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    517 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    518 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    519 ; SSE2-NEXT:    retq
    520 ;
    521 ; SSE41-LABEL: test_v32i16:
    522 ; SSE41:       # BB#0:
    523 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    524 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    525 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    526 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    527 ; SSE41-NEXT:    retq
    528 ;
    529 ; AVX1-LABEL: test_v32i16:
    530 ; AVX1:       # BB#0:
    531 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    532 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm1
    533 ; AVX1-NEXT:    retq
    534 ;
    535 ; AVX2-LABEL: test_v32i16:
    536 ; AVX2:       # BB#0:
    537 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    538 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    539 ; AVX2-NEXT:    retq
    540 ;
    541 ; AVX512F-LABEL: test_v32i16:
    542 ; AVX512F:       # BB#0:
    543 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm0
    544 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm1
    545 ; AVX512F-NEXT:    retq
    546 ;
    547 ; AVX512BW-LABEL: test_v32i16:
    548 ; AVX512BW:       # BB#0:
    549 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm0
    550 ; AVX512BW-NEXT:    retq
    551 ;
    552 ; AVX512VL-LABEL: test_v32i16:
    553 ; AVX512VL:       # BB#0:
    554 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm0
    555 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm1
    556 ; AVX512VL-NEXT:    retq
    557   %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1
    558   ret <32 x i16> %1
    559 }
    560 
    561 define <64 x i8> @test_v64i8(<64 x i8>* %src) {
    562 ; SSE2-LABEL: test_v64i8:
    563 ; SSE2:       # BB#0:
    564 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    565 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    566 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    567 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    568 ; SSE2-NEXT:    retq
    569 ;
    570 ; SSE41-LABEL: test_v64i8:
    571 ; SSE41:       # BB#0:
    572 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    573 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    574 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    575 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    576 ; SSE41-NEXT:    retq
    577 ;
    578 ; AVX1-LABEL: test_v64i8:
    579 ; AVX1:       # BB#0:
    580 ; AVX1-NEXT:    vmovaps (%rdi), %ymm0
    581 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm1
    582 ; AVX1-NEXT:    retq
    583 ;
    584 ; AVX2-LABEL: test_v64i8:
    585 ; AVX2:       # BB#0:
    586 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    587 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    588 ; AVX2-NEXT:    retq
    589 ;
    590 ; AVX512F-LABEL: test_v64i8:
    591 ; AVX512F:       # BB#0:
    592 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm0
    593 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm1
    594 ; AVX512F-NEXT:    retq
    595 ;
    596 ; AVX512BW-LABEL: test_v64i8:
    597 ; AVX512BW:       # BB#0:
    598 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm0
    599 ; AVX512BW-NEXT:    retq
    600 ;
    601 ; AVX512VL-LABEL: test_v64i8:
    602 ; AVX512VL:       # BB#0:
    603 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm0
    604 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm1
    605 ; AVX512VL-NEXT:    retq
    606   %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1
    607   ret <64 x i8> %1
    608 }
    609 
    610 
    611 ; Check cases where the load would be folded.
    612 
    613 define <4 x float> @test_arg_v4f32(<4 x float> %arg, <4 x float>* %src) {
    614 ; SSE-LABEL: test_arg_v4f32:
    615 ; SSE:       # BB#0:
    616 ; SSE-NEXT:    addps (%rdi), %xmm0
    617 ; SSE-NEXT:    retq
    618 ;
    619 ; AVX-LABEL: test_arg_v4f32:
    620 ; AVX:       # BB#0:
    621 ; AVX-NEXT:    vaddps (%rdi), %xmm0, %xmm0
    622 ; AVX-NEXT:    retq
    623 ;
    624 ; AVX512-LABEL: test_arg_v4f32:
    625 ; AVX512:       # BB#0:
    626 ; AVX512-NEXT:    vaddps (%rdi), %xmm0, %xmm0
    627 ; AVX512-NEXT:    retq
    628   %1 = load <4 x float>, <4 x float>* %src, align 16, !nontemporal !1
    629   %2 = fadd <4 x float> %arg, %1
    630   ret <4 x float> %2
    631 }
    632 
    633 define <4 x i32> @test_arg_v4i32(<4 x i32> %arg, <4 x i32>* %src) {
    634 ; SSE-LABEL: test_arg_v4i32:
    635 ; SSE:       # BB#0:
    636 ; SSE-NEXT:    paddd (%rdi), %xmm0
    637 ; SSE-NEXT:    retq
    638 ;
    639 ; AVX-LABEL: test_arg_v4i32:
    640 ; AVX:       # BB#0:
    641 ; AVX-NEXT:    vpaddd (%rdi), %xmm0, %xmm0
    642 ; AVX-NEXT:    retq
    643 ;
    644 ; AVX512-LABEL: test_arg_v4i32:
    645 ; AVX512:       # BB#0:
    646 ; AVX512-NEXT:    vpaddd (%rdi), %xmm0, %xmm0
    647 ; AVX512-NEXT:    retq
    648   %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1
    649   %2 = add <4 x i32> %arg, %1
    650   ret <4 x i32> %2
    651 }
    652 
    653 define <2 x double> @test_arg_v2f64(<2 x double> %arg, <2 x double>* %src) {
    654 ; SSE-LABEL: test_arg_v2f64:
    655 ; SSE:       # BB#0:
    656 ; SSE-NEXT:    addpd (%rdi), %xmm0
    657 ; SSE-NEXT:    retq
    658 ;
    659 ; AVX-LABEL: test_arg_v2f64:
    660 ; AVX:       # BB#0:
    661 ; AVX-NEXT:    vaddpd (%rdi), %xmm0, %xmm0
    662 ; AVX-NEXT:    retq
    663 ;
    664 ; AVX512-LABEL: test_arg_v2f64:
    665 ; AVX512:       # BB#0:
    666 ; AVX512-NEXT:    vaddpd (%rdi), %xmm0, %xmm0
    667 ; AVX512-NEXT:    retq
    668   %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1
    669   %2 = fadd <2 x double> %arg, %1
    670   ret <2 x double> %2
    671 }
    672 
    673 define <2 x i64> @test_arg_v2i64(<2 x i64> %arg, <2 x i64>* %src) {
    674 ; SSE-LABEL: test_arg_v2i64:
    675 ; SSE:       # BB#0:
    676 ; SSE-NEXT:    paddq (%rdi), %xmm0
    677 ; SSE-NEXT:    retq
    678 ;
    679 ; AVX-LABEL: test_arg_v2i64:
    680 ; AVX:       # BB#0:
    681 ; AVX-NEXT:    vpaddq (%rdi), %xmm0, %xmm0
    682 ; AVX-NEXT:    retq
    683 ;
    684 ; AVX512-LABEL: test_arg_v2i64:
    685 ; AVX512:       # BB#0:
    686 ; AVX512-NEXT:    vpaddq (%rdi), %xmm0, %xmm0
    687 ; AVX512-NEXT:    retq
    688   %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1
    689   %2 = add <2 x i64> %arg, %1
    690   ret <2 x i64> %2
    691 }
    692 
    693 define <8 x i16> @test_arg_v8i16(<8 x i16> %arg, <8 x i16>* %src) {
    694 ; SSE-LABEL: test_arg_v8i16:
    695 ; SSE:       # BB#0:
    696 ; SSE-NEXT:    paddw (%rdi), %xmm0
    697 ; SSE-NEXT:    retq
    698 ;
    699 ; AVX-LABEL: test_arg_v8i16:
    700 ; AVX:       # BB#0:
    701 ; AVX-NEXT:    vpaddw (%rdi), %xmm0, %xmm0
    702 ; AVX-NEXT:    retq
    703 ;
    704 ; AVX512-LABEL: test_arg_v8i16:
    705 ; AVX512:       # BB#0:
    706 ; AVX512-NEXT:    vpaddw (%rdi), %xmm0, %xmm0
    707 ; AVX512-NEXT:    retq
    708   %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1
    709   %2 = add <8 x i16> %arg, %1
    710   ret <8 x i16> %2
    711 }
    712 
    713 define <16 x i8> @test_arg_v16i8(<16 x i8> %arg, <16 x i8>* %src) {
    714 ; SSE-LABEL: test_arg_v16i8:
    715 ; SSE:       # BB#0:
    716 ; SSE-NEXT:    paddb (%rdi), %xmm0
    717 ; SSE-NEXT:    retq
    718 ;
    719 ; AVX-LABEL: test_arg_v16i8:
    720 ; AVX:       # BB#0:
    721 ; AVX-NEXT:    vpaddb (%rdi), %xmm0, %xmm0
    722 ; AVX-NEXT:    retq
    723 ;
    724 ; AVX512-LABEL: test_arg_v16i8:
    725 ; AVX512:       # BB#0:
    726 ; AVX512-NEXT:    vpaddb (%rdi), %xmm0, %xmm0
    727 ; AVX512-NEXT:    retq
    728   %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1
    729   %2 = add <16 x i8> %arg, %1
    730   ret <16 x i8> %2
    731 }
    732 
    733 ; And now YMM versions.
    734 
    735 define <8 x float> @test_arg_v8f32(<8 x float> %arg, <8 x float>* %src) {
    736 ; SSE-LABEL: test_arg_v8f32:
    737 ; SSE:       # BB#0:
    738 ; SSE-NEXT:    addps (%rdi), %xmm0
    739 ; SSE-NEXT:    addps 16(%rdi), %xmm1
    740 ; SSE-NEXT:    retq
    741 ;
    742 ; AVX-LABEL: test_arg_v8f32:
    743 ; AVX:       # BB#0:
    744 ; AVX-NEXT:    vaddps (%rdi), %ymm0, %ymm0
    745 ; AVX-NEXT:    retq
    746 ;
    747 ; AVX512-LABEL: test_arg_v8f32:
    748 ; AVX512:       # BB#0:
    749 ; AVX512-NEXT:    vaddps (%rdi), %ymm0, %ymm0
    750 ; AVX512-NEXT:    retq
    751   %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1
    752   %2 = fadd <8 x float> %arg, %1
    753   ret <8 x float> %2
    754 }
    755 
    756 define <8 x i32> @test_arg_v8i32(<8 x i32> %arg, <8 x i32>* %src) {
    757 ; SSE-LABEL: test_arg_v8i32:
    758 ; SSE:       # BB#0:
    759 ; SSE-NEXT:    paddd (%rdi), %xmm0
    760 ; SSE-NEXT:    paddd 16(%rdi), %xmm1
    761 ; SSE-NEXT:    retq
    762 ;
    763 ; AVX1-LABEL: test_arg_v8i32:
    764 ; AVX1:       # BB#0:
    765 ; AVX1-NEXT:    vmovaps (%rdi), %ymm1
    766 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    767 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    768 ; AVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm2
    769 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
    770 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    771 ; AVX1-NEXT:    retq
    772 ;
    773 ; AVX2-LABEL: test_arg_v8i32:
    774 ; AVX2:       # BB#0:
    775 ; AVX2-NEXT:    vpaddd (%rdi), %ymm0, %ymm0
    776 ; AVX2-NEXT:    retq
    777 ;
    778 ; AVX512-LABEL: test_arg_v8i32:
    779 ; AVX512:       # BB#0:
    780 ; AVX512-NEXT:    vpaddd (%rdi), %ymm0, %ymm0
    781 ; AVX512-NEXT:    retq
    782   %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1
    783   %2 = add <8 x i32> %arg, %1
    784   ret <8 x i32> %2
    785 }
    786 
    787 define <4 x double> @test_arg_v4f64(<4 x double> %arg, <4 x double>* %src) {
    788 ; SSE-LABEL: test_arg_v4f64:
    789 ; SSE:       # BB#0:
    790 ; SSE-NEXT:    addpd (%rdi), %xmm0
    791 ; SSE-NEXT:    addpd 16(%rdi), %xmm1
    792 ; SSE-NEXT:    retq
    793 ;
    794 ; AVX-LABEL: test_arg_v4f64:
    795 ; AVX:       # BB#0:
    796 ; AVX-NEXT:    vaddpd (%rdi), %ymm0, %ymm0
    797 ; AVX-NEXT:    retq
    798 ;
    799 ; AVX512-LABEL: test_arg_v4f64:
    800 ; AVX512:       # BB#0:
    801 ; AVX512-NEXT:    vaddpd (%rdi), %ymm0, %ymm0
    802 ; AVX512-NEXT:    retq
    803   %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1
    804   %2 = fadd <4 x double> %arg, %1
    805   ret <4 x double> %2
    806 }
    807 
    808 define <4 x i64> @test_arg_v4i64(<4 x i64> %arg, <4 x i64>* %src) {
    809 ; SSE-LABEL: test_arg_v4i64:
    810 ; SSE:       # BB#0:
    811 ; SSE-NEXT:    paddq (%rdi), %xmm0
    812 ; SSE-NEXT:    paddq 16(%rdi), %xmm1
    813 ; SSE-NEXT:    retq
    814 ;
    815 ; AVX1-LABEL: test_arg_v4i64:
    816 ; AVX1:       # BB#0:
    817 ; AVX1-NEXT:    vmovaps (%rdi), %ymm1
    818 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    819 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    820 ; AVX1-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
    821 ; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
    822 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    823 ; AVX1-NEXT:    retq
    824 ;
    825 ; AVX2-LABEL: test_arg_v4i64:
    826 ; AVX2:       # BB#0:
    827 ; AVX2-NEXT:    vpaddq (%rdi), %ymm0, %ymm0
    828 ; AVX2-NEXT:    retq
    829 ;
    830 ; AVX512-LABEL: test_arg_v4i64:
    831 ; AVX512:       # BB#0:
    832 ; AVX512-NEXT:    vpaddq (%rdi), %ymm0, %ymm0
    833 ; AVX512-NEXT:    retq
    834   %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1
    835   %2 = add <4 x i64> %arg, %1
    836   ret <4 x i64> %2
    837 }
    838 
    839 define <16 x i16> @test_arg_v16i16(<16 x i16> %arg, <16 x i16>* %src) {
    840 ; SSE-LABEL: test_arg_v16i16:
    841 ; SSE:       # BB#0:
    842 ; SSE-NEXT:    paddw (%rdi), %xmm0
    843 ; SSE-NEXT:    paddw 16(%rdi), %xmm1
    844 ; SSE-NEXT:    retq
    845 ;
    846 ; AVX1-LABEL: test_arg_v16i16:
    847 ; AVX1:       # BB#0:
    848 ; AVX1-NEXT:    vmovaps (%rdi), %ymm1
    849 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    850 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    851 ; AVX1-NEXT:    vpaddw %xmm3, %xmm2, %xmm2
    852 ; AVX1-NEXT:    vpaddw %xmm1, %xmm0, %xmm0
    853 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    854 ; AVX1-NEXT:    retq
    855 ;
    856 ; AVX2-LABEL: test_arg_v16i16:
    857 ; AVX2:       # BB#0:
    858 ; AVX2-NEXT:    vpaddw (%rdi), %ymm0, %ymm0
    859 ; AVX2-NEXT:    retq
    860 ;
    861 ; AVX512-LABEL: test_arg_v16i16:
    862 ; AVX512:       # BB#0:
    863 ; AVX512-NEXT:    vpaddw (%rdi), %ymm0, %ymm0
    864 ; AVX512-NEXT:    retq
    865   %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1
    866   %2 = add <16 x i16> %arg, %1
    867   ret <16 x i16> %2
    868 }
    869 
    870 define <32 x i8> @test_arg_v32i8(<32 x i8> %arg, <32 x i8>* %src) {
    871 ; SSE-LABEL: test_arg_v32i8:
    872 ; SSE:       # BB#0:
    873 ; SSE-NEXT:    paddb (%rdi), %xmm0
    874 ; SSE-NEXT:    paddb 16(%rdi), %xmm1
    875 ; SSE-NEXT:    retq
    876 ;
    877 ; AVX1-LABEL: test_arg_v32i8:
    878 ; AVX1:       # BB#0:
    879 ; AVX1-NEXT:    vmovaps (%rdi), %ymm1
    880 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    881 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    882 ; AVX1-NEXT:    vpaddb %xmm3, %xmm2, %xmm2
    883 ; AVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
    884 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    885 ; AVX1-NEXT:    retq
    886 ;
    887 ; AVX2-LABEL: test_arg_v32i8:
    888 ; AVX2:       # BB#0:
    889 ; AVX2-NEXT:    vpaddb (%rdi), %ymm0, %ymm0
    890 ; AVX2-NEXT:    retq
    891 ;
    892 ; AVX512-LABEL: test_arg_v32i8:
    893 ; AVX512:       # BB#0:
    894 ; AVX512-NEXT:    vpaddb (%rdi), %ymm0, %ymm0
    895 ; AVX512-NEXT:    retq
    896   %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1
    897   %2 = add <32 x i8> %arg, %1
    898   ret <32 x i8> %2
    899 }
    900 
    901 ; And now ZMM versions.
    902 
    903 define <16 x float> @test_arg_v16f32(<16 x float> %arg, <16 x float>* %src) {
    904 ; SSE-LABEL: test_arg_v16f32:
    905 ; SSE:       # BB#0:
    906 ; SSE-NEXT:    addps (%rdi), %xmm0
    907 ; SSE-NEXT:    addps 16(%rdi), %xmm1
    908 ; SSE-NEXT:    addps 32(%rdi), %xmm2
    909 ; SSE-NEXT:    addps 48(%rdi), %xmm3
    910 ; SSE-NEXT:    retq
    911 ;
    912 ; AVX-LABEL: test_arg_v16f32:
    913 ; AVX:       # BB#0:
    914 ; AVX-NEXT:    vaddps (%rdi), %ymm0, %ymm0
    915 ; AVX-NEXT:    vaddps 32(%rdi), %ymm1, %ymm1
    916 ; AVX-NEXT:    retq
    917 ;
    918 ; AVX512-LABEL: test_arg_v16f32:
    919 ; AVX512:       # BB#0:
    920 ; AVX512-NEXT:    vaddps (%rdi), %zmm0, %zmm0
    921 ; AVX512-NEXT:    retq
    922   %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1
    923   %2 = fadd <16 x float> %arg, %1
    924   ret <16 x float> %2
    925 }
    926 
    927 define <16 x i32> @test_arg_v16i32(<16 x i32> %arg, <16 x i32>* %src) {
    928 ; SSE-LABEL: test_arg_v16i32:
    929 ; SSE:       # BB#0:
    930 ; SSE-NEXT:    paddd (%rdi), %xmm0
    931 ; SSE-NEXT:    paddd 16(%rdi), %xmm1
    932 ; SSE-NEXT:    paddd 32(%rdi), %xmm2
    933 ; SSE-NEXT:    paddd 48(%rdi), %xmm3
    934 ; SSE-NEXT:    retq
    935 ;
    936 ; AVX1-LABEL: test_arg_v16i32:
    937 ; AVX1:       # BB#0:
    938 ; AVX1-NEXT:    vmovaps (%rdi), %ymm2
    939 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm3
    940 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    941 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
    942 ; AVX1-NEXT:    vpaddd %xmm5, %xmm4, %xmm4
    943 ; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm0
    944 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
    945 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    946 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
    947 ; AVX1-NEXT:    vpaddd %xmm4, %xmm2, %xmm2
    948 ; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm1
    949 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    950 ; AVX1-NEXT:    retq
    951 ;
    952 ; AVX2-LABEL: test_arg_v16i32:
    953 ; AVX2:       # BB#0:
    954 ; AVX2-NEXT:    vpaddd (%rdi), %ymm0, %ymm0
    955 ; AVX2-NEXT:    vpaddd 32(%rdi), %ymm1, %ymm1
    956 ; AVX2-NEXT:    retq
    957 ;
    958 ; AVX512-LABEL: test_arg_v16i32:
    959 ; AVX512:       # BB#0:
    960 ; AVX512-NEXT:    vpaddd (%rdi), %zmm0, %zmm0
    961 ; AVX512-NEXT:    retq
    962   %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1
    963   %2 = add <16 x i32> %arg, %1
    964   ret <16 x i32> %2
    965 }
    966 
    967 define <8 x double> @test_arg_v8f64(<8 x double> %arg, <8 x double>* %src) {
    968 ; SSE-LABEL: test_arg_v8f64:
    969 ; SSE:       # BB#0:
    970 ; SSE-NEXT:    addpd (%rdi), %xmm0
    971 ; SSE-NEXT:    addpd 16(%rdi), %xmm1
    972 ; SSE-NEXT:    addpd 32(%rdi), %xmm2
    973 ; SSE-NEXT:    addpd 48(%rdi), %xmm3
    974 ; SSE-NEXT:    retq
    975 ;
    976 ; AVX-LABEL: test_arg_v8f64:
    977 ; AVX:       # BB#0:
    978 ; AVX-NEXT:    vaddpd (%rdi), %ymm0, %ymm0
    979 ; AVX-NEXT:    vaddpd 32(%rdi), %ymm1, %ymm1
    980 ; AVX-NEXT:    retq
    981 ;
    982 ; AVX512-LABEL: test_arg_v8f64:
    983 ; AVX512:       # BB#0:
    984 ; AVX512-NEXT:    vaddpd (%rdi), %zmm0, %zmm0
    985 ; AVX512-NEXT:    retq
    986   %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1
    987   %2 = fadd <8 x double> %arg, %1
    988   ret <8 x double> %2
    989 }
    990 
    991 define <8 x i64> @test_arg_v8i64(<8 x i64> %arg, <8 x i64>* %src) {
    992 ; SSE-LABEL: test_arg_v8i64:
    993 ; SSE:       # BB#0:
    994 ; SSE-NEXT:    paddq (%rdi), %xmm0
    995 ; SSE-NEXT:    paddq 16(%rdi), %xmm1
    996 ; SSE-NEXT:    paddq 32(%rdi), %xmm2
    997 ; SSE-NEXT:    paddq 48(%rdi), %xmm3
    998 ; SSE-NEXT:    retq
    999 ;
   1000 ; AVX1-LABEL: test_arg_v8i64:
   1001 ; AVX1:       # BB#0:
   1002 ; AVX1-NEXT:    vmovaps (%rdi), %ymm2
   1003 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm3
   1004 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   1005 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   1006 ; AVX1-NEXT:    vpaddq %xmm5, %xmm4, %xmm4
   1007 ; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm0
   1008 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   1009 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1010 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   1011 ; AVX1-NEXT:    vpaddq %xmm4, %xmm2, %xmm2
   1012 ; AVX1-NEXT:    vpaddq %xmm3, %xmm1, %xmm1
   1013 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1014 ; AVX1-NEXT:    retq
   1015 ;
   1016 ; AVX2-LABEL: test_arg_v8i64:
   1017 ; AVX2:       # BB#0:
   1018 ; AVX2-NEXT:    vpaddq (%rdi), %ymm0, %ymm0
   1019 ; AVX2-NEXT:    vpaddq 32(%rdi), %ymm1, %ymm1
   1020 ; AVX2-NEXT:    retq
   1021 ;
   1022 ; AVX512-LABEL: test_arg_v8i64:
   1023 ; AVX512:       # BB#0:
   1024 ; AVX512-NEXT:    vpaddq (%rdi), %zmm0, %zmm0
   1025 ; AVX512-NEXT:    retq
   1026   %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1
   1027   %2 = add <8 x i64> %arg, %1
   1028   ret <8 x i64> %2
   1029 }
   1030 
   1031 define <32 x i16> @test_arg_v32i16(<32 x i16> %arg, <32 x i16>* %src) {
   1032 ; SSE-LABEL: test_arg_v32i16:
   1033 ; SSE:       # BB#0:
   1034 ; SSE-NEXT:    paddw (%rdi), %xmm0
   1035 ; SSE-NEXT:    paddw 16(%rdi), %xmm1
   1036 ; SSE-NEXT:    paddw 32(%rdi), %xmm2
   1037 ; SSE-NEXT:    paddw 48(%rdi), %xmm3
   1038 ; SSE-NEXT:    retq
   1039 ;
   1040 ; AVX1-LABEL: test_arg_v32i16:
   1041 ; AVX1:       # BB#0:
   1042 ; AVX1-NEXT:    vmovaps (%rdi), %ymm2
   1043 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm3
   1044 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   1045 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   1046 ; AVX1-NEXT:    vpaddw %xmm5, %xmm4, %xmm4
   1047 ; AVX1-NEXT:    vpaddw %xmm2, %xmm0, %xmm0
   1048 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   1049 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1050 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   1051 ; AVX1-NEXT:    vpaddw %xmm4, %xmm2, %xmm2
   1052 ; AVX1-NEXT:    vpaddw %xmm3, %xmm1, %xmm1
   1053 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1054 ; AVX1-NEXT:    retq
   1055 ;
   1056 ; AVX2-LABEL: test_arg_v32i16:
   1057 ; AVX2:       # BB#0:
   1058 ; AVX2-NEXT:    vpaddw (%rdi), %ymm0, %ymm0
   1059 ; AVX2-NEXT:    vpaddw 32(%rdi), %ymm1, %ymm1
   1060 ; AVX2-NEXT:    retq
   1061 ;
   1062 ; AVX512F-LABEL: test_arg_v32i16:
   1063 ; AVX512F:       # BB#0:
   1064 ; AVX512F-NEXT:    vpaddw (%rdi), %ymm0, %ymm0
   1065 ; AVX512F-NEXT:    vpaddw 32(%rdi), %ymm1, %ymm1
   1066 ; AVX512F-NEXT:    retq
   1067 ;
   1068 ; AVX512BW-LABEL: test_arg_v32i16:
   1069 ; AVX512BW:       # BB#0:
   1070 ; AVX512BW-NEXT:    vpaddw (%rdi), %zmm0, %zmm0
   1071 ; AVX512BW-NEXT:    retq
   1072 ;
   1073 ; AVX512VL-LABEL: test_arg_v32i16:
   1074 ; AVX512VL:       # BB#0:
   1075 ; AVX512VL-NEXT:    vpaddw (%rdi), %ymm0, %ymm0
   1076 ; AVX512VL-NEXT:    vpaddw 32(%rdi), %ymm1, %ymm1
   1077 ; AVX512VL-NEXT:    retq
   1078   %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1
   1079   %2 = add <32 x i16> %arg, %1
   1080   ret <32 x i16> %2
   1081 }
   1082 
   1083 define <64 x i8> @test_arg_v64i8(<64 x i8> %arg, <64 x i8>* %src) {
   1084 ; SSE-LABEL: test_arg_v64i8:
   1085 ; SSE:       # BB#0:
   1086 ; SSE-NEXT:    paddb (%rdi), %xmm0
   1087 ; SSE-NEXT:    paddb 16(%rdi), %xmm1
   1088 ; SSE-NEXT:    paddb 32(%rdi), %xmm2
   1089 ; SSE-NEXT:    paddb 48(%rdi), %xmm3
   1090 ; SSE-NEXT:    retq
   1091 ;
   1092 ; AVX1-LABEL: test_arg_v64i8:
   1093 ; AVX1:       # BB#0:
   1094 ; AVX1-NEXT:    vmovaps (%rdi), %ymm2
   1095 ; AVX1-NEXT:    vmovaps 32(%rdi), %ymm3
   1096 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   1097 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   1098 ; AVX1-NEXT:    vpaddb %xmm5, %xmm4, %xmm4
   1099 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
   1100 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
   1101 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1102 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   1103 ; AVX1-NEXT:    vpaddb %xmm4, %xmm2, %xmm2
   1104 ; AVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm1
   1105 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
   1106 ; AVX1-NEXT:    retq
   1107 ;
   1108 ; AVX2-LABEL: test_arg_v64i8:
   1109 ; AVX2:       # BB#0:
   1110 ; AVX2-NEXT:    vpaddb (%rdi), %ymm0, %ymm0
   1111 ; AVX2-NEXT:    vpaddb 32(%rdi), %ymm1, %ymm1
   1112 ; AVX2-NEXT:    retq
   1113 ;
   1114 ; AVX512F-LABEL: test_arg_v64i8:
   1115 ; AVX512F:       # BB#0:
   1116 ; AVX512F-NEXT:    vpaddb (%rdi), %ymm0, %ymm0
   1117 ; AVX512F-NEXT:    vpaddb 32(%rdi), %ymm1, %ymm1
   1118 ; AVX512F-NEXT:    retq
   1119 ;
   1120 ; AVX512BW-LABEL: test_arg_v64i8:
   1121 ; AVX512BW:       # BB#0:
   1122 ; AVX512BW-NEXT:    vpaddb (%rdi), %zmm0, %zmm0
   1123 ; AVX512BW-NEXT:    retq
   1124 ;
   1125 ; AVX512VL-LABEL: test_arg_v64i8:
   1126 ; AVX512VL:       # BB#0:
   1127 ; AVX512VL-NEXT:    vpaddb (%rdi), %ymm0, %ymm0
   1128 ; AVX512VL-NEXT:    vpaddb 32(%rdi), %ymm1, %ymm1
   1129 ; AVX512VL-NEXT:    retq
   1130   %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1
   1131   %2 = add <64 x i8> %arg, %1
   1132   ret <64 x i8> %2
   1133 }
   1134 
   1135 
   1136 ; Unaligned non-temporal loads (not supported)
   1137 
   1138 define <4 x float> @test_unaligned_v4f32(<4 x float>* %src) {
   1139 ; SSE-LABEL: test_unaligned_v4f32:
   1140 ; SSE:       # BB#0:
   1141 ; SSE-NEXT:    movups (%rdi), %xmm0
   1142 ; SSE-NEXT:    retq
   1143 ;
   1144 ; AVX-LABEL: test_unaligned_v4f32:
   1145 ; AVX:       # BB#0:
   1146 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1147 ; AVX-NEXT:    retq
   1148 ;
   1149 ; AVX512-LABEL: test_unaligned_v4f32:
   1150 ; AVX512:       # BB#0:
   1151 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
   1152 ; AVX512-NEXT:    retq
   1153   %1 = load <4 x float>, <4 x float>* %src, align 1, !nontemporal !1
   1154   ret <4 x float> %1
   1155 }
   1156 
   1157 define <4 x i32> @test_unaligned_v4i32(<4 x i32>* %src) {
   1158 ; SSE-LABEL: test_unaligned_v4i32:
   1159 ; SSE:       # BB#0:
   1160 ; SSE-NEXT:    movups (%rdi), %xmm0
   1161 ; SSE-NEXT:    retq
   1162 ;
   1163 ; AVX-LABEL: test_unaligned_v4i32:
   1164 ; AVX:       # BB#0:
   1165 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1166 ; AVX-NEXT:    retq
   1167 ;
   1168 ; AVX512F-LABEL: test_unaligned_v4i32:
   1169 ; AVX512F:       # BB#0:
   1170 ; AVX512F-NEXT:    vmovups (%rdi), %xmm0
   1171 ; AVX512F-NEXT:    retq
   1172 ;
   1173 ; AVX512BW-LABEL: test_unaligned_v4i32:
   1174 ; AVX512BW:       # BB#0:
   1175 ; AVX512BW-NEXT:    vmovups (%rdi), %xmm0
   1176 ; AVX512BW-NEXT:    retq
   1177 ;
   1178 ; AVX512VL-LABEL: test_unaligned_v4i32:
   1179 ; AVX512VL:       # BB#0:
   1180 ; AVX512VL-NEXT:    vmovdqu32 (%rdi), %xmm0
   1181 ; AVX512VL-NEXT:    retq
   1182   %1 = load <4 x i32>, <4 x i32>* %src, align 1, !nontemporal !1
   1183   ret <4 x i32> %1
   1184 }
   1185 
   1186 define <2 x double> @test_unaligned_v2f64(<2 x double>* %src) {
   1187 ; SSE-LABEL: test_unaligned_v2f64:
   1188 ; SSE:       # BB#0:
   1189 ; SSE-NEXT:    movups (%rdi), %xmm0
   1190 ; SSE-NEXT:    retq
   1191 ;
   1192 ; AVX-LABEL: test_unaligned_v2f64:
   1193 ; AVX:       # BB#0:
   1194 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1195 ; AVX-NEXT:    retq
   1196 ;
   1197 ; AVX512F-LABEL: test_unaligned_v2f64:
   1198 ; AVX512F:       # BB#0:
   1199 ; AVX512F-NEXT:    vmovups (%rdi), %xmm0
   1200 ; AVX512F-NEXT:    retq
   1201 ;
   1202 ; AVX512BW-LABEL: test_unaligned_v2f64:
   1203 ; AVX512BW:       # BB#0:
   1204 ; AVX512BW-NEXT:    vmovups (%rdi), %xmm0
   1205 ; AVX512BW-NEXT:    retq
   1206 ;
   1207 ; AVX512VL-LABEL: test_unaligned_v2f64:
   1208 ; AVX512VL:       # BB#0:
   1209 ; AVX512VL-NEXT:    vmovupd (%rdi), %xmm0
   1210 ; AVX512VL-NEXT:    retq
   1211   %1 = load <2 x double>, <2 x double>* %src, align 1, !nontemporal !1
   1212   ret <2 x double> %1
   1213 }
   1214 
   1215 define <2 x i64> @test_unaligned_v2i64(<2 x i64>* %src) {
   1216 ; SSE-LABEL: test_unaligned_v2i64:
   1217 ; SSE:       # BB#0:
   1218 ; SSE-NEXT:    movups (%rdi), %xmm0
   1219 ; SSE-NEXT:    retq
   1220 ;
   1221 ; AVX-LABEL: test_unaligned_v2i64:
   1222 ; AVX:       # BB#0:
   1223 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1224 ; AVX-NEXT:    retq
   1225 ;
   1226 ; AVX512F-LABEL: test_unaligned_v2i64:
   1227 ; AVX512F:       # BB#0:
   1228 ; AVX512F-NEXT:    vmovups (%rdi), %xmm0
   1229 ; AVX512F-NEXT:    retq
   1230 ;
   1231 ; AVX512BW-LABEL: test_unaligned_v2i64:
   1232 ; AVX512BW:       # BB#0:
   1233 ; AVX512BW-NEXT:    vmovups (%rdi), %xmm0
   1234 ; AVX512BW-NEXT:    retq
   1235 ;
   1236 ; AVX512VL-LABEL: test_unaligned_v2i64:
   1237 ; AVX512VL:       # BB#0:
   1238 ; AVX512VL-NEXT:    vmovdqu64 (%rdi), %xmm0
   1239 ; AVX512VL-NEXT:    retq
   1240   %1 = load <2 x i64>, <2 x i64>* %src, align 1, !nontemporal !1
   1241   ret <2 x i64> %1
   1242 }
   1243 
   1244 define <8 x i16> @test_unaligned_v8i16(<8 x i16>* %src) {
   1245 ; SSE-LABEL: test_unaligned_v8i16:
   1246 ; SSE:       # BB#0:
   1247 ; SSE-NEXT:    movups (%rdi), %xmm0
   1248 ; SSE-NEXT:    retq
   1249 ;
   1250 ; AVX-LABEL: test_unaligned_v8i16:
   1251 ; AVX:       # BB#0:
   1252 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1253 ; AVX-NEXT:    retq
   1254 ;
   1255 ; AVX512F-LABEL: test_unaligned_v8i16:
   1256 ; AVX512F:       # BB#0:
   1257 ; AVX512F-NEXT:    vmovups (%rdi), %xmm0
   1258 ; AVX512F-NEXT:    retq
   1259 ;
   1260 ; AVX512BW-LABEL: test_unaligned_v8i16:
   1261 ; AVX512BW:       # BB#0:
   1262 ; AVX512BW-NEXT:    vmovups (%rdi), %xmm0
   1263 ; AVX512BW-NEXT:    retq
   1264 ;
   1265 ; AVX512VL-LABEL: test_unaligned_v8i16:
   1266 ; AVX512VL:       # BB#0:
   1267 ; AVX512VL-NEXT:    vmovdqu64 (%rdi), %xmm0
   1268 ; AVX512VL-NEXT:    retq
   1269   %1 = load <8 x i16>, <8 x i16>* %src, align 1, !nontemporal !1
   1270   ret <8 x i16> %1
   1271 }
   1272 
   1273 define <16 x i8> @test_unaligned_v16i8(<16 x i8>* %src) {
   1274 ; SSE-LABEL: test_unaligned_v16i8:
   1275 ; SSE:       # BB#0:
   1276 ; SSE-NEXT:    movups (%rdi), %xmm0
   1277 ; SSE-NEXT:    retq
   1278 ;
   1279 ; AVX-LABEL: test_unaligned_v16i8:
   1280 ; AVX:       # BB#0:
   1281 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1282 ; AVX-NEXT:    retq
   1283 ;
   1284 ; AVX512F-LABEL: test_unaligned_v16i8:
   1285 ; AVX512F:       # BB#0:
   1286 ; AVX512F-NEXT:    vmovups (%rdi), %xmm0
   1287 ; AVX512F-NEXT:    retq
   1288 ;
   1289 ; AVX512BW-LABEL: test_unaligned_v16i8:
   1290 ; AVX512BW:       # BB#0:
   1291 ; AVX512BW-NEXT:    vmovups (%rdi), %xmm0
   1292 ; AVX512BW-NEXT:    retq
   1293 ;
   1294 ; AVX512VL-LABEL: test_unaligned_v16i8:
   1295 ; AVX512VL:       # BB#0:
   1296 ; AVX512VL-NEXT:    vmovdqu64 (%rdi), %xmm0
   1297 ; AVX512VL-NEXT:    retq
   1298   %1 = load <16 x i8>, <16 x i8>* %src, align 1, !nontemporal !1
   1299   ret <16 x i8> %1
   1300 }
   1301 
   1302 ; And now YMM versions.
   1303 
   1304 define <8 x float> @test_unaligned_v8f32(<8 x float>* %src) {
   1305 ; SSE-LABEL: test_unaligned_v8f32:
   1306 ; SSE:       # BB#0:
   1307 ; SSE-NEXT:    movups (%rdi), %xmm0
   1308 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1309 ; SSE-NEXT:    retq
   1310 ;
   1311 ; AVX-LABEL: test_unaligned_v8f32:
   1312 ; AVX:       # BB#0:
   1313 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1314 ; AVX-NEXT:    retq
   1315 ;
   1316 ; AVX512-LABEL: test_unaligned_v8f32:
   1317 ; AVX512:       # BB#0:
   1318 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
   1319 ; AVX512-NEXT:    retq
   1320   %1 = load <8 x float>, <8 x float>* %src, align 1, !nontemporal !1
   1321   ret <8 x float> %1
   1322 }
   1323 
   1324 define <8 x i32> @test_unaligned_v8i32(<8 x i32>* %src) {
   1325 ; SSE-LABEL: test_unaligned_v8i32:
   1326 ; SSE:       # BB#0:
   1327 ; SSE-NEXT:    movups (%rdi), %xmm0
   1328 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1329 ; SSE-NEXT:    retq
   1330 ;
   1331 ; AVX-LABEL: test_unaligned_v8i32:
   1332 ; AVX:       # BB#0:
   1333 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1334 ; AVX-NEXT:    retq
   1335 ;
   1336 ; AVX512F-LABEL: test_unaligned_v8i32:
   1337 ; AVX512F:       # BB#0:
   1338 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1339 ; AVX512F-NEXT:    retq
   1340 ;
   1341 ; AVX512BW-LABEL: test_unaligned_v8i32:
   1342 ; AVX512BW:       # BB#0:
   1343 ; AVX512BW-NEXT:    vmovups (%rdi), %ymm0
   1344 ; AVX512BW-NEXT:    retq
   1345 ;
   1346 ; AVX512VL-LABEL: test_unaligned_v8i32:
   1347 ; AVX512VL:       # BB#0:
   1348 ; AVX512VL-NEXT:    vmovdqu32 (%rdi), %ymm0
   1349 ; AVX512VL-NEXT:    retq
   1350   %1 = load <8 x i32>, <8 x i32>* %src, align 1, !nontemporal !1
   1351   ret <8 x i32> %1
   1352 }
   1353 
   1354 define <4 x double> @test_unaligned_v4f64(<4 x double>* %src) {
   1355 ; SSE-LABEL: test_unaligned_v4f64:
   1356 ; SSE:       # BB#0:
   1357 ; SSE-NEXT:    movups (%rdi), %xmm0
   1358 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1359 ; SSE-NEXT:    retq
   1360 ;
   1361 ; AVX-LABEL: test_unaligned_v4f64:
   1362 ; AVX:       # BB#0:
   1363 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1364 ; AVX-NEXT:    retq
   1365 ;
   1366 ; AVX512F-LABEL: test_unaligned_v4f64:
   1367 ; AVX512F:       # BB#0:
   1368 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1369 ; AVX512F-NEXT:    retq
   1370 ;
   1371 ; AVX512BW-LABEL: test_unaligned_v4f64:
   1372 ; AVX512BW:       # BB#0:
   1373 ; AVX512BW-NEXT:    vmovups (%rdi), %ymm0
   1374 ; AVX512BW-NEXT:    retq
   1375 ;
   1376 ; AVX512VL-LABEL: test_unaligned_v4f64:
   1377 ; AVX512VL:       # BB#0:
   1378 ; AVX512VL-NEXT:    vmovupd (%rdi), %ymm0
   1379 ; AVX512VL-NEXT:    retq
   1380   %1 = load <4 x double>, <4 x double>* %src, align 1, !nontemporal !1
   1381   ret <4 x double> %1
   1382 }
   1383 
   1384 define <4 x i64> @test_unaligned_v4i64(<4 x i64>* %src) {
   1385 ; SSE-LABEL: test_unaligned_v4i64:
   1386 ; SSE:       # BB#0:
   1387 ; SSE-NEXT:    movups (%rdi), %xmm0
   1388 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1389 ; SSE-NEXT:    retq
   1390 ;
   1391 ; AVX-LABEL: test_unaligned_v4i64:
   1392 ; AVX:       # BB#0:
   1393 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1394 ; AVX-NEXT:    retq
   1395 ;
   1396 ; AVX512F-LABEL: test_unaligned_v4i64:
   1397 ; AVX512F:       # BB#0:
   1398 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1399 ; AVX512F-NEXT:    retq
   1400 ;
   1401 ; AVX512BW-LABEL: test_unaligned_v4i64:
   1402 ; AVX512BW:       # BB#0:
   1403 ; AVX512BW-NEXT:    vmovups (%rdi), %ymm0
   1404 ; AVX512BW-NEXT:    retq
   1405 ;
   1406 ; AVX512VL-LABEL: test_unaligned_v4i64:
   1407 ; AVX512VL:       # BB#0:
   1408 ; AVX512VL-NEXT:    vmovdqu64 (%rdi), %ymm0
   1409 ; AVX512VL-NEXT:    retq
   1410   %1 = load <4 x i64>, <4 x i64>* %src, align 1, !nontemporal !1
   1411   ret <4 x i64> %1
   1412 }
   1413 
   1414 define <16 x i16> @test_unaligned_v16i16(<16 x i16>* %src) {
   1415 ; SSE-LABEL: test_unaligned_v16i16:
   1416 ; SSE:       # BB#0:
   1417 ; SSE-NEXT:    movups (%rdi), %xmm0
   1418 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1419 ; SSE-NEXT:    retq
   1420 ;
   1421 ; AVX-LABEL: test_unaligned_v16i16:
   1422 ; AVX:       # BB#0:
   1423 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1424 ; AVX-NEXT:    retq
   1425 ;
   1426 ; AVX512F-LABEL: test_unaligned_v16i16:
   1427 ; AVX512F:       # BB#0:
   1428 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1429 ; AVX512F-NEXT:    retq
   1430 ;
   1431 ; AVX512BW-LABEL: test_unaligned_v16i16:
   1432 ; AVX512BW:       # BB#0:
   1433 ; AVX512BW-NEXT:    vmovups (%rdi), %ymm0
   1434 ; AVX512BW-NEXT:    retq
   1435 ;
   1436 ; AVX512VL-LABEL: test_unaligned_v16i16:
   1437 ; AVX512VL:       # BB#0:
   1438 ; AVX512VL-NEXT:    vmovdqu64 (%rdi), %ymm0
   1439 ; AVX512VL-NEXT:    retq
   1440   %1 = load <16 x i16>, <16 x i16>* %src, align 1, !nontemporal !1
   1441   ret <16 x i16> %1
   1442 }
   1443 
   1444 define <32 x i8> @test_unaligned_v32i8(<32 x i8>* %src) {
   1445 ; SSE-LABEL: test_unaligned_v32i8:
   1446 ; SSE:       # BB#0:
   1447 ; SSE-NEXT:    movups (%rdi), %xmm0
   1448 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1449 ; SSE-NEXT:    retq
   1450 ;
   1451 ; AVX-LABEL: test_unaligned_v32i8:
   1452 ; AVX:       # BB#0:
   1453 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1454 ; AVX-NEXT:    retq
   1455 ;
   1456 ; AVX512F-LABEL: test_unaligned_v32i8:
   1457 ; AVX512F:       # BB#0:
   1458 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1459 ; AVX512F-NEXT:    retq
   1460 ;
   1461 ; AVX512BW-LABEL: test_unaligned_v32i8:
   1462 ; AVX512BW:       # BB#0:
   1463 ; AVX512BW-NEXT:    vmovups (%rdi), %ymm0
   1464 ; AVX512BW-NEXT:    retq
   1465 ;
   1466 ; AVX512VL-LABEL: test_unaligned_v32i8:
   1467 ; AVX512VL:       # BB#0:
   1468 ; AVX512VL-NEXT:    vmovdqu64 (%rdi), %ymm0
   1469 ; AVX512VL-NEXT:    retq
   1470   %1 = load <32 x i8>, <32 x i8>* %src, align 1, !nontemporal !1
   1471   ret <32 x i8> %1
   1472 }
   1473 
   1474 ; And now ZMM versions.
   1475 
   1476 define <16 x float> @test_unaligned_v16f32(<16 x float>* %src) {
   1477 ; SSE-LABEL: test_unaligned_v16f32:
   1478 ; SSE:       # BB#0:
   1479 ; SSE-NEXT:    movups (%rdi), %xmm0
   1480 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1481 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1482 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1483 ; SSE-NEXT:    retq
   1484 ;
   1485 ; AVX-LABEL: test_unaligned_v16f32:
   1486 ; AVX:       # BB#0:
   1487 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1488 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1489 ; AVX-NEXT:    retq
   1490 ;
   1491 ; AVX512-LABEL: test_unaligned_v16f32:
   1492 ; AVX512:       # BB#0:
   1493 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
   1494 ; AVX512-NEXT:    retq
   1495   %1 = load <16 x float>, <16 x float>* %src, align 1, !nontemporal !1
   1496   ret <16 x float> %1
   1497 }
   1498 
   1499 define <16 x i32> @test_unaligned_v16i32(<16 x i32>* %src) {
   1500 ; SSE-LABEL: test_unaligned_v16i32:
   1501 ; SSE:       # BB#0:
   1502 ; SSE-NEXT:    movups (%rdi), %xmm0
   1503 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1504 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1505 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1506 ; SSE-NEXT:    retq
   1507 ;
   1508 ; AVX-LABEL: test_unaligned_v16i32:
   1509 ; AVX:       # BB#0:
   1510 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1511 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1512 ; AVX-NEXT:    retq
   1513 ;
   1514 ; AVX512-LABEL: test_unaligned_v16i32:
   1515 ; AVX512:       # BB#0:
   1516 ; AVX512-NEXT:    vmovdqu32 (%rdi), %zmm0
   1517 ; AVX512-NEXT:    retq
   1518   %1 = load <16 x i32>, <16 x i32>* %src, align 1, !nontemporal !1
   1519   ret <16 x i32> %1
   1520 }
   1521 
   1522 define <8 x double> @test_unaligned_v8f64(<8 x double>* %src) {
   1523 ; SSE-LABEL: test_unaligned_v8f64:
   1524 ; SSE:       # BB#0:
   1525 ; SSE-NEXT:    movups (%rdi), %xmm0
   1526 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1527 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1528 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1529 ; SSE-NEXT:    retq
   1530 ;
   1531 ; AVX-LABEL: test_unaligned_v8f64:
   1532 ; AVX:       # BB#0:
   1533 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1534 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1535 ; AVX-NEXT:    retq
   1536 ;
   1537 ; AVX512-LABEL: test_unaligned_v8f64:
   1538 ; AVX512:       # BB#0:
   1539 ; AVX512-NEXT:    vmovupd (%rdi), %zmm0
   1540 ; AVX512-NEXT:    retq
   1541   %1 = load <8 x double>, <8 x double>* %src, align 1, !nontemporal !1
   1542   ret <8 x double> %1
   1543 }
   1544 
   1545 define <8 x i64> @test_unaligned_v8i64(<8 x i64>* %src) {
   1546 ; SSE-LABEL: test_unaligned_v8i64:
   1547 ; SSE:       # BB#0:
   1548 ; SSE-NEXT:    movups (%rdi), %xmm0
   1549 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1550 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1551 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1552 ; SSE-NEXT:    retq
   1553 ;
   1554 ; AVX-LABEL: test_unaligned_v8i64:
   1555 ; AVX:       # BB#0:
   1556 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1557 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1558 ; AVX-NEXT:    retq
   1559 ;
   1560 ; AVX512-LABEL: test_unaligned_v8i64:
   1561 ; AVX512:       # BB#0:
   1562 ; AVX512-NEXT:    vmovdqu64 (%rdi), %zmm0
   1563 ; AVX512-NEXT:    retq
   1564   %1 = load <8 x i64>, <8 x i64>* %src, align 1, !nontemporal !1
   1565   ret <8 x i64> %1
   1566 }
   1567 
   1568 define <32 x i16> @test_unaligned_v32i16(<32 x i16>* %src) {
   1569 ; SSE-LABEL: test_unaligned_v32i16:
   1570 ; SSE:       # BB#0:
   1571 ; SSE-NEXT:    movups (%rdi), %xmm0
   1572 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1573 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1574 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1575 ; SSE-NEXT:    retq
   1576 ;
   1577 ; AVX-LABEL: test_unaligned_v32i16:
   1578 ; AVX:       # BB#0:
   1579 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1580 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1581 ; AVX-NEXT:    retq
   1582 ;
   1583 ; AVX512F-LABEL: test_unaligned_v32i16:
   1584 ; AVX512F:       # BB#0:
   1585 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1586 ; AVX512F-NEXT:    vmovups 32(%rdi), %ymm1
   1587 ; AVX512F-NEXT:    retq
   1588 ;
   1589 ; AVX512BW-LABEL: test_unaligned_v32i16:
   1590 ; AVX512BW:       # BB#0:
   1591 ; AVX512BW-NEXT:    vmovdqu16 (%rdi), %zmm0
   1592 ; AVX512BW-NEXT:    retq
   1593 ;
   1594 ; AVX512VL-LABEL: test_unaligned_v32i16:
   1595 ; AVX512VL:       # BB#0:
   1596 ; AVX512VL-NEXT:    vmovdqu64 (%rdi), %ymm0
   1597 ; AVX512VL-NEXT:    vmovdqu64 32(%rdi), %ymm1
   1598 ; AVX512VL-NEXT:    retq
   1599   %1 = load <32 x i16>, <32 x i16>* %src, align 1, !nontemporal !1
   1600   ret <32 x i16> %1
   1601 }
   1602 
   1603 define <64 x i8> @test_unaligned_v64i8(<64 x i8>* %src) {
   1604 ; SSE-LABEL: test_unaligned_v64i8:
   1605 ; SSE:       # BB#0:
   1606 ; SSE-NEXT:    movups (%rdi), %xmm0
   1607 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1608 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1609 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1610 ; SSE-NEXT:    retq
   1611 ;
   1612 ; AVX-LABEL: test_unaligned_v64i8:
   1613 ; AVX:       # BB#0:
   1614 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1615 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1616 ; AVX-NEXT:    retq
   1617 ;
   1618 ; AVX512F-LABEL: test_unaligned_v64i8:
   1619 ; AVX512F:       # BB#0:
   1620 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1621 ; AVX512F-NEXT:    vmovups 32(%rdi), %ymm1
   1622 ; AVX512F-NEXT:    retq
   1623 ;
   1624 ; AVX512BW-LABEL: test_unaligned_v64i8:
   1625 ; AVX512BW:       # BB#0:
   1626 ; AVX512BW-NEXT:    vmovdqu8 (%rdi), %zmm0
   1627 ; AVX512BW-NEXT:    retq
   1628 ;
   1629 ; AVX512VL-LABEL: test_unaligned_v64i8:
   1630 ; AVX512VL:       # BB#0:
   1631 ; AVX512VL-NEXT:    vmovdqu64 (%rdi), %ymm0
   1632 ; AVX512VL-NEXT:    vmovdqu64 32(%rdi), %ymm1
   1633 ; AVX512VL-NEXT:    retq
   1634   %1 = load <64 x i8>, <64 x i8>* %src, align 1, !nontemporal !1
   1635   ret <64 x i8> %1
   1636 }
   1637 
   1638 !1 = !{i32 1}
   1639