[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / nontemporal-loads.ll
blob8f0118d39bd66bea27878bf29d22e583e663a529
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
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
16 ; SSE41-LABEL: test_v4f32:
17 ; SSE41:       # %bb.0:
18 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
19 ; SSE41-NEXT:    retq
21 ; AVX-LABEL: test_v4f32:
22 ; AVX:       # %bb.0:
23 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
24 ; AVX-NEXT:    retq
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
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
40 ; SSE41-LABEL: test_v4i32:
41 ; SSE41:       # %bb.0:
42 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
43 ; SSE41-NEXT:    retq
45 ; AVX-LABEL: test_v4i32:
46 ; AVX:       # %bb.0:
47 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
48 ; AVX-NEXT:    retq
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
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
64 ; SSE41-LABEL: test_v2f64:
65 ; SSE41:       # %bb.0:
66 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
67 ; SSE41-NEXT:    retq
69 ; AVX-LABEL: test_v2f64:
70 ; AVX:       # %bb.0:
71 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
72 ; AVX-NEXT:    retq
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
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
88 ; SSE41-LABEL: test_v2i64:
89 ; SSE41:       # %bb.0:
90 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
91 ; SSE41-NEXT:    retq
93 ; AVX-LABEL: test_v2i64:
94 ; AVX:       # %bb.0:
95 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
96 ; AVX-NEXT:    retq
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
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
112 ; SSE41-LABEL: test_v8i16:
113 ; SSE41:       # %bb.0:
114 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
115 ; SSE41-NEXT:    retq
117 ; AVX-LABEL: test_v8i16:
118 ; AVX:       # %bb.0:
119 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
120 ; AVX-NEXT:    retq
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
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
136 ; SSE41-LABEL: test_v16i8:
137 ; SSE41:       # %bb.0:
138 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
139 ; SSE41-NEXT:    retq
141 ; AVX-LABEL: test_v16i8:
142 ; AVX:       # %bb.0:
143 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
144 ; AVX-NEXT:    retq
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
154 ; And now YMM versions.
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
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
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
176 ; AVX2-LABEL: test_v8f32:
177 ; AVX2:       # %bb.0:
178 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
179 ; AVX2-NEXT:    retq
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
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
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
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
209 ; AVX2-LABEL: test_v8i32:
210 ; AVX2:       # %bb.0:
211 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
212 ; AVX2-NEXT:    retq
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
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
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
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
242 ; AVX2-LABEL: test_v4f64:
243 ; AVX2:       # %bb.0:
244 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
245 ; AVX2-NEXT:    retq
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
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
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
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
275 ; AVX2-LABEL: test_v4i64:
276 ; AVX2:       # %bb.0:
277 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
278 ; AVX2-NEXT:    retq
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
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
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
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
308 ; AVX2-LABEL: test_v16i16:
309 ; AVX2:       # %bb.0:
310 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
311 ; AVX2-NEXT:    retq
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
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
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
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
341 ; AVX2-LABEL: test_v32i8:
342 ; AVX2:       # %bb.0:
343 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
344 ; AVX2-NEXT:    retq
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
354 ; And now ZMM versions.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
559 ; AVX512BW-LABEL: test_v32i16:
560 ; AVX512BW:       # %bb.0:
561 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm0
562 ; AVX512BW-NEXT:    retq
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
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
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
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
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
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
612 ; AVX512BW-LABEL: test_v64i8:
613 ; AVX512BW:       # %bb.0:
614 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm0
615 ; AVX512BW-NEXT:    retq
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
627 ; Check cases where the load would be folded.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
797 ; And now YMM versions.
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
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
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
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
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
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
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
853 ; AVX1-LABEL: test_arg_v8i32:
854 ; AVX1:       # %bb.0:
855 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
856 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
857 ; AVX1-NEXT:    vpaddd %xmm1, %xmm2, %xmm1
858 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2
859 ; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm0
860 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
861 ; AVX1-NEXT:    retq
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
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
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
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
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
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
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
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
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
933 ; AVX1-LABEL: test_arg_v4i64:
934 ; AVX1:       # %bb.0:
935 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
936 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
937 ; AVX1-NEXT:    vpaddq %xmm1, %xmm2, %xmm1
938 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2
939 ; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm0
940 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
941 ; AVX1-NEXT:    retq
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
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
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
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
974 ; AVX1-LABEL: test_arg_v16i16:
975 ; AVX1:       # %bb.0:
976 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
977 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
978 ; AVX1-NEXT:    vpaddw %xmm1, %xmm2, %xmm1
979 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2
980 ; AVX1-NEXT:    vpaddw %xmm2, %xmm0, %xmm0
981 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
982 ; AVX1-NEXT:    retq
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
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
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
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
1015 ; AVX1-LABEL: test_arg_v32i8:
1016 ; AVX1:       # %bb.0:
1017 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
1018 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1019 ; AVX1-NEXT:    vpaddb %xmm1, %xmm2, %xmm1
1020 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2
1021 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1022 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1023 ; AVX1-NEXT:    retq
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
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
1041 ; And now ZMM versions.
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
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
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
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
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
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
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
1115 ; AVX1-LABEL: test_arg_v16i32:
1116 ; AVX1:       # %bb.0:
1117 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
1118 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1119 ; AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm2
1120 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1121 ; AVX1-NEXT:    vpaddd %xmm3, %xmm0, %xmm0
1122 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1123 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
1124 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1125 ; AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm2
1126 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm3
1127 ; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm1
1128 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1129 ; AVX1-NEXT:    retq
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
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
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
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
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
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
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
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
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
1221 ; AVX1-LABEL: test_arg_v8i64:
1222 ; AVX1:       # %bb.0:
1223 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
1224 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1225 ; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm2
1226 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1227 ; AVX1-NEXT:    vpaddq %xmm3, %xmm0, %xmm0
1228 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1229 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
1230 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1231 ; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm2
1232 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm3
1233 ; AVX1-NEXT:    vpaddq %xmm3, %xmm1, %xmm1
1234 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1235 ; AVX1-NEXT:    retq
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
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
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
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
1276 ; AVX1-LABEL: test_arg_v32i16:
1277 ; AVX1:       # %bb.0:
1278 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
1279 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1280 ; AVX1-NEXT:    vpaddw %xmm2, %xmm3, %xmm2
1281 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1282 ; AVX1-NEXT:    vpaddw %xmm3, %xmm0, %xmm0
1283 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1284 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
1285 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1286 ; AVX1-NEXT:    vpaddw %xmm2, %xmm3, %xmm2
1287 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm3
1288 ; AVX1-NEXT:    vpaddw %xmm3, %xmm1, %xmm1
1289 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1290 ; AVX1-NEXT:    retq
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
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
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
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
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
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
1347 ; AVX1-LABEL: test_arg_v64i8:
1348 ; AVX1:       # %bb.0:
1349 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
1350 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1351 ; AVX1-NEXT:    vpaddb %xmm2, %xmm3, %xmm2
1352 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1353 ; AVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm0
1354 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1355 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
1356 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1357 ; AVX1-NEXT:    vpaddb %xmm2, %xmm3, %xmm2
1358 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm3
1359 ; AVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm1
1360 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1361 ; AVX1-NEXT:    retq
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
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
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
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
1398 ; Unaligned non-temporal loads (not supported)
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
1406 ; AVX-LABEL: test_unaligned_v4f32:
1407 ; AVX:       # %bb.0:
1408 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1409 ; AVX-NEXT:    retq
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
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
1425 ; AVX-LABEL: test_unaligned_v4i32:
1426 ; AVX:       # %bb.0:
1427 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1428 ; AVX-NEXT:    retq
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
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
1444 ; AVX-LABEL: test_unaligned_v2f64:
1445 ; AVX:       # %bb.0:
1446 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1447 ; AVX-NEXT:    retq
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
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
1463 ; AVX-LABEL: test_unaligned_v2i64:
1464 ; AVX:       # %bb.0:
1465 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1466 ; AVX-NEXT:    retq
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
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
1482 ; AVX-LABEL: test_unaligned_v8i16:
1483 ; AVX:       # %bb.0:
1484 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1485 ; AVX-NEXT:    retq
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
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
1501 ; AVX-LABEL: test_unaligned_v16i8:
1502 ; AVX:       # %bb.0:
1503 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1504 ; AVX-NEXT:    retq
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
1514 ; And now YMM versions.
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
1523 ; AVX-LABEL: test_unaligned_v8f32:
1524 ; AVX:       # %bb.0:
1525 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1526 ; AVX-NEXT:    retq
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
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
1543 ; AVX-LABEL: test_unaligned_v8i32:
1544 ; AVX:       # %bb.0:
1545 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1546 ; AVX-NEXT:    retq
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
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
1563 ; AVX-LABEL: test_unaligned_v4f64:
1564 ; AVX:       # %bb.0:
1565 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1566 ; AVX-NEXT:    retq
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
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
1583 ; AVX-LABEL: test_unaligned_v4i64:
1584 ; AVX:       # %bb.0:
1585 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1586 ; AVX-NEXT:    retq
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
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
1603 ; AVX-LABEL: test_unaligned_v16i16:
1604 ; AVX:       # %bb.0:
1605 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1606 ; AVX-NEXT:    retq
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
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
1623 ; AVX-LABEL: test_unaligned_v32i8:
1624 ; AVX:       # %bb.0:
1625 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1626 ; AVX-NEXT:    retq
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
1636 ; And now ZMM versions.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1751 ; AVX512BW-LABEL: test_unaligned_v32i16:
1752 ; AVX512BW:       # %bb.0:
1753 ; AVX512BW-NEXT:    vmovups (%rdi), %zmm0
1754 ; AVX512BW-NEXT:    retq
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
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
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
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
1786 ; AVX512BW-LABEL: test_unaligned_v64i8:
1787 ; AVX512BW:       # %bb.0:
1788 ; AVX512BW-NEXT:    vmovups (%rdi), %zmm0
1789 ; AVX512BW-NEXT:    retq
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
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:    pxor %xmm8, %xmm8
1804 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm7
1805 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm6
1806 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
1807 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
1808 ; SSE2-NEXT:    pand %xmm4, %xmm0
1809 ; SSE2-NEXT:    pandn (%rdi), %xmm4
1810 ; SSE2-NEXT:    por %xmm4, %xmm0
1811 ; SSE2-NEXT:    pand %xmm5, %xmm1
1812 ; SSE2-NEXT:    pandn 16(%rdi), %xmm5
1813 ; SSE2-NEXT:    por %xmm5, %xmm1
1814 ; SSE2-NEXT:    pand %xmm6, %xmm2
1815 ; SSE2-NEXT:    pandn 32(%rdi), %xmm6
1816 ; SSE2-NEXT:    por %xmm6, %xmm2
1817 ; SSE2-NEXT:    pand %xmm7, %xmm3
1818 ; SSE2-NEXT:    pandn 48(%rdi), %xmm7
1819 ; SSE2-NEXT:    por %xmm7, %xmm3
1820 ; SSE2-NEXT:    retq
1822 ; SSE41-LABEL: test_masked_v16i32:
1823 ; SSE41:       # %bb.0:
1824 ; SSE41-NEXT:    movdqa %xmm7, %xmm9
1825 ; SSE41-NEXT:    movdqa %xmm6, %xmm10
1826 ; SSE41-NEXT:    movdqa %xmm5, %xmm11
1827 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
1828 ; SSE41-NEXT:    pxor %xmm0, %xmm0
1829 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm9
1830 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm10
1831 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm11
1832 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
1833 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1834 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm7
1835 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
1836 ; SSE41-NEXT:    movntdqa (%rdi), %xmm5
1837 ; SSE41-NEXT:    blendvps %xmm0, %xmm8, %xmm5
1838 ; SSE41-NEXT:    movdqa %xmm11, %xmm0
1839 ; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm6
1840 ; SSE41-NEXT:    movdqa %xmm10, %xmm0
1841 ; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm7
1842 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
1843 ; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm4
1844 ; SSE41-NEXT:    movaps %xmm5, %xmm0
1845 ; SSE41-NEXT:    movaps %xmm6, %xmm1
1846 ; SSE41-NEXT:    movaps %xmm7, %xmm2
1847 ; SSE41-NEXT:    movaps %xmm4, %xmm3
1848 ; SSE41-NEXT:    retq
1850 ; AVX1-LABEL: test_masked_v16i32:
1851 ; AVX1:       # %bb.0:
1852 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1853 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
1854 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
1855 ; AVX1-NEXT:    vpcmpeqd %xmm6, %xmm6, %xmm6
1856 ; AVX1-NEXT:    vpxor %xmm6, %xmm4, %xmm4
1857 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm3, %xmm3
1858 ; AVX1-NEXT:    vpxor %xmm6, %xmm3, %xmm3
1859 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1860 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
1861 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
1862 ; AVX1-NEXT:    vpxor %xmm6, %xmm4, %xmm4
1863 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm2, %xmm2
1864 ; AVX1-NEXT:    vpxor %xmm6, %xmm2, %xmm2
1865 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
1866 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm4
1867 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm5
1868 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm4, %ymm4
1869 ; AVX1-NEXT:    vblendvps %ymm3, %ymm4, %ymm1, %ymm1
1870 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1871 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm4
1872 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1873 ; AVX1-NEXT:    vblendvps %ymm2, %ymm3, %ymm0, %ymm0
1874 ; AVX1-NEXT:    retq
1876 ; AVX2-LABEL: test_masked_v16i32:
1877 ; AVX2:       # %bb.0:
1878 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
1879 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm3
1880 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
1881 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm4
1882 ; AVX2-NEXT:    vblendvps %ymm3, %ymm1, %ymm4, %ymm1
1883 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1884 ; AVX2-NEXT:    vblendvps %ymm2, %ymm0, %ymm3, %ymm0
1885 ; AVX2-NEXT:    retq
1887 ; AVX512-LABEL: test_masked_v16i32:
1888 ; AVX512:       # %bb.0:
1889 ; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k1
1890 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
1891 ; AVX512-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}
1892 ; AVX512-NEXT:    retq
1893   %mask = icmp ne <16 x i32> %mask1, zeroinitializer
1894   %vaddr = bitcast i8* %addr to <16 x i32>*
1895   %r = load <16 x i32>, <16 x i32>* %vaddr, align 64, !nontemporal !1
1896   %res = select <16 x i1> %mask, <16 x i32> %r, <16 x i32> %old
1897   ret <16 x i32>%res
1900 ; Reduced from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10895
1901 define i32 @PR39256(float* %ptr) {
1902 ; SSE-LABEL: PR39256:
1903 ; SSE:       # %bb.0: # %entry
1904 ; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1905 ; SSE-NEXT:    ucomiss {{.*}}(%rip), %xmm0
1906 ; SSE-NEXT:    setb (%rax)
1907 ; SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1908 ; SSE-NEXT:    retq
1910 ; AVX-LABEL: PR39256:
1911 ; AVX:       # %bb.0: # %entry
1912 ; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1913 ; AVX-NEXT:    vucomiss {{.*}}(%rip), %xmm0
1914 ; AVX-NEXT:    setb (%rax)
1915 ; AVX-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1916 ; AVX-NEXT:    retq
1918 ; AVX512-LABEL: PR39256:
1919 ; AVX512:       # %bb.0: # %entry
1920 ; AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1921 ; AVX512-NEXT:    vucomiss {{.*}}(%rip), %xmm0
1922 ; AVX512-NEXT:    setb (%rax)
1923 ; AVX512-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1924 ; AVX512-NEXT:    retq
1925 entry:
1926   %l = load float, float* %ptr, !nontemporal !1
1927   %C = fcmp ult float %l, 0x36A0000000000000
1928   store i1 %C, i1* undef
1929   ret i32 -2147483648
1932 !1 = !{i32 1}