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 ; AVX512-LABEL: test_v4i32:
     51 ; AVX512:       # %bb.0:
     52 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
     53 ; AVX512-NEXT:    retq
     54   %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1
     55   ret <4 x i32> %1
     56 }
     57 
     58 define <2 x double> @test_v2f64(<2 x double>* %src) {
     59 ; SSE2-LABEL: test_v2f64:
     60 ; SSE2:       # %bb.0:
     61 ; SSE2-NEXT:    movaps (%rdi), %xmm0
     62 ; SSE2-NEXT:    retq
     63 ;
     64 ; SSE41-LABEL: test_v2f64:
     65 ; SSE41:       # %bb.0:
     66 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
     67 ; SSE41-NEXT:    retq
     68 ;
     69 ; AVX-LABEL: test_v2f64:
     70 ; AVX:       # %bb.0:
     71 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
     72 ; AVX-NEXT:    retq
     73 ;
     74 ; AVX512-LABEL: test_v2f64:
     75 ; AVX512:       # %bb.0:
     76 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
     77 ; AVX512-NEXT:    retq
     78   %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1
     79   ret <2 x double> %1
     80 }
     81 
     82 define <2 x i64> @test_v2i64(<2 x i64>* %src) {
     83 ; SSE2-LABEL: test_v2i64:
     84 ; SSE2:       # %bb.0:
     85 ; SSE2-NEXT:    movaps (%rdi), %xmm0
     86 ; SSE2-NEXT:    retq
     87 ;
     88 ; SSE41-LABEL: test_v2i64:
     89 ; SSE41:       # %bb.0:
     90 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
     91 ; SSE41-NEXT:    retq
     92 ;
     93 ; AVX-LABEL: test_v2i64:
     94 ; AVX:       # %bb.0:
     95 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
     96 ; AVX-NEXT:    retq
     97 ;
     98 ; AVX512-LABEL: test_v2i64:
     99 ; AVX512:       # %bb.0:
    100 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    101 ; AVX512-NEXT:    retq
    102   %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1
    103   ret <2 x i64> %1
    104 }
    105 
    106 define <8 x i16> @test_v8i16(<8 x i16>* %src) {
    107 ; SSE2-LABEL: test_v8i16:
    108 ; SSE2:       # %bb.0:
    109 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    110 ; SSE2-NEXT:    retq
    111 ;
    112 ; SSE41-LABEL: test_v8i16:
    113 ; SSE41:       # %bb.0:
    114 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    115 ; SSE41-NEXT:    retq
    116 ;
    117 ; AVX-LABEL: test_v8i16:
    118 ; AVX:       # %bb.0:
    119 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    120 ; AVX-NEXT:    retq
    121 ;
    122 ; AVX512-LABEL: test_v8i16:
    123 ; AVX512:       # %bb.0:
    124 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    125 ; AVX512-NEXT:    retq
    126   %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1
    127   ret <8 x i16> %1
    128 }
    129 
    130 define <16 x i8> @test_v16i8(<16 x i8>* %src) {
    131 ; SSE2-LABEL: test_v16i8:
    132 ; SSE2:       # %bb.0:
    133 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    134 ; SSE2-NEXT:    retq
    135 ;
    136 ; SSE41-LABEL: test_v16i8:
    137 ; SSE41:       # %bb.0:
    138 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    139 ; SSE41-NEXT:    retq
    140 ;
    141 ; AVX-LABEL: test_v16i8:
    142 ; AVX:       # %bb.0:
    143 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
    144 ; AVX-NEXT:    retq
    145 ;
    146 ; AVX512-LABEL: test_v16i8:
    147 ; AVX512:       # %bb.0:
    148 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
    149 ; AVX512-NEXT:    retq
    150   %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1
    151   ret <16 x i8> %1
    152 }
    153 
    154 ; And now YMM versions.
    155 
    156 define <8 x float> @test_v8f32(<8 x float>* %src) {
    157 ; SSE2-LABEL: test_v8f32:
    158 ; SSE2:       # %bb.0:
    159 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    160 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    161 ; SSE2-NEXT:    retq
    162 ;
    163 ; SSE41-LABEL: test_v8f32:
    164 ; SSE41:       # %bb.0:
    165 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    166 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    167 ; SSE41-NEXT:    retq
    168 ;
    169 ; AVX1-LABEL: test_v8f32:
    170 ; AVX1:       # %bb.0:
    171 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    172 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    173 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    174 ; AVX1-NEXT:    retq
    175 ;
    176 ; AVX2-LABEL: test_v8f32:
    177 ; AVX2:       # %bb.0:
    178 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    179 ; AVX2-NEXT:    retq
    180 ;
    181 ; AVX512-LABEL: test_v8f32:
    182 ; AVX512:       # %bb.0:
    183 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    184 ; AVX512-NEXT:    retq
    185   %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1
    186   ret <8 x float> %1
    187 }
    188 
    189 define <8 x i32> @test_v8i32(<8 x i32>* %src) {
    190 ; SSE2-LABEL: test_v8i32:
    191 ; SSE2:       # %bb.0:
    192 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    193 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    194 ; SSE2-NEXT:    retq
    195 ;
    196 ; SSE41-LABEL: test_v8i32:
    197 ; SSE41:       # %bb.0:
    198 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    199 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    200 ; SSE41-NEXT:    retq
    201 ;
    202 ; AVX1-LABEL: test_v8i32:
    203 ; AVX1:       # %bb.0:
    204 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    205 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    206 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    207 ; AVX1-NEXT:    retq
    208 ;
    209 ; AVX2-LABEL: test_v8i32:
    210 ; AVX2:       # %bb.0:
    211 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    212 ; AVX2-NEXT:    retq
    213 ;
    214 ; AVX512-LABEL: test_v8i32:
    215 ; AVX512:       # %bb.0:
    216 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    217 ; AVX512-NEXT:    retq
    218   %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1
    219   ret <8 x i32> %1
    220 }
    221 
    222 define <4 x double> @test_v4f64(<4 x double>* %src) {
    223 ; SSE2-LABEL: test_v4f64:
    224 ; SSE2:       # %bb.0:
    225 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    226 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    227 ; SSE2-NEXT:    retq
    228 ;
    229 ; SSE41-LABEL: test_v4f64:
    230 ; SSE41:       # %bb.0:
    231 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    232 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    233 ; SSE41-NEXT:    retq
    234 ;
    235 ; AVX1-LABEL: test_v4f64:
    236 ; AVX1:       # %bb.0:
    237 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    238 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    239 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    240 ; AVX1-NEXT:    retq
    241 ;
    242 ; AVX2-LABEL: test_v4f64:
    243 ; AVX2:       # %bb.0:
    244 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    245 ; AVX2-NEXT:    retq
    246 ;
    247 ; AVX512-LABEL: test_v4f64:
    248 ; AVX512:       # %bb.0:
    249 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    250 ; AVX512-NEXT:    retq
    251   %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1
    252   ret <4 x double> %1
    253 }
    254 
    255 define <4 x i64> @test_v4i64(<4 x i64>* %src) {
    256 ; SSE2-LABEL: test_v4i64:
    257 ; SSE2:       # %bb.0:
    258 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    259 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    260 ; SSE2-NEXT:    retq
    261 ;
    262 ; SSE41-LABEL: test_v4i64:
    263 ; SSE41:       # %bb.0:
    264 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    265 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    266 ; SSE41-NEXT:    retq
    267 ;
    268 ; AVX1-LABEL: test_v4i64:
    269 ; AVX1:       # %bb.0:
    270 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    271 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    272 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    273 ; AVX1-NEXT:    retq
    274 ;
    275 ; AVX2-LABEL: test_v4i64:
    276 ; AVX2:       # %bb.0:
    277 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    278 ; AVX2-NEXT:    retq
    279 ;
    280 ; AVX512-LABEL: test_v4i64:
    281 ; AVX512:       # %bb.0:
    282 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    283 ; AVX512-NEXT:    retq
    284   %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1
    285   ret <4 x i64> %1
    286 }
    287 
    288 define <16 x i16> @test_v16i16(<16 x i16>* %src) {
    289 ; SSE2-LABEL: test_v16i16:
    290 ; SSE2:       # %bb.0:
    291 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    292 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    293 ; SSE2-NEXT:    retq
    294 ;
    295 ; SSE41-LABEL: test_v16i16:
    296 ; SSE41:       # %bb.0:
    297 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    298 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    299 ; SSE41-NEXT:    retq
    300 ;
    301 ; AVX1-LABEL: test_v16i16:
    302 ; AVX1:       # %bb.0:
    303 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    304 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    305 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    306 ; AVX1-NEXT:    retq
    307 ;
    308 ; AVX2-LABEL: test_v16i16:
    309 ; AVX2:       # %bb.0:
    310 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    311 ; AVX2-NEXT:    retq
    312 ;
    313 ; AVX512-LABEL: test_v16i16:
    314 ; AVX512:       # %bb.0:
    315 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    316 ; AVX512-NEXT:    retq
    317   %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1
    318   ret <16 x i16> %1
    319 }
    320 
    321 define <32 x i8> @test_v32i8(<32 x i8>* %src) {
    322 ; SSE2-LABEL: test_v32i8:
    323 ; SSE2:       # %bb.0:
    324 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    325 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    326 ; SSE2-NEXT:    retq
    327 ;
    328 ; SSE41-LABEL: test_v32i8:
    329 ; SSE41:       # %bb.0:
    330 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    331 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    332 ; SSE41-NEXT:    retq
    333 ;
    334 ; AVX1-LABEL: test_v32i8:
    335 ; AVX1:       # %bb.0:
    336 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    337 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    338 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    339 ; AVX1-NEXT:    retq
    340 ;
    341 ; AVX2-LABEL: test_v32i8:
    342 ; AVX2:       # %bb.0:
    343 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    344 ; AVX2-NEXT:    retq
    345 ;
    346 ; AVX512-LABEL: test_v32i8:
    347 ; AVX512:       # %bb.0:
    348 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
    349 ; AVX512-NEXT:    retq
    350   %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1
    351   ret <32 x i8> %1
    352 }
    353 
    354 ; And now ZMM versions.
    355 
    356 define <16 x float> @test_v16f32(<16 x float>* %src) {
    357 ; SSE2-LABEL: test_v16f32:
    358 ; SSE2:       # %bb.0:
    359 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    360 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    361 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    362 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    363 ; SSE2-NEXT:    retq
    364 ;
    365 ; SSE41-LABEL: test_v16f32:
    366 ; SSE41:       # %bb.0:
    367 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    368 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    369 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    370 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    371 ; SSE41-NEXT:    retq
    372 ;
    373 ; AVX1-LABEL: test_v16f32:
    374 ; AVX1:       # %bb.0:
    375 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    376 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    377 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    378 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
    379 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
    380 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    381 ; AVX1-NEXT:    retq
    382 ;
    383 ; AVX2-LABEL: test_v16f32:
    384 ; AVX2:       # %bb.0:
    385 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    386 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    387 ; AVX2-NEXT:    retq
    388 ;
    389 ; AVX512-LABEL: test_v16f32:
    390 ; AVX512:       # %bb.0:
    391 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
    392 ; AVX512-NEXT:    retq
    393   %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1
    394   ret <16 x float> %1
    395 }
    396 
    397 define <16 x i32> @test_v16i32(<16 x i32>* %src) {
    398 ; SSE2-LABEL: test_v16i32:
    399 ; SSE2:       # %bb.0:
    400 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    401 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    402 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    403 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    404 ; SSE2-NEXT:    retq
    405 ;
    406 ; SSE41-LABEL: test_v16i32:
    407 ; SSE41:       # %bb.0:
    408 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    409 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    410 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    411 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    412 ; SSE41-NEXT:    retq
    413 ;
    414 ; AVX1-LABEL: test_v16i32:
    415 ; AVX1:       # %bb.0:
    416 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    417 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    418 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    419 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
    420 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
    421 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    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:    vmovntdqa (%rdi), %xmm0
    458 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    459 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    460 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
    461 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
    462 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    463 ; AVX1-NEXT:    retq
    464 ;
    465 ; AVX2-LABEL: test_v8f64:
    466 ; AVX2:       # %bb.0:
    467 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    468 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    469 ; AVX2-NEXT:    retq
    470 ;
    471 ; AVX512-LABEL: test_v8f64:
    472 ; AVX512:       # %bb.0:
    473 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
    474 ; AVX512-NEXT:    retq
    475   %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1
    476   ret <8 x double> %1
    477 }
    478 
    479 define <8 x i64> @test_v8i64(<8 x i64>* %src) {
    480 ; SSE2-LABEL: test_v8i64:
    481 ; SSE2:       # %bb.0:
    482 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    483 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    484 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    485 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    486 ; SSE2-NEXT:    retq
    487 ;
    488 ; SSE41-LABEL: test_v8i64:
    489 ; SSE41:       # %bb.0:
    490 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    491 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    492 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    493 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    494 ; SSE41-NEXT:    retq
    495 ;
    496 ; AVX1-LABEL: test_v8i64:
    497 ; AVX1:       # %bb.0:
    498 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    499 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    500 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    501 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
    502 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
    503 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    504 ; AVX1-NEXT:    retq
    505 ;
    506 ; AVX2-LABEL: test_v8i64:
    507 ; AVX2:       # %bb.0:
    508 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    509 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    510 ; AVX2-NEXT:    retq
    511 ;
    512 ; AVX512-LABEL: test_v8i64:
    513 ; AVX512:       # %bb.0:
    514 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
    515 ; AVX512-NEXT:    retq
    516   %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1
    517   ret <8 x i64> %1
    518 }
    519 
    520 define <32 x i16> @test_v32i16(<32 x i16>* %src) {
    521 ; SSE2-LABEL: test_v32i16:
    522 ; SSE2:       # %bb.0:
    523 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    524 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    525 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    526 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    527 ; SSE2-NEXT:    retq
    528 ;
    529 ; SSE41-LABEL: test_v32i16:
    530 ; SSE41:       # %bb.0:
    531 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    532 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    533 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    534 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    535 ; SSE41-NEXT:    retq
    536 ;
    537 ; AVX1-LABEL: test_v32i16:
    538 ; AVX1:       # %bb.0:
    539 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    540 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    541 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    542 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
    543 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
    544 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    545 ; AVX1-NEXT:    retq
    546 ;
    547 ; AVX2-LABEL: test_v32i16:
    548 ; AVX2:       # %bb.0:
    549 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    550 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    551 ; AVX2-NEXT:    retq
    552 ;
    553 ; AVX512F-LABEL: test_v32i16:
    554 ; AVX512F:       # %bb.0:
    555 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm0
    556 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm1
    557 ; AVX512F-NEXT:    retq
    558 ;
    559 ; AVX512BW-LABEL: test_v32i16:
    560 ; AVX512BW:       # %bb.0:
    561 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm0
    562 ; AVX512BW-NEXT:    retq
    563 ;
    564 ; AVX512VL-LABEL: test_v32i16:
    565 ; AVX512VL:       # %bb.0:
    566 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm0
    567 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm1
    568 ; AVX512VL-NEXT:    retq
    569   %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1
    570   ret <32 x i16> %1
    571 }
    572 
    573 define <64 x i8> @test_v64i8(<64 x i8>* %src) {
    574 ; SSE2-LABEL: test_v64i8:
    575 ; SSE2:       # %bb.0:
    576 ; SSE2-NEXT:    movaps (%rdi), %xmm0
    577 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
    578 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
    579 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
    580 ; SSE2-NEXT:    retq
    581 ;
    582 ; SSE41-LABEL: test_v64i8:
    583 ; SSE41:       # %bb.0:
    584 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
    585 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
    586 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
    587 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
    588 ; SSE41-NEXT:    retq
    589 ;
    590 ; AVX1-LABEL: test_v64i8:
    591 ; AVX1:       # %bb.0:
    592 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
    593 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
    594 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    595 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
    596 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
    597 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    598 ; AVX1-NEXT:    retq
    599 ;
    600 ; AVX2-LABEL: test_v64i8:
    601 ; AVX2:       # %bb.0:
    602 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
    603 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
    604 ; AVX2-NEXT:    retq
    605 ;
    606 ; AVX512F-LABEL: test_v64i8:
    607 ; AVX512F:       # %bb.0:
    608 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm0
    609 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm1
    610 ; AVX512F-NEXT:    retq
    611 ;
    612 ; AVX512BW-LABEL: test_v64i8:
    613 ; AVX512BW:       # %bb.0:
    614 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm0
    615 ; AVX512BW-NEXT:    retq
    616 ;
    617 ; AVX512VL-LABEL: test_v64i8:
    618 ; AVX512VL:       # %bb.0:
    619 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm0
    620 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm1
    621 ; AVX512VL-NEXT:    retq
    622   %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1
    623   ret <64 x i8> %1
    624 }
    625 
    626 
    627 ; Check cases where the load would be folded.
    628 
    629 define <4 x float> @test_arg_v4f32(<4 x float> %arg, <4 x float>* %src) {
    630 ; SSE2-LABEL: test_arg_v4f32:
    631 ; SSE2:       # %bb.0:
    632 ; SSE2-NEXT:    addps (%rdi), %xmm0
    633 ; SSE2-NEXT:    retq
    634 ;
    635 ; SSE41-LABEL: test_arg_v4f32:
    636 ; SSE41:       # %bb.0:
    637 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
    638 ; SSE41-NEXT:    addps %xmm1, %xmm0
    639 ; SSE41-NEXT:    retq
    640 ;
    641 ; AVX-LABEL: test_arg_v4f32:
    642 ; AVX:       # %bb.0:
    643 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
    644 ; AVX-NEXT:    vaddps %xmm1, %xmm0, %xmm0
    645 ; AVX-NEXT:    retq
    646 ;
    647 ; AVX512-LABEL: test_arg_v4f32:
    648 ; AVX512:       # %bb.0:
    649 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
    650 ; AVX512-NEXT:    vaddps %xmm1, %xmm0, %xmm0
    651 ; AVX512-NEXT:    retq
    652   %1 = load <4 x float>, <4 x float>* %src, align 16, !nontemporal !1
    653   %2 = fadd <4 x float> %arg, %1
    654   ret <4 x float> %2
    655 }
    656 
    657 define <4 x i32> @test_arg_v4i32(<4 x i32> %arg, <4 x i32>* %src) {
    658 ; SSE2-LABEL: test_arg_v4i32:
    659 ; SSE2:       # %bb.0:
    660 ; SSE2-NEXT:    paddd (%rdi), %xmm0
    661 ; SSE2-NEXT:    retq
    662 ;
    663 ; SSE41-LABEL: test_arg_v4i32:
    664 ; SSE41:       # %bb.0:
    665 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
    666 ; SSE41-NEXT:    paddd %xmm1, %xmm0
    667 ; SSE41-NEXT:    retq
    668 ;
    669 ; AVX-LABEL: test_arg_v4i32:
    670 ; AVX:       # %bb.0:
    671 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
    672 ; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
    673 ; AVX-NEXT:    retq
    674 ;
    675 ; AVX512-LABEL: test_arg_v4i32:
    676 ; AVX512:       # %bb.0:
    677 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
    678 ; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
    679 ; AVX512-NEXT:    retq
    680   %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1
    681   %2 = add <4 x i32> %arg, %1
    682   ret <4 x i32> %2
    683 }
    684 
    685 define <2 x double> @test_arg_v2f64(<2 x double> %arg, <2 x double>* %src) {
    686 ; SSE2-LABEL: test_arg_v2f64:
    687 ; SSE2:       # %bb.0:
    688 ; SSE2-NEXT:    addpd (%rdi), %xmm0
    689 ; SSE2-NEXT:    retq
    690 ;
    691 ; SSE41-LABEL: test_arg_v2f64:
    692 ; SSE41:       # %bb.0:
    693 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
    694 ; SSE41-NEXT:    addpd %xmm1, %xmm0
    695 ; SSE41-NEXT:    retq
    696 ;
    697 ; AVX-LABEL: test_arg_v2f64:
    698 ; AVX:       # %bb.0:
    699 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
    700 ; AVX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0
    701 ; AVX-NEXT:    retq
    702 ;
    703 ; AVX512-LABEL: test_arg_v2f64:
    704 ; AVX512:       # %bb.0:
    705 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
    706 ; AVX512-NEXT:    vaddpd %xmm1, %xmm0, %xmm0
    707 ; AVX512-NEXT:    retq
    708   %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1
    709   %2 = fadd <2 x double> %arg, %1
    710   ret <2 x double> %2
    711 }
    712 
    713 define <2 x i64> @test_arg_v2i64(<2 x i64> %arg, <2 x i64>* %src) {
    714 ; SSE2-LABEL: test_arg_v2i64:
    715 ; SSE2:       # %bb.0:
    716 ; SSE2-NEXT:    paddq (%rdi), %xmm0
    717 ; SSE2-NEXT:    retq
    718 ;
    719 ; SSE41-LABEL: test_arg_v2i64:
    720 ; SSE41:       # %bb.0:
    721 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
    722 ; SSE41-NEXT:    paddq %xmm1, %xmm0
    723 ; SSE41-NEXT:    retq
    724 ;
    725 ; AVX-LABEL: test_arg_v2i64:
    726 ; AVX:       # %bb.0:
    727 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
    728 ; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
    729 ; AVX-NEXT:    retq
    730 ;
    731 ; AVX512-LABEL: test_arg_v2i64:
    732 ; AVX512:       # %bb.0:
    733 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
    734 ; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
    735 ; AVX512-NEXT:    retq
    736   %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1
    737   %2 = add <2 x i64> %arg, %1
    738   ret <2 x i64> %2
    739 }
    740 
    741 define <8 x i16> @test_arg_v8i16(<8 x i16> %arg, <8 x i16>* %src) {
    742 ; SSE2-LABEL: test_arg_v8i16:
    743 ; SSE2:       # %bb.0:
    744 ; SSE2-NEXT:    paddw (%rdi), %xmm0
    745 ; SSE2-NEXT:    retq
    746 ;
    747 ; SSE41-LABEL: test_arg_v8i16:
    748 ; SSE41:       # %bb.0:
    749 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
    750 ; SSE41-NEXT:    paddw %xmm1, %xmm0
    751 ; SSE41-NEXT:    retq
    752 ;
    753 ; AVX-LABEL: test_arg_v8i16:
    754 ; AVX:       # %bb.0:
    755 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
    756 ; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0
    757 ; AVX-NEXT:    retq
    758 ;
    759 ; AVX512-LABEL: test_arg_v8i16:
    760 ; AVX512:       # %bb.0:
    761 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
    762 ; AVX512-NEXT:    vpaddw %xmm1, %xmm0, %xmm0
    763 ; AVX512-NEXT:    retq
    764   %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1
    765   %2 = add <8 x i16> %arg, %1
    766   ret <8 x i16> %2
    767 }
    768 
    769 define <16 x i8> @test_arg_v16i8(<16 x i8> %arg, <16 x i8>* %src) {
    770 ; SSE2-LABEL: test_arg_v16i8:
    771 ; SSE2:       # %bb.0:
    772 ; SSE2-NEXT:    paddb (%rdi), %xmm0
    773 ; SSE2-NEXT:    retq
    774 ;
    775 ; SSE41-LABEL: test_arg_v16i8:
    776 ; SSE41:       # %bb.0:
    777 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
    778 ; SSE41-NEXT:    paddb %xmm1, %xmm0
    779 ; SSE41-NEXT:    retq
    780 ;
    781 ; AVX-LABEL: test_arg_v16i8:
    782 ; AVX:       # %bb.0:
    783 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
    784 ; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
    785 ; AVX-NEXT:    retq
    786 ;
    787 ; AVX512-LABEL: test_arg_v16i8:
    788 ; AVX512:       # %bb.0:
    789 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
    790 ; AVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
    791 ; AVX512-NEXT:    retq
    792   %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1
    793   %2 = add <16 x i8> %arg, %1
    794   ret <16 x i8> %2
    795 }
    796 
    797 ; And now YMM versions.
    798 
    799 define <8 x float> @test_arg_v8f32(<8 x float> %arg, <8 x float>* %src) {
    800 ; SSE2-LABEL: test_arg_v8f32:
    801 ; SSE2:       # %bb.0:
    802 ; SSE2-NEXT:    addps (%rdi), %xmm0
    803 ; SSE2-NEXT:    addps 16(%rdi), %xmm1
    804 ; SSE2-NEXT:    retq
    805 ;
    806 ; SSE41-LABEL: test_arg_v8f32:
    807 ; SSE41:       # %bb.0:
    808 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
    809 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
    810 ; SSE41-NEXT:    addps %xmm3, %xmm0
    811 ; SSE41-NEXT:    addps %xmm2, %xmm1
    812 ; SSE41-NEXT:    retq
    813 ;
    814 ; AVX1-LABEL: test_arg_v8f32:
    815 ; AVX1:       # %bb.0:
    816 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1
    817 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
    818 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    819 ; AVX1-NEXT:    vaddps %ymm1, %ymm0, %ymm0
    820 ; AVX1-NEXT:    retq
    821 ;
    822 ; AVX2-LABEL: test_arg_v8f32:
    823 ; AVX2:       # %bb.0:
    824 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
    825 ; AVX2-NEXT:    vaddps %ymm1, %ymm0, %ymm0
    826 ; AVX2-NEXT:    retq
    827 ;
    828 ; AVX512-LABEL: test_arg_v8f32:
    829 ; AVX512:       # %bb.0:
    830 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
    831 ; AVX512-NEXT:    vaddps %ymm1, %ymm0, %ymm0
    832 ; AVX512-NEXT:    retq
    833   %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1
    834   %2 = fadd <8 x float> %arg, %1
    835   ret <8 x float> %2
    836 }
    837 
    838 define <8 x i32> @test_arg_v8i32(<8 x i32> %arg, <8 x i32>* %src) {
    839 ; SSE2-LABEL: test_arg_v8i32:
    840 ; SSE2:       # %bb.0:
    841 ; SSE2-NEXT:    paddd (%rdi), %xmm0
    842 ; SSE2-NEXT:    paddd 16(%rdi), %xmm1
    843 ; SSE2-NEXT:    retq
    844 ;
    845 ; SSE41-LABEL: test_arg_v8i32:
    846 ; SSE41:       # %bb.0:
    847 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
    848 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
    849 ; SSE41-NEXT:    paddd %xmm3, %xmm0
    850 ; SSE41-NEXT:    paddd %xmm2, %xmm1
    851 ; SSE41-NEXT:    retq
    852 ;
    853 ; AVX1-LABEL: test_arg_v8i32:
    854 ; AVX1:       # %bb.0:
    855 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1
    856 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
    857 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    858 ; AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm2
    859 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
    860 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    861 ; AVX1-NEXT:    retq
    862 ;
    863 ; AVX2-LABEL: test_arg_v8i32:
    864 ; AVX2:       # %bb.0:
    865 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
    866 ; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
    867 ; AVX2-NEXT:    retq
    868 ;
    869 ; AVX512-LABEL: test_arg_v8i32:
    870 ; AVX512:       # %bb.0:
    871 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
    872 ; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
    873 ; AVX512-NEXT:    retq
    874   %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1
    875   %2 = add <8 x i32> %arg, %1
    876   ret <8 x i32> %2
    877 }
    878 
    879 define <4 x double> @test_arg_v4f64(<4 x double> %arg, <4 x double>* %src) {
    880 ; SSE2-LABEL: test_arg_v4f64:
    881 ; SSE2:       # %bb.0:
    882 ; SSE2-NEXT:    addpd (%rdi), %xmm0
    883 ; SSE2-NEXT:    addpd 16(%rdi), %xmm1
    884 ; SSE2-NEXT:    retq
    885 ;
    886 ; SSE41-LABEL: test_arg_v4f64:
    887 ; SSE41:       # %bb.0:
    888 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
    889 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
    890 ; SSE41-NEXT:    addpd %xmm3, %xmm0
    891 ; SSE41-NEXT:    addpd %xmm2, %xmm1
    892 ; SSE41-NEXT:    retq
    893 ;
    894 ; AVX1-LABEL: test_arg_v4f64:
    895 ; AVX1:       # %bb.0:
    896 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1
    897 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
    898 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
    899 ; AVX1-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
    900 ; AVX1-NEXT:    retq
    901 ;
    902 ; AVX2-LABEL: test_arg_v4f64:
    903 ; AVX2:       # %bb.0:
    904 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
    905 ; AVX2-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
    906 ; AVX2-NEXT:    retq
    907 ;
    908 ; AVX512-LABEL: test_arg_v4f64:
    909 ; AVX512:       # %bb.0:
    910 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
    911 ; AVX512-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
    912 ; AVX512-NEXT:    retq
    913   %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1
    914   %2 = fadd <4 x double> %arg, %1
    915   ret <4 x double> %2
    916 }
    917 
    918 define <4 x i64> @test_arg_v4i64(<4 x i64> %arg, <4 x i64>* %src) {
    919 ; SSE2-LABEL: test_arg_v4i64:
    920 ; SSE2:       # %bb.0:
    921 ; SSE2-NEXT:    paddq (%rdi), %xmm0
    922 ; SSE2-NEXT:    paddq 16(%rdi), %xmm1
    923 ; SSE2-NEXT:    retq
    924 ;
    925 ; SSE41-LABEL: test_arg_v4i64:
    926 ; SSE41:       # %bb.0:
    927 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
    928 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
    929 ; SSE41-NEXT:    paddq %xmm3, %xmm0
    930 ; SSE41-NEXT:    paddq %xmm2, %xmm1
    931 ; SSE41-NEXT:    retq
    932 ;
    933 ; AVX1-LABEL: test_arg_v4i64:
    934 ; AVX1:       # %bb.0:
    935 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1
    936 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
    937 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    938 ; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm2
    939 ; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
    940 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    941 ; AVX1-NEXT:    retq
    942 ;
    943 ; AVX2-LABEL: test_arg_v4i64:
    944 ; AVX2:       # %bb.0:
    945 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
    946 ; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
    947 ; AVX2-NEXT:    retq
    948 ;
    949 ; AVX512-LABEL: test_arg_v4i64:
    950 ; AVX512:       # %bb.0:
    951 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
    952 ; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
    953 ; AVX512-NEXT:    retq
    954   %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1
    955   %2 = add <4 x i64> %arg, %1
    956   ret <4 x i64> %2
    957 }
    958 
    959 define <16 x i16> @test_arg_v16i16(<16 x i16> %arg, <16 x i16>* %src) {
    960 ; SSE2-LABEL: test_arg_v16i16:
    961 ; SSE2:       # %bb.0:
    962 ; SSE2-NEXT:    paddw (%rdi), %xmm0
    963 ; SSE2-NEXT:    paddw 16(%rdi), %xmm1
    964 ; SSE2-NEXT:    retq
    965 ;
    966 ; SSE41-LABEL: test_arg_v16i16:
    967 ; SSE41:       # %bb.0:
    968 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
    969 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
    970 ; SSE41-NEXT:    paddw %xmm3, %xmm0
    971 ; SSE41-NEXT:    paddw %xmm2, %xmm1
    972 ; SSE41-NEXT:    retq
    973 ;
    974 ; AVX1-LABEL: test_arg_v16i16:
    975 ; AVX1:       # %bb.0:
    976 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1
    977 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
    978 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    979 ; AVX1-NEXT:    vpaddw %xmm2, %xmm3, %xmm2
    980 ; AVX1-NEXT:    vpaddw %xmm1, %xmm0, %xmm0
    981 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    982 ; AVX1-NEXT:    retq
    983 ;
    984 ; AVX2-LABEL: test_arg_v16i16:
    985 ; AVX2:       # %bb.0:
    986 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
    987 ; AVX2-NEXT:    vpaddw %ymm1, %ymm0, %ymm0
    988 ; AVX2-NEXT:    retq
    989 ;
    990 ; AVX512-LABEL: test_arg_v16i16:
    991 ; AVX512:       # %bb.0:
    992 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
    993 ; AVX512-NEXT:    vpaddw %ymm1, %ymm0, %ymm0
    994 ; AVX512-NEXT:    retq
    995   %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1
    996   %2 = add <16 x i16> %arg, %1
    997   ret <16 x i16> %2
    998 }
    999 
   1000 define <32 x i8> @test_arg_v32i8(<32 x i8> %arg, <32 x i8>* %src) {
   1001 ; SSE2-LABEL: test_arg_v32i8:
   1002 ; SSE2:       # %bb.0:
   1003 ; SSE2-NEXT:    paddb (%rdi), %xmm0
   1004 ; SSE2-NEXT:    paddb 16(%rdi), %xmm1
   1005 ; SSE2-NEXT:    retq
   1006 ;
   1007 ; SSE41-LABEL: test_arg_v32i8:
   1008 ; SSE41:       # %bb.0:
   1009 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
   1010 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
   1011 ; SSE41-NEXT:    paddb %xmm3, %xmm0
   1012 ; SSE41-NEXT:    paddb %xmm2, %xmm1
   1013 ; SSE41-NEXT:    retq
   1014 ;
   1015 ; AVX1-LABEL: test_arg_v32i8:
   1016 ; AVX1:       # %bb.0:
   1017 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1
   1018 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
   1019 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1020 ; AVX1-NEXT:    vpaddb %xmm2, %xmm3, %xmm2
   1021 ; AVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
   1022 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
   1023 ; AVX1-NEXT:    retq
   1024 ;
   1025 ; AVX2-LABEL: test_arg_v32i8:
   1026 ; AVX2:       # %bb.0:
   1027 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
   1028 ; AVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm0
   1029 ; AVX2-NEXT:    retq
   1030 ;
   1031 ; AVX512-LABEL: test_arg_v32i8:
   1032 ; AVX512:       # %bb.0:
   1033 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
   1034 ; AVX512-NEXT:    vpaddb %ymm1, %ymm0, %ymm0
   1035 ; AVX512-NEXT:    retq
   1036   %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1
   1037   %2 = add <32 x i8> %arg, %1
   1038   ret <32 x i8> %2
   1039 }
   1040 
   1041 ; And now ZMM versions.
   1042 
   1043 define <16 x float> @test_arg_v16f32(<16 x float> %arg, <16 x float>* %src) {
   1044 ; SSE2-LABEL: test_arg_v16f32:
   1045 ; SSE2:       # %bb.0:
   1046 ; SSE2-NEXT:    addps (%rdi), %xmm0
   1047 ; SSE2-NEXT:    addps 16(%rdi), %xmm1
   1048 ; SSE2-NEXT:    addps 32(%rdi), %xmm2
   1049 ; SSE2-NEXT:    addps 48(%rdi), %xmm3
   1050 ; SSE2-NEXT:    retq
   1051 ;
   1052 ; SSE41-LABEL: test_arg_v16f32:
   1053 ; SSE41:       # %bb.0:
   1054 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
   1055 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
   1056 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
   1057 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
   1058 ; SSE41-NEXT:    addps %xmm7, %xmm0
   1059 ; SSE41-NEXT:    addps %xmm6, %xmm1
   1060 ; SSE41-NEXT:    addps %xmm5, %xmm2
   1061 ; SSE41-NEXT:    addps %xmm4, %xmm3
   1062 ; SSE41-NEXT:    retq
   1063 ;
   1064 ; AVX1-LABEL: test_arg_v16f32:
   1065 ; AVX1:       # %bb.0:
   1066 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1067 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm3
   1068 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2
   1069 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
   1070 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm4
   1071 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
   1072 ; AVX1-NEXT:    vaddps %ymm3, %ymm0, %ymm0
   1073 ; AVX1-NEXT:    vaddps %ymm2, %ymm1, %ymm1
   1074 ; AVX1-NEXT:    retq
   1075 ;
   1076 ; AVX2-LABEL: test_arg_v16f32:
   1077 ; AVX2:       # %bb.0:
   1078 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1079 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
   1080 ; AVX2-NEXT:    vaddps %ymm3, %ymm0, %ymm0
   1081 ; AVX2-NEXT:    vaddps %ymm2, %ymm1, %ymm1
   1082 ; AVX2-NEXT:    retq
   1083 ;
   1084 ; AVX512-LABEL: test_arg_v16f32:
   1085 ; AVX512:       # %bb.0:
   1086 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
   1087 ; AVX512-NEXT:    vaddps %zmm1, %zmm0, %zmm0
   1088 ; AVX512-NEXT:    retq
   1089   %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1
   1090   %2 = fadd <16 x float> %arg, %1
   1091   ret <16 x float> %2
   1092 }
   1093 
   1094 define <16 x i32> @test_arg_v16i32(<16 x i32> %arg, <16 x i32>* %src) {
   1095 ; SSE2-LABEL: test_arg_v16i32:
   1096 ; SSE2:       # %bb.0:
   1097 ; SSE2-NEXT:    paddd (%rdi), %xmm0
   1098 ; SSE2-NEXT:    paddd 16(%rdi), %xmm1
   1099 ; SSE2-NEXT:    paddd 32(%rdi), %xmm2
   1100 ; SSE2-NEXT:    paddd 48(%rdi), %xmm3
   1101 ; SSE2-NEXT:    retq
   1102 ;
   1103 ; SSE41-LABEL: test_arg_v16i32:
   1104 ; SSE41:       # %bb.0:
   1105 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
   1106 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
   1107 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
   1108 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
   1109 ; SSE41-NEXT:    paddd %xmm7, %xmm0
   1110 ; SSE41-NEXT:    paddd %xmm6, %xmm1
   1111 ; SSE41-NEXT:    paddd %xmm5, %xmm2
   1112 ; SSE41-NEXT:    paddd %xmm4, %xmm3
   1113 ; SSE41-NEXT:    retq
   1114 ;
   1115 ; AVX1-LABEL: test_arg_v16i32:
   1116 ; AVX1:       # %bb.0:
   1117 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1118 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm3
   1119 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm4
   1120 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm5
   1121 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   1122 ; AVX1-NEXT:    vpaddd %xmm5, %xmm6, %xmm5
   1123 ; AVX1-NEXT:    vpaddd %xmm4, %xmm0, %xmm0
   1124 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm0
   1125 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   1126 ; AVX1-NEXT:    vpaddd %xmm3, %xmm4, %xmm3
   1127 ; AVX1-NEXT:    vpaddd %xmm2, %xmm1, %xmm1
   1128 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
   1129 ; AVX1-NEXT:    retq
   1130 ;
   1131 ; AVX2-LABEL: test_arg_v16i32:
   1132 ; AVX2:       # %bb.0:
   1133 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1134 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
   1135 ; AVX2-NEXT:    vpaddd %ymm3, %ymm0, %ymm0
   1136 ; AVX2-NEXT:    vpaddd %ymm2, %ymm1, %ymm1
   1137 ; AVX2-NEXT:    retq
   1138 ;
   1139 ; AVX512-LABEL: test_arg_v16i32:
   1140 ; AVX512:       # %bb.0:
   1141 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
   1142 ; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
   1143 ; AVX512-NEXT:    retq
   1144   %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1
   1145   %2 = add <16 x i32> %arg, %1
   1146   ret <16 x i32> %2
   1147 }
   1148 
   1149 define <8 x double> @test_arg_v8f64(<8 x double> %arg, <8 x double>* %src) {
   1150 ; SSE2-LABEL: test_arg_v8f64:
   1151 ; SSE2:       # %bb.0:
   1152 ; SSE2-NEXT:    addpd (%rdi), %xmm0
   1153 ; SSE2-NEXT:    addpd 16(%rdi), %xmm1
   1154 ; SSE2-NEXT:    addpd 32(%rdi), %xmm2
   1155 ; SSE2-NEXT:    addpd 48(%rdi), %xmm3
   1156 ; SSE2-NEXT:    retq
   1157 ;
   1158 ; SSE41-LABEL: test_arg_v8f64:
   1159 ; SSE41:       # %bb.0:
   1160 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
   1161 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
   1162 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
   1163 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
   1164 ; SSE41-NEXT:    addpd %xmm7, %xmm0
   1165 ; SSE41-NEXT:    addpd %xmm6, %xmm1
   1166 ; SSE41-NEXT:    addpd %xmm5, %xmm2
   1167 ; SSE41-NEXT:    addpd %xmm4, %xmm3
   1168 ; SSE41-NEXT:    retq
   1169 ;
   1170 ; AVX1-LABEL: test_arg_v8f64:
   1171 ; AVX1:       # %bb.0:
   1172 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1173 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm3
   1174 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2
   1175 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
   1176 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm4
   1177 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
   1178 ; AVX1-NEXT:    vaddpd %ymm3, %ymm0, %ymm0
   1179 ; AVX1-NEXT:    vaddpd %ymm2, %ymm1, %ymm1
   1180 ; AVX1-NEXT:    retq
   1181 ;
   1182 ; AVX2-LABEL: test_arg_v8f64:
   1183 ; AVX2:       # %bb.0:
   1184 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1185 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
   1186 ; AVX2-NEXT:    vaddpd %ymm3, %ymm0, %ymm0
   1187 ; AVX2-NEXT:    vaddpd %ymm2, %ymm1, %ymm1
   1188 ; AVX2-NEXT:    retq
   1189 ;
   1190 ; AVX512-LABEL: test_arg_v8f64:
   1191 ; AVX512:       # %bb.0:
   1192 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
   1193 ; AVX512-NEXT:    vaddpd %zmm1, %zmm0, %zmm0
   1194 ; AVX512-NEXT:    retq
   1195   %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1
   1196   %2 = fadd <8 x double> %arg, %1
   1197   ret <8 x double> %2
   1198 }
   1199 
   1200 define <8 x i64> @test_arg_v8i64(<8 x i64> %arg, <8 x i64>* %src) {
   1201 ; SSE2-LABEL: test_arg_v8i64:
   1202 ; SSE2:       # %bb.0:
   1203 ; SSE2-NEXT:    paddq (%rdi), %xmm0
   1204 ; SSE2-NEXT:    paddq 16(%rdi), %xmm1
   1205 ; SSE2-NEXT:    paddq 32(%rdi), %xmm2
   1206 ; SSE2-NEXT:    paddq 48(%rdi), %xmm3
   1207 ; SSE2-NEXT:    retq
   1208 ;
   1209 ; SSE41-LABEL: test_arg_v8i64:
   1210 ; SSE41:       # %bb.0:
   1211 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
   1212 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
   1213 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
   1214 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
   1215 ; SSE41-NEXT:    paddq %xmm7, %xmm0
   1216 ; SSE41-NEXT:    paddq %xmm6, %xmm1
   1217 ; SSE41-NEXT:    paddq %xmm5, %xmm2
   1218 ; SSE41-NEXT:    paddq %xmm4, %xmm3
   1219 ; SSE41-NEXT:    retq
   1220 ;
   1221 ; AVX1-LABEL: test_arg_v8i64:
   1222 ; AVX1:       # %bb.0:
   1223 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1224 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm3
   1225 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm4
   1226 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm5
   1227 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   1228 ; AVX1-NEXT:    vpaddq %xmm5, %xmm6, %xmm5
   1229 ; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm0
   1230 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm0
   1231 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   1232 ; AVX1-NEXT:    vpaddq %xmm3, %xmm4, %xmm3
   1233 ; AVX1-NEXT:    vpaddq %xmm2, %xmm1, %xmm1
   1234 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
   1235 ; AVX1-NEXT:    retq
   1236 ;
   1237 ; AVX2-LABEL: test_arg_v8i64:
   1238 ; AVX2:       # %bb.0:
   1239 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1240 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
   1241 ; AVX2-NEXT:    vpaddq %ymm3, %ymm0, %ymm0
   1242 ; AVX2-NEXT:    vpaddq %ymm2, %ymm1, %ymm1
   1243 ; AVX2-NEXT:    retq
   1244 ;
   1245 ; AVX512-LABEL: test_arg_v8i64:
   1246 ; AVX512:       # %bb.0:
   1247 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
   1248 ; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm0
   1249 ; AVX512-NEXT:    retq
   1250   %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1
   1251   %2 = add <8 x i64> %arg, %1
   1252   ret <8 x i64> %2
   1253 }
   1254 
   1255 define <32 x i16> @test_arg_v32i16(<32 x i16> %arg, <32 x i16>* %src) {
   1256 ; SSE2-LABEL: test_arg_v32i16:
   1257 ; SSE2:       # %bb.0:
   1258 ; SSE2-NEXT:    paddw (%rdi), %xmm0
   1259 ; SSE2-NEXT:    paddw 16(%rdi), %xmm1
   1260 ; SSE2-NEXT:    paddw 32(%rdi), %xmm2
   1261 ; SSE2-NEXT:    paddw 48(%rdi), %xmm3
   1262 ; SSE2-NEXT:    retq
   1263 ;
   1264 ; SSE41-LABEL: test_arg_v32i16:
   1265 ; SSE41:       # %bb.0:
   1266 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
   1267 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
   1268 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
   1269 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
   1270 ; SSE41-NEXT:    paddw %xmm7, %xmm0
   1271 ; SSE41-NEXT:    paddw %xmm6, %xmm1
   1272 ; SSE41-NEXT:    paddw %xmm5, %xmm2
   1273 ; SSE41-NEXT:    paddw %xmm4, %xmm3
   1274 ; SSE41-NEXT:    retq
   1275 ;
   1276 ; AVX1-LABEL: test_arg_v32i16:
   1277 ; AVX1:       # %bb.0:
   1278 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1279 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm3
   1280 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm4
   1281 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm5
   1282 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   1283 ; AVX1-NEXT:    vpaddw %xmm5, %xmm6, %xmm5
   1284 ; AVX1-NEXT:    vpaddw %xmm4, %xmm0, %xmm0
   1285 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm0
   1286 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   1287 ; AVX1-NEXT:    vpaddw %xmm3, %xmm4, %xmm3
   1288 ; AVX1-NEXT:    vpaddw %xmm2, %xmm1, %xmm1
   1289 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
   1290 ; AVX1-NEXT:    retq
   1291 ;
   1292 ; AVX2-LABEL: test_arg_v32i16:
   1293 ; AVX2:       # %bb.0:
   1294 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1295 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
   1296 ; AVX2-NEXT:    vpaddw %ymm3, %ymm0, %ymm0
   1297 ; AVX2-NEXT:    vpaddw %ymm2, %ymm1, %ymm1
   1298 ; AVX2-NEXT:    retq
   1299 ;
   1300 ; AVX512F-LABEL: test_arg_v32i16:
   1301 ; AVX512F:       # %bb.0:
   1302 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1303 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm3
   1304 ; AVX512F-NEXT:    vpaddw %ymm3, %ymm0, %ymm0
   1305 ; AVX512F-NEXT:    vpaddw %ymm2, %ymm1, %ymm1
   1306 ; AVX512F-NEXT:    retq
   1307 ;
   1308 ; AVX512BW-LABEL: test_arg_v32i16:
   1309 ; AVX512BW:       # %bb.0:
   1310 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm1
   1311 ; AVX512BW-NEXT:    vpaddw %zmm1, %zmm0, %zmm0
   1312 ; AVX512BW-NEXT:    retq
   1313 ;
   1314 ; AVX512VL-LABEL: test_arg_v32i16:
   1315 ; AVX512VL:       # %bb.0:
   1316 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1317 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm3
   1318 ; AVX512VL-NEXT:    vpaddw %ymm3, %ymm0, %ymm0
   1319 ; AVX512VL-NEXT:    vpaddw %ymm2, %ymm1, %ymm1
   1320 ; AVX512VL-NEXT:    retq
   1321   %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1
   1322   %2 = add <32 x i16> %arg, %1
   1323   ret <32 x i16> %2
   1324 }
   1325 
   1326 define <64 x i8> @test_arg_v64i8(<64 x i8> %arg, <64 x i8>* %src) {
   1327 ; SSE2-LABEL: test_arg_v64i8:
   1328 ; SSE2:       # %bb.0:
   1329 ; SSE2-NEXT:    paddb (%rdi), %xmm0
   1330 ; SSE2-NEXT:    paddb 16(%rdi), %xmm1
   1331 ; SSE2-NEXT:    paddb 32(%rdi), %xmm2
   1332 ; SSE2-NEXT:    paddb 48(%rdi), %xmm3
   1333 ; SSE2-NEXT:    retq
   1334 ;
   1335 ; SSE41-LABEL: test_arg_v64i8:
   1336 ; SSE41:       # %bb.0:
   1337 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
   1338 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
   1339 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
   1340 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
   1341 ; SSE41-NEXT:    paddb %xmm7, %xmm0
   1342 ; SSE41-NEXT:    paddb %xmm6, %xmm1
   1343 ; SSE41-NEXT:    paddb %xmm5, %xmm2
   1344 ; SSE41-NEXT:    paddb %xmm4, %xmm3
   1345 ; SSE41-NEXT:    retq
   1346 ;
   1347 ; AVX1-LABEL: test_arg_v64i8:
   1348 ; AVX1:       # %bb.0:
   1349 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
   1350 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm3
   1351 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm4
   1352 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm5
   1353 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
   1354 ; AVX1-NEXT:    vpaddb %xmm5, %xmm6, %xmm5
   1355 ; AVX1-NEXT:    vpaddb %xmm4, %xmm0, %xmm0
   1356 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm0
   1357 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
   1358 ; AVX1-NEXT:    vpaddb %xmm3, %xmm4, %xmm3
   1359 ; AVX1-NEXT:    vpaddb %xmm2, %xmm1, %xmm1
   1360 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
   1361 ; AVX1-NEXT:    retq
   1362 ;
   1363 ; AVX2-LABEL: test_arg_v64i8:
   1364 ; AVX2:       # %bb.0:
   1365 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1366 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
   1367 ; AVX2-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
   1368 ; AVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1
   1369 ; AVX2-NEXT:    retq
   1370 ;
   1371 ; AVX512F-LABEL: test_arg_v64i8:
   1372 ; AVX512F:       # %bb.0:
   1373 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1374 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm3
   1375 ; AVX512F-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
   1376 ; AVX512F-NEXT:    vpaddb %ymm2, %ymm1, %ymm1
   1377 ; AVX512F-NEXT:    retq
   1378 ;
   1379 ; AVX512BW-LABEL: test_arg_v64i8:
   1380 ; AVX512BW:       # %bb.0:
   1381 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm1
   1382 ; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0
   1383 ; AVX512BW-NEXT:    retq
   1384 ;
   1385 ; AVX512VL-LABEL: test_arg_v64i8:
   1386 ; AVX512VL:       # %bb.0:
   1387 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm2
   1388 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm3
   1389 ; AVX512VL-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
   1390 ; AVX512VL-NEXT:    vpaddb %ymm2, %ymm1, %ymm1
   1391 ; AVX512VL-NEXT:    retq
   1392   %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1
   1393   %2 = add <64 x i8> %arg, %1
   1394   ret <64 x i8> %2
   1395 }
   1396 
   1397 
   1398 ; Unaligned non-temporal loads (not supported)
   1399 
   1400 define <4 x float> @test_unaligned_v4f32(<4 x float>* %src) {
   1401 ; SSE-LABEL: test_unaligned_v4f32:
   1402 ; SSE:       # %bb.0:
   1403 ; SSE-NEXT:    movups (%rdi), %xmm0
   1404 ; SSE-NEXT:    retq
   1405 ;
   1406 ; AVX-LABEL: test_unaligned_v4f32:
   1407 ; AVX:       # %bb.0:
   1408 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1409 ; AVX-NEXT:    retq
   1410 ;
   1411 ; AVX512-LABEL: test_unaligned_v4f32:
   1412 ; AVX512:       # %bb.0:
   1413 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
   1414 ; AVX512-NEXT:    retq
   1415   %1 = load <4 x float>, <4 x float>* %src, align 1, !nontemporal !1
   1416   ret <4 x float> %1
   1417 }
   1418 
   1419 define <4 x i32> @test_unaligned_v4i32(<4 x i32>* %src) {
   1420 ; SSE-LABEL: test_unaligned_v4i32:
   1421 ; SSE:       # %bb.0:
   1422 ; SSE-NEXT:    movups (%rdi), %xmm0
   1423 ; SSE-NEXT:    retq
   1424 ;
   1425 ; AVX-LABEL: test_unaligned_v4i32:
   1426 ; AVX:       # %bb.0:
   1427 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1428 ; AVX-NEXT:    retq
   1429 ;
   1430 ; AVX512-LABEL: test_unaligned_v4i32:
   1431 ; AVX512:       # %bb.0:
   1432 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
   1433 ; AVX512-NEXT:    retq
   1434   %1 = load <4 x i32>, <4 x i32>* %src, align 1, !nontemporal !1
   1435   ret <4 x i32> %1
   1436 }
   1437 
   1438 define <2 x double> @test_unaligned_v2f64(<2 x double>* %src) {
   1439 ; SSE-LABEL: test_unaligned_v2f64:
   1440 ; SSE:       # %bb.0:
   1441 ; SSE-NEXT:    movups (%rdi), %xmm0
   1442 ; SSE-NEXT:    retq
   1443 ;
   1444 ; AVX-LABEL: test_unaligned_v2f64:
   1445 ; AVX:       # %bb.0:
   1446 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1447 ; AVX-NEXT:    retq
   1448 ;
   1449 ; AVX512-LABEL: test_unaligned_v2f64:
   1450 ; AVX512:       # %bb.0:
   1451 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
   1452 ; AVX512-NEXT:    retq
   1453   %1 = load <2 x double>, <2 x double>* %src, align 1, !nontemporal !1
   1454   ret <2 x double> %1
   1455 }
   1456 
   1457 define <2 x i64> @test_unaligned_v2i64(<2 x i64>* %src) {
   1458 ; SSE-LABEL: test_unaligned_v2i64:
   1459 ; SSE:       # %bb.0:
   1460 ; SSE-NEXT:    movups (%rdi), %xmm0
   1461 ; SSE-NEXT:    retq
   1462 ;
   1463 ; AVX-LABEL: test_unaligned_v2i64:
   1464 ; AVX:       # %bb.0:
   1465 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1466 ; AVX-NEXT:    retq
   1467 ;
   1468 ; AVX512-LABEL: test_unaligned_v2i64:
   1469 ; AVX512:       # %bb.0:
   1470 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
   1471 ; AVX512-NEXT:    retq
   1472   %1 = load <2 x i64>, <2 x i64>* %src, align 1, !nontemporal !1
   1473   ret <2 x i64> %1
   1474 }
   1475 
   1476 define <8 x i16> @test_unaligned_v8i16(<8 x i16>* %src) {
   1477 ; SSE-LABEL: test_unaligned_v8i16:
   1478 ; SSE:       # %bb.0:
   1479 ; SSE-NEXT:    movups (%rdi), %xmm0
   1480 ; SSE-NEXT:    retq
   1481 ;
   1482 ; AVX-LABEL: test_unaligned_v8i16:
   1483 ; AVX:       # %bb.0:
   1484 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1485 ; AVX-NEXT:    retq
   1486 ;
   1487 ; AVX512-LABEL: test_unaligned_v8i16:
   1488 ; AVX512:       # %bb.0:
   1489 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
   1490 ; AVX512-NEXT:    retq
   1491   %1 = load <8 x i16>, <8 x i16>* %src, align 1, !nontemporal !1
   1492   ret <8 x i16> %1
   1493 }
   1494 
   1495 define <16 x i8> @test_unaligned_v16i8(<16 x i8>* %src) {
   1496 ; SSE-LABEL: test_unaligned_v16i8:
   1497 ; SSE:       # %bb.0:
   1498 ; SSE-NEXT:    movups (%rdi), %xmm0
   1499 ; SSE-NEXT:    retq
   1500 ;
   1501 ; AVX-LABEL: test_unaligned_v16i8:
   1502 ; AVX:       # %bb.0:
   1503 ; AVX-NEXT:    vmovups (%rdi), %xmm0
   1504 ; AVX-NEXT:    retq
   1505 ;
   1506 ; AVX512-LABEL: test_unaligned_v16i8:
   1507 ; AVX512:       # %bb.0:
   1508 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
   1509 ; AVX512-NEXT:    retq
   1510   %1 = load <16 x i8>, <16 x i8>* %src, align 1, !nontemporal !1
   1511   ret <16 x i8> %1
   1512 }
   1513 
   1514 ; And now YMM versions.
   1515 
   1516 define <8 x float> @test_unaligned_v8f32(<8 x float>* %src) {
   1517 ; SSE-LABEL: test_unaligned_v8f32:
   1518 ; SSE:       # %bb.0:
   1519 ; SSE-NEXT:    movups (%rdi), %xmm0
   1520 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1521 ; SSE-NEXT:    retq
   1522 ;
   1523 ; AVX-LABEL: test_unaligned_v8f32:
   1524 ; AVX:       # %bb.0:
   1525 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1526 ; AVX-NEXT:    retq
   1527 ;
   1528 ; AVX512-LABEL: test_unaligned_v8f32:
   1529 ; AVX512:       # %bb.0:
   1530 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
   1531 ; AVX512-NEXT:    retq
   1532   %1 = load <8 x float>, <8 x float>* %src, align 1, !nontemporal !1
   1533   ret <8 x float> %1
   1534 }
   1535 
   1536 define <8 x i32> @test_unaligned_v8i32(<8 x i32>* %src) {
   1537 ; SSE-LABEL: test_unaligned_v8i32:
   1538 ; SSE:       # %bb.0:
   1539 ; SSE-NEXT:    movups (%rdi), %xmm0
   1540 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1541 ; SSE-NEXT:    retq
   1542 ;
   1543 ; AVX-LABEL: test_unaligned_v8i32:
   1544 ; AVX:       # %bb.0:
   1545 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1546 ; AVX-NEXT:    retq
   1547 ;
   1548 ; AVX512-LABEL: test_unaligned_v8i32:
   1549 ; AVX512:       # %bb.0:
   1550 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
   1551 ; AVX512-NEXT:    retq
   1552   %1 = load <8 x i32>, <8 x i32>* %src, align 1, !nontemporal !1
   1553   ret <8 x i32> %1
   1554 }
   1555 
   1556 define <4 x double> @test_unaligned_v4f64(<4 x double>* %src) {
   1557 ; SSE-LABEL: test_unaligned_v4f64:
   1558 ; SSE:       # %bb.0:
   1559 ; SSE-NEXT:    movups (%rdi), %xmm0
   1560 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1561 ; SSE-NEXT:    retq
   1562 ;
   1563 ; AVX-LABEL: test_unaligned_v4f64:
   1564 ; AVX:       # %bb.0:
   1565 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1566 ; AVX-NEXT:    retq
   1567 ;
   1568 ; AVX512-LABEL: test_unaligned_v4f64:
   1569 ; AVX512:       # %bb.0:
   1570 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
   1571 ; AVX512-NEXT:    retq
   1572   %1 = load <4 x double>, <4 x double>* %src, align 1, !nontemporal !1
   1573   ret <4 x double> %1
   1574 }
   1575 
   1576 define <4 x i64> @test_unaligned_v4i64(<4 x i64>* %src) {
   1577 ; SSE-LABEL: test_unaligned_v4i64:
   1578 ; SSE:       # %bb.0:
   1579 ; SSE-NEXT:    movups (%rdi), %xmm0
   1580 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1581 ; SSE-NEXT:    retq
   1582 ;
   1583 ; AVX-LABEL: test_unaligned_v4i64:
   1584 ; AVX:       # %bb.0:
   1585 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1586 ; AVX-NEXT:    retq
   1587 ;
   1588 ; AVX512-LABEL: test_unaligned_v4i64:
   1589 ; AVX512:       # %bb.0:
   1590 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
   1591 ; AVX512-NEXT:    retq
   1592   %1 = load <4 x i64>, <4 x i64>* %src, align 1, !nontemporal !1
   1593   ret <4 x i64> %1
   1594 }
   1595 
   1596 define <16 x i16> @test_unaligned_v16i16(<16 x i16>* %src) {
   1597 ; SSE-LABEL: test_unaligned_v16i16:
   1598 ; SSE:       # %bb.0:
   1599 ; SSE-NEXT:    movups (%rdi), %xmm0
   1600 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1601 ; SSE-NEXT:    retq
   1602 ;
   1603 ; AVX-LABEL: test_unaligned_v16i16:
   1604 ; AVX:       # %bb.0:
   1605 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1606 ; AVX-NEXT:    retq
   1607 ;
   1608 ; AVX512-LABEL: test_unaligned_v16i16:
   1609 ; AVX512:       # %bb.0:
   1610 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
   1611 ; AVX512-NEXT:    retq
   1612   %1 = load <16 x i16>, <16 x i16>* %src, align 1, !nontemporal !1
   1613   ret <16 x i16> %1
   1614 }
   1615 
   1616 define <32 x i8> @test_unaligned_v32i8(<32 x i8>* %src) {
   1617 ; SSE-LABEL: test_unaligned_v32i8:
   1618 ; SSE:       # %bb.0:
   1619 ; SSE-NEXT:    movups (%rdi), %xmm0
   1620 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1621 ; SSE-NEXT:    retq
   1622 ;
   1623 ; AVX-LABEL: test_unaligned_v32i8:
   1624 ; AVX:       # %bb.0:
   1625 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1626 ; AVX-NEXT:    retq
   1627 ;
   1628 ; AVX512-LABEL: test_unaligned_v32i8:
   1629 ; AVX512:       # %bb.0:
   1630 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
   1631 ; AVX512-NEXT:    retq
   1632   %1 = load <32 x i8>, <32 x i8>* %src, align 1, !nontemporal !1
   1633   ret <32 x i8> %1
   1634 }
   1635 
   1636 ; And now ZMM versions.
   1637 
   1638 define <16 x float> @test_unaligned_v16f32(<16 x float>* %src) {
   1639 ; SSE-LABEL: test_unaligned_v16f32:
   1640 ; SSE:       # %bb.0:
   1641 ; SSE-NEXT:    movups (%rdi), %xmm0
   1642 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1643 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1644 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1645 ; SSE-NEXT:    retq
   1646 ;
   1647 ; AVX-LABEL: test_unaligned_v16f32:
   1648 ; AVX:       # %bb.0:
   1649 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1650 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1651 ; AVX-NEXT:    retq
   1652 ;
   1653 ; AVX512-LABEL: test_unaligned_v16f32:
   1654 ; AVX512:       # %bb.0:
   1655 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
   1656 ; AVX512-NEXT:    retq
   1657   %1 = load <16 x float>, <16 x float>* %src, align 1, !nontemporal !1
   1658   ret <16 x float> %1
   1659 }
   1660 
   1661 define <16 x i32> @test_unaligned_v16i32(<16 x i32>* %src) {
   1662 ; SSE-LABEL: test_unaligned_v16i32:
   1663 ; SSE:       # %bb.0:
   1664 ; SSE-NEXT:    movups (%rdi), %xmm0
   1665 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1666 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1667 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1668 ; SSE-NEXT:    retq
   1669 ;
   1670 ; AVX-LABEL: test_unaligned_v16i32:
   1671 ; AVX:       # %bb.0:
   1672 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1673 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1674 ; AVX-NEXT:    retq
   1675 ;
   1676 ; AVX512-LABEL: test_unaligned_v16i32:
   1677 ; AVX512:       # %bb.0:
   1678 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
   1679 ; AVX512-NEXT:    retq
   1680   %1 = load <16 x i32>, <16 x i32>* %src, align 1, !nontemporal !1
   1681   ret <16 x i32> %1
   1682 }
   1683 
   1684 define <8 x double> @test_unaligned_v8f64(<8 x double>* %src) {
   1685 ; SSE-LABEL: test_unaligned_v8f64:
   1686 ; SSE:       # %bb.0:
   1687 ; SSE-NEXT:    movups (%rdi), %xmm0
   1688 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1689 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1690 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1691 ; SSE-NEXT:    retq
   1692 ;
   1693 ; AVX-LABEL: test_unaligned_v8f64:
   1694 ; AVX:       # %bb.0:
   1695 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1696 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1697 ; AVX-NEXT:    retq
   1698 ;
   1699 ; AVX512-LABEL: test_unaligned_v8f64:
   1700 ; AVX512:       # %bb.0:
   1701 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
   1702 ; AVX512-NEXT:    retq
   1703   %1 = load <8 x double>, <8 x double>* %src, align 1, !nontemporal !1
   1704   ret <8 x double> %1
   1705 }
   1706 
   1707 define <8 x i64> @test_unaligned_v8i64(<8 x i64>* %src) {
   1708 ; SSE-LABEL: test_unaligned_v8i64:
   1709 ; SSE:       # %bb.0:
   1710 ; SSE-NEXT:    movups (%rdi), %xmm0
   1711 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1712 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1713 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1714 ; SSE-NEXT:    retq
   1715 ;
   1716 ; AVX-LABEL: test_unaligned_v8i64:
   1717 ; AVX:       # %bb.0:
   1718 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1719 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1720 ; AVX-NEXT:    retq
   1721 ;
   1722 ; AVX512-LABEL: test_unaligned_v8i64:
   1723 ; AVX512:       # %bb.0:
   1724 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
   1725 ; AVX512-NEXT:    retq
   1726   %1 = load <8 x i64>, <8 x i64>* %src, align 1, !nontemporal !1
   1727   ret <8 x i64> %1
   1728 }
   1729 
   1730 define <32 x i16> @test_unaligned_v32i16(<32 x i16>* %src) {
   1731 ; SSE-LABEL: test_unaligned_v32i16:
   1732 ; SSE:       # %bb.0:
   1733 ; SSE-NEXT:    movups (%rdi), %xmm0
   1734 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1735 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1736 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1737 ; SSE-NEXT:    retq
   1738 ;
   1739 ; AVX-LABEL: test_unaligned_v32i16:
   1740 ; AVX:       # %bb.0:
   1741 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1742 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1743 ; AVX-NEXT:    retq
   1744 ;
   1745 ; AVX512F-LABEL: test_unaligned_v32i16:
   1746 ; AVX512F:       # %bb.0:
   1747 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1748 ; AVX512F-NEXT:    vmovups 32(%rdi), %ymm1
   1749 ; AVX512F-NEXT:    retq
   1750 ;
   1751 ; AVX512BW-LABEL: test_unaligned_v32i16:
   1752 ; AVX512BW:       # %bb.0:
   1753 ; AVX512BW-NEXT:    vmovups (%rdi), %zmm0
   1754 ; AVX512BW-NEXT:    retq
   1755 ;
   1756 ; AVX512VL-LABEL: test_unaligned_v32i16:
   1757 ; AVX512VL:       # %bb.0:
   1758 ; AVX512VL-NEXT:    vmovups (%rdi), %ymm0
   1759 ; AVX512VL-NEXT:    vmovups 32(%rdi), %ymm1
   1760 ; AVX512VL-NEXT:    retq
   1761   %1 = load <32 x i16>, <32 x i16>* %src, align 1, !nontemporal !1
   1762   ret <32 x i16> %1
   1763 }
   1764 
   1765 define <64 x i8> @test_unaligned_v64i8(<64 x i8>* %src) {
   1766 ; SSE-LABEL: test_unaligned_v64i8:
   1767 ; SSE:       # %bb.0:
   1768 ; SSE-NEXT:    movups (%rdi), %xmm0
   1769 ; SSE-NEXT:    movups 16(%rdi), %xmm1
   1770 ; SSE-NEXT:    movups 32(%rdi), %xmm2
   1771 ; SSE-NEXT:    movups 48(%rdi), %xmm3
   1772 ; SSE-NEXT:    retq
   1773 ;
   1774 ; AVX-LABEL: test_unaligned_v64i8:
   1775 ; AVX:       # %bb.0:
   1776 ; AVX-NEXT:    vmovups (%rdi), %ymm0
   1777 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
   1778 ; AVX-NEXT:    retq
   1779 ;
   1780 ; AVX512F-LABEL: test_unaligned_v64i8:
   1781 ; AVX512F:       # %bb.0:
   1782 ; AVX512F-NEXT:    vmovups (%rdi), %ymm0
   1783 ; AVX512F-NEXT:    vmovups 32(%rdi), %ymm1
   1784 ; AVX512F-NEXT:    retq
   1785 ;
   1786 ; AVX512BW-LABEL: test_unaligned_v64i8:
   1787 ; AVX512BW:       # %bb.0:
   1788 ; AVX512BW-NEXT:    vmovups (%rdi), %zmm0
   1789 ; AVX512BW-NEXT:    retq
   1790 ;
   1791 ; AVX512VL-LABEL: test_unaligned_v64i8:
   1792 ; AVX512VL:       # %bb.0:
   1793 ; AVX512VL-NEXT:    vmovups (%rdi), %ymm0
   1794 ; AVX512VL-NEXT:    vmovups 32(%rdi), %ymm1
   1795 ; AVX512VL-NEXT:    retq
   1796   %1 = load <64 x i8>, <64 x i8>* %src, align 1, !nontemporal !1
   1797   ret <64 x i8> %1
   1798 }
   1799 
   1800 define <16 x i32> @test_masked_v16i32(i8 * %addr, <16 x i32> %old, <16 x i32> %mask1) {
   1801 ; SSE2-LABEL: test_masked_v16i32:
   1802 ; SSE2:       # %bb.0:
   1803 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
   1804 ; SSE2-NEXT:    pxor %xmm12, %xmm12
   1805 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm7
   1806 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
   1807 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
   1808 ; SSE2-NEXT:    pxor %xmm0, %xmm8
   1809 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm6
   1810 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   1811 ; SSE2-NEXT:    pxor %xmm0, %xmm9
   1812 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm5
   1813 ; SSE2-NEXT:    movdqa %xmm5, %xmm11
   1814 ; SSE2-NEXT:    pxor %xmm0, %xmm11
   1815 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm4
   1816 ; SSE2-NEXT:    pxor %xmm4, %xmm0
   1817 ; SSE2-NEXT:    pandn (%rdi), %xmm4
   1818 ; SSE2-NEXT:    pandn %xmm10, %xmm0
   1819 ; SSE2-NEXT:    por %xmm4, %xmm0
   1820 ; SSE2-NEXT:    pandn 16(%rdi), %xmm5
   1821 ; SSE2-NEXT:    pandn %xmm1, %xmm11
   1822 ; SSE2-NEXT:    por %xmm5, %xmm11
   1823 ; SSE2-NEXT:    pandn 32(%rdi), %xmm6
   1824 ; SSE2-NEXT:    pandn %xmm2, %xmm9
   1825 ; SSE2-NEXT:    por %xmm6, %xmm9
   1826 ; SSE2-NEXT:    pandn 48(%rdi), %xmm7
   1827 ; SSE2-NEXT:    pandn %xmm3, %xmm8
   1828 ; SSE2-NEXT:    por %xmm7, %xmm8
   1829 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
   1830 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   1831 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
   1832 ; SSE2-NEXT:    retq
   1833 ;
   1834 ; SSE41-LABEL: test_masked_v16i32:
   1835 ; SSE41:       # %bb.0:
   1836 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
   1837 ; SSE41-NEXT:    pxor %xmm0, %xmm0
   1838 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm7
   1839 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm9
   1840 ; SSE41-NEXT:    pxor %xmm9, %xmm7
   1841 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm6
   1842 ; SSE41-NEXT:    pxor %xmm9, %xmm6
   1843 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm5
   1844 ; SSE41-NEXT:    pxor %xmm9, %xmm5
   1845 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
   1846 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   1847 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm9
   1848 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm10
   1849 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm11
   1850 ; SSE41-NEXT:    movntdqa (%rdi), %xmm4
   1851 ; SSE41-NEXT:    blendvps %xmm0, %xmm4, %xmm8
   1852 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
   1853 ; SSE41-NEXT:    blendvps %xmm0, %xmm11, %xmm1
   1854 ; SSE41-NEXT:    movdqa %xmm6, %xmm0
   1855 ; SSE41-NEXT:    blendvps %xmm0, %xmm10, %xmm2
   1856 ; SSE41-NEXT:    movdqa %xmm7, %xmm0
   1857 ; SSE41-NEXT:    blendvps %xmm0, %xmm9, %xmm3
   1858 ; SSE41-NEXT:    movaps %xmm8, %xmm0
   1859 ; SSE41-NEXT:    retq
   1860 ;
   1861 ; AVX1-LABEL: test_masked_v16i32:
   1862 ; AVX1:       # %bb.0:
   1863 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   1864 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
   1865 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
   1866 ; AVX1-NEXT:    vpcmpeqd %xmm6, %xmm6, %xmm6
   1867 ; AVX1-NEXT:    vpxor %xmm6, %xmm4, %xmm4
   1868 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm3, %xmm3
   1869 ; AVX1-NEXT:    vpxor %xmm6, %xmm3, %xmm3
   1870 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
   1871 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
   1872 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
   1873 ; AVX1-NEXT:    vpxor %xmm6, %xmm4, %xmm4
   1874 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm2, %xmm2
   1875 ; AVX1-NEXT:    vpxor %xmm6, %xmm2, %xmm2
   1876 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
   1877 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm4
   1878 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm5
   1879 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm4, %ymm4
   1880 ; AVX1-NEXT:    vblendvps %ymm3, %ymm4, %ymm1, %ymm1
   1881 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
   1882 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm4
   1883 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
   1884 ; AVX1-NEXT:    vblendvps %ymm2, %ymm3, %ymm0, %ymm0
   1885 ; AVX1-NEXT:    retq
   1886 ;
   1887 ; AVX2-LABEL: test_masked_v16i32:
   1888 ; AVX2:       # %bb.0:
   1889 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
   1890 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm3
   1891 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
   1892 ; AVX2-NEXT:    vpxor %ymm5, %ymm3, %ymm3
   1893 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
   1894 ; AVX2-NEXT:    vpxor %ymm5, %ymm2, %ymm2
   1895 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm4
   1896 ; AVX2-NEXT:    vblendvps %ymm3, %ymm4, %ymm1, %ymm1
   1897 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
   1898 ; AVX2-NEXT:    vblendvps %ymm2, %ymm3, %ymm0, %ymm0
   1899 ; AVX2-NEXT:    retq
   1900 ;
   1901 ; AVX512-LABEL: test_masked_v16i32:
   1902 ; AVX512:       # %bb.0:
   1903 ; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k1
   1904 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
   1905 ; AVX512-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}
   1906 ; AVX512-NEXT:    retq
   1907   %mask = icmp ne <16 x i32> %mask1, zeroinitializer
   1908   %vaddr = bitcast i8* %addr to <16 x i32>*
   1909   %r = load <16 x i32>, <16 x i32>* %vaddr, align 64, !nontemporal !1
   1910   %res = select <16 x i1> %mask, <16 x i32> %r, <16 x i32> %old
   1911   ret <16 x i32>%res
   1912 }
   1913 
   1914 !1 = !{i32 1}
   1915