[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / X86 / nontemporal-loads.ll
blob4a0ba50fb4185f3029737a0481c62904c7370294
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(ptr %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>, ptr %src, align 16, !nontemporal !1
31   ret <4 x float> %1
34 define <4 x i32> @test_v4i32(ptr %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>, ptr %src, align 16, !nontemporal !1
55   ret <4 x i32> %1
58 define <2 x double> @test_v2f64(ptr %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>, ptr %src, align 16, !nontemporal !1
79   ret <2 x double> %1
82 define <2 x i64> @test_v2i64(ptr %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>, ptr %src, align 16, !nontemporal !1
103   ret <2 x i64> %1
106 define <8 x i16> @test_v8i16(ptr %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>, ptr %src, align 16, !nontemporal !1
127   ret <8 x i16> %1
130 define <16 x i8> @test_v16i8(ptr %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>, ptr %src, align 16, !nontemporal !1
151   ret <16 x i8> %1
154 ; And now YMM versions.
156 define <8 x float> @test_v8f32(ptr %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>, ptr %src, align 32, !nontemporal !1
186   ret <8 x float> %1
189 define <8 x i32> @test_v8i32(ptr %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>, ptr %src, align 32, !nontemporal !1
219   ret <8 x i32> %1
222 define <4 x double> @test_v4f64(ptr %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>, ptr %src, align 32, !nontemporal !1
252   ret <4 x double> %1
255 define <4 x i64> @test_v4i64(ptr %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>, ptr %src, align 32, !nontemporal !1
285   ret <4 x i64> %1
288 define <16 x i16> @test_v16i16(ptr %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>, ptr %src, align 32, !nontemporal !1
318   ret <16 x i16> %1
321 define <32 x i8> @test_v32i8(ptr %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>, ptr %src, align 32, !nontemporal !1
351   ret <32 x i8> %1
354 ; And now ZMM versions.
356 define <16 x float> @test_v16f32(ptr %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>, ptr %src, align 64, !nontemporal !1
394   ret <16 x float> %1
397 define <16 x i32> @test_v16i32(ptr %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>, ptr %src, align 64, !nontemporal !1
435   ret <16 x i32> %1
438 define <8 x double> @test_v8f64(ptr %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>, ptr %src, align 64, !nontemporal !1
476   ret <8 x double> %1
479 define <8 x i64> @test_v8i64(ptr %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>, ptr %src, align 64, !nontemporal !1
517   ret <8 x i64> %1
520 define <32 x i16> @test_v32i16(ptr %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 ; AVX512-LABEL: test_v32i16:
554 ; AVX512:       # %bb.0:
555 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
556 ; AVX512-NEXT:    retq
557   %1 = load <32 x i16>, ptr %src, align 64, !nontemporal !1
558   ret <32 x i16> %1
561 define <64 x i8> @test_v64i8(ptr %src) {
562 ; SSE2-LABEL: test_v64i8:
563 ; SSE2:       # %bb.0:
564 ; SSE2-NEXT:    movaps (%rdi), %xmm0
565 ; SSE2-NEXT:    movaps 16(%rdi), %xmm1
566 ; SSE2-NEXT:    movaps 32(%rdi), %xmm2
567 ; SSE2-NEXT:    movaps 48(%rdi), %xmm3
568 ; SSE2-NEXT:    retq
570 ; SSE41-LABEL: test_v64i8:
571 ; SSE41:       # %bb.0:
572 ; SSE41-NEXT:    movntdqa (%rdi), %xmm0
573 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
574 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
575 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
576 ; SSE41-NEXT:    retq
578 ; AVX1-LABEL: test_v64i8:
579 ; AVX1:       # %bb.0:
580 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
581 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
582 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
583 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
584 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
585 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
586 ; AVX1-NEXT:    retq
588 ; AVX2-LABEL: test_v64i8:
589 ; AVX2:       # %bb.0:
590 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
591 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
592 ; AVX2-NEXT:    retq
594 ; AVX512-LABEL: test_v64i8:
595 ; AVX512:       # %bb.0:
596 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
597 ; AVX512-NEXT:    retq
598   %1 = load <64 x i8>, ptr %src, align 64, !nontemporal !1
599   ret <64 x i8> %1
603 ; Check cases where the load would be folded.
605 define <4 x float> @test_arg_v4f32(<4 x float> %arg, ptr %src) {
606 ; SSE2-LABEL: test_arg_v4f32:
607 ; SSE2:       # %bb.0:
608 ; SSE2-NEXT:    addps (%rdi), %xmm0
609 ; SSE2-NEXT:    retq
611 ; SSE41-LABEL: test_arg_v4f32:
612 ; SSE41:       # %bb.0:
613 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
614 ; SSE41-NEXT:    addps %xmm1, %xmm0
615 ; SSE41-NEXT:    retq
617 ; AVX-LABEL: test_arg_v4f32:
618 ; AVX:       # %bb.0:
619 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
620 ; AVX-NEXT:    vaddps %xmm1, %xmm0, %xmm0
621 ; AVX-NEXT:    retq
623 ; AVX512-LABEL: test_arg_v4f32:
624 ; AVX512:       # %bb.0:
625 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
626 ; AVX512-NEXT:    vaddps %xmm1, %xmm0, %xmm0
627 ; AVX512-NEXT:    retq
628   %1 = load <4 x float>, ptr %src, align 16, !nontemporal !1
629   %2 = fadd <4 x float> %arg, %1
630   ret <4 x float> %2
633 define <4 x i32> @test_arg_v4i32(<4 x i32> %arg, ptr %src) {
634 ; SSE2-LABEL: test_arg_v4i32:
635 ; SSE2:       # %bb.0:
636 ; SSE2-NEXT:    paddd (%rdi), %xmm0
637 ; SSE2-NEXT:    retq
639 ; SSE41-LABEL: test_arg_v4i32:
640 ; SSE41:       # %bb.0:
641 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
642 ; SSE41-NEXT:    paddd %xmm1, %xmm0
643 ; SSE41-NEXT:    retq
645 ; AVX-LABEL: test_arg_v4i32:
646 ; AVX:       # %bb.0:
647 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
648 ; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
649 ; AVX-NEXT:    retq
651 ; AVX512-LABEL: test_arg_v4i32:
652 ; AVX512:       # %bb.0:
653 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
654 ; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
655 ; AVX512-NEXT:    retq
656   %1 = load <4 x i32>, ptr %src, align 16, !nontemporal !1
657   %2 = add <4 x i32> %arg, %1
658   ret <4 x i32> %2
661 define <2 x double> @test_arg_v2f64(<2 x double> %arg, ptr %src) {
662 ; SSE2-LABEL: test_arg_v2f64:
663 ; SSE2:       # %bb.0:
664 ; SSE2-NEXT:    addpd (%rdi), %xmm0
665 ; SSE2-NEXT:    retq
667 ; SSE41-LABEL: test_arg_v2f64:
668 ; SSE41:       # %bb.0:
669 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
670 ; SSE41-NEXT:    addpd %xmm1, %xmm0
671 ; SSE41-NEXT:    retq
673 ; AVX-LABEL: test_arg_v2f64:
674 ; AVX:       # %bb.0:
675 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
676 ; AVX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0
677 ; AVX-NEXT:    retq
679 ; AVX512-LABEL: test_arg_v2f64:
680 ; AVX512:       # %bb.0:
681 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
682 ; AVX512-NEXT:    vaddpd %xmm1, %xmm0, %xmm0
683 ; AVX512-NEXT:    retq
684   %1 = load <2 x double>, ptr %src, align 16, !nontemporal !1
685   %2 = fadd <2 x double> %arg, %1
686   ret <2 x double> %2
689 define <2 x i64> @test_arg_v2i64(<2 x i64> %arg, ptr %src) {
690 ; SSE2-LABEL: test_arg_v2i64:
691 ; SSE2:       # %bb.0:
692 ; SSE2-NEXT:    paddq (%rdi), %xmm0
693 ; SSE2-NEXT:    retq
695 ; SSE41-LABEL: test_arg_v2i64:
696 ; SSE41:       # %bb.0:
697 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
698 ; SSE41-NEXT:    paddq %xmm1, %xmm0
699 ; SSE41-NEXT:    retq
701 ; AVX-LABEL: test_arg_v2i64:
702 ; AVX:       # %bb.0:
703 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
704 ; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
705 ; AVX-NEXT:    retq
707 ; AVX512-LABEL: test_arg_v2i64:
708 ; AVX512:       # %bb.0:
709 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
710 ; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
711 ; AVX512-NEXT:    retq
712   %1 = load <2 x i64>, ptr %src, align 16, !nontemporal !1
713   %2 = add <2 x i64> %arg, %1
714   ret <2 x i64> %2
717 define <8 x i16> @test_arg_v8i16(<8 x i16> %arg, ptr %src) {
718 ; SSE2-LABEL: test_arg_v8i16:
719 ; SSE2:       # %bb.0:
720 ; SSE2-NEXT:    paddw (%rdi), %xmm0
721 ; SSE2-NEXT:    retq
723 ; SSE41-LABEL: test_arg_v8i16:
724 ; SSE41:       # %bb.0:
725 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
726 ; SSE41-NEXT:    paddw %xmm1, %xmm0
727 ; SSE41-NEXT:    retq
729 ; AVX-LABEL: test_arg_v8i16:
730 ; AVX:       # %bb.0:
731 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
732 ; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0
733 ; AVX-NEXT:    retq
735 ; AVX512-LABEL: test_arg_v8i16:
736 ; AVX512:       # %bb.0:
737 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
738 ; AVX512-NEXT:    vpaddw %xmm1, %xmm0, %xmm0
739 ; AVX512-NEXT:    retq
740   %1 = load <8 x i16>, ptr %src, align 16, !nontemporal !1
741   %2 = add <8 x i16> %arg, %1
742   ret <8 x i16> %2
745 define <16 x i8> @test_arg_v16i8(<16 x i8> %arg, ptr %src) {
746 ; SSE2-LABEL: test_arg_v16i8:
747 ; SSE2:       # %bb.0:
748 ; SSE2-NEXT:    paddb (%rdi), %xmm0
749 ; SSE2-NEXT:    retq
751 ; SSE41-LABEL: test_arg_v16i8:
752 ; SSE41:       # %bb.0:
753 ; SSE41-NEXT:    movntdqa (%rdi), %xmm1
754 ; SSE41-NEXT:    paddb %xmm1, %xmm0
755 ; SSE41-NEXT:    retq
757 ; AVX-LABEL: test_arg_v16i8:
758 ; AVX:       # %bb.0:
759 ; AVX-NEXT:    vmovntdqa (%rdi), %xmm1
760 ; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
761 ; AVX-NEXT:    retq
763 ; AVX512-LABEL: test_arg_v16i8:
764 ; AVX512:       # %bb.0:
765 ; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1
766 ; AVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
767 ; AVX512-NEXT:    retq
768   %1 = load <16 x i8>, ptr %src, align 16, !nontemporal !1
769   %2 = add <16 x i8> %arg, %1
770   ret <16 x i8> %2
773 ; And now YMM versions.
775 define <8 x float> @test_arg_v8f32(<8 x float> %arg, ptr %src) {
776 ; SSE2-LABEL: test_arg_v8f32:
777 ; SSE2:       # %bb.0:
778 ; SSE2-NEXT:    addps (%rdi), %xmm0
779 ; SSE2-NEXT:    addps 16(%rdi), %xmm1
780 ; SSE2-NEXT:    retq
782 ; SSE41-LABEL: test_arg_v8f32:
783 ; SSE41:       # %bb.0:
784 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
785 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
786 ; SSE41-NEXT:    addps %xmm3, %xmm0
787 ; SSE41-NEXT:    addps %xmm2, %xmm1
788 ; SSE41-NEXT:    retq
790 ; AVX1-LABEL: test_arg_v8f32:
791 ; AVX1:       # %bb.0:
792 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1
793 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
794 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
795 ; AVX1-NEXT:    vaddps %ymm1, %ymm0, %ymm0
796 ; AVX1-NEXT:    retq
798 ; AVX2-LABEL: test_arg_v8f32:
799 ; AVX2:       # %bb.0:
800 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
801 ; AVX2-NEXT:    vaddps %ymm1, %ymm0, %ymm0
802 ; AVX2-NEXT:    retq
804 ; AVX512-LABEL: test_arg_v8f32:
805 ; AVX512:       # %bb.0:
806 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
807 ; AVX512-NEXT:    vaddps %ymm1, %ymm0, %ymm0
808 ; AVX512-NEXT:    retq
809   %1 = load <8 x float>, ptr %src, align 32, !nontemporal !1
810   %2 = fadd <8 x float> %arg, %1
811   ret <8 x float> %2
814 define <8 x i32> @test_arg_v8i32(<8 x i32> %arg, ptr %src) {
815 ; SSE2-LABEL: test_arg_v8i32:
816 ; SSE2:       # %bb.0:
817 ; SSE2-NEXT:    paddd (%rdi), %xmm0
818 ; SSE2-NEXT:    paddd 16(%rdi), %xmm1
819 ; SSE2-NEXT:    retq
821 ; SSE41-LABEL: test_arg_v8i32:
822 ; SSE41:       # %bb.0:
823 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
824 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
825 ; SSE41-NEXT:    paddd %xmm3, %xmm0
826 ; SSE41-NEXT:    paddd %xmm2, %xmm1
827 ; SSE41-NEXT:    retq
829 ; AVX1-LABEL: test_arg_v8i32:
830 ; AVX1:       # %bb.0:
831 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
832 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
833 ; AVX1-NEXT:    vpaddd %xmm1, %xmm2, %xmm1
834 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2
835 ; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm0
836 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
837 ; AVX1-NEXT:    retq
839 ; AVX2-LABEL: test_arg_v8i32:
840 ; AVX2:       # %bb.0:
841 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
842 ; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
843 ; AVX2-NEXT:    retq
845 ; AVX512-LABEL: test_arg_v8i32:
846 ; AVX512:       # %bb.0:
847 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
848 ; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
849 ; AVX512-NEXT:    retq
850   %1 = load <8 x i32>, ptr %src, align 32, !nontemporal !1
851   %2 = add <8 x i32> %arg, %1
852   ret <8 x i32> %2
855 define <4 x double> @test_arg_v4f64(<4 x double> %arg, ptr %src) {
856 ; SSE2-LABEL: test_arg_v4f64:
857 ; SSE2:       # %bb.0:
858 ; SSE2-NEXT:    addpd (%rdi), %xmm0
859 ; SSE2-NEXT:    addpd 16(%rdi), %xmm1
860 ; SSE2-NEXT:    retq
862 ; SSE41-LABEL: test_arg_v4f64:
863 ; SSE41:       # %bb.0:
864 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
865 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
866 ; SSE41-NEXT:    addpd %xmm3, %xmm0
867 ; SSE41-NEXT:    addpd %xmm2, %xmm1
868 ; SSE41-NEXT:    retq
870 ; AVX1-LABEL: test_arg_v4f64:
871 ; AVX1:       # %bb.0:
872 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1
873 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
874 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
875 ; AVX1-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
876 ; AVX1-NEXT:    retq
878 ; AVX2-LABEL: test_arg_v4f64:
879 ; AVX2:       # %bb.0:
880 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
881 ; AVX2-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
882 ; AVX2-NEXT:    retq
884 ; AVX512-LABEL: test_arg_v4f64:
885 ; AVX512:       # %bb.0:
886 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
887 ; AVX512-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
888 ; AVX512-NEXT:    retq
889   %1 = load <4 x double>, ptr %src, align 32, !nontemporal !1
890   %2 = fadd <4 x double> %arg, %1
891   ret <4 x double> %2
894 define <4 x i64> @test_arg_v4i64(<4 x i64> %arg, ptr %src) {
895 ; SSE2-LABEL: test_arg_v4i64:
896 ; SSE2:       # %bb.0:
897 ; SSE2-NEXT:    paddq (%rdi), %xmm0
898 ; SSE2-NEXT:    paddq 16(%rdi), %xmm1
899 ; SSE2-NEXT:    retq
901 ; SSE41-LABEL: test_arg_v4i64:
902 ; SSE41:       # %bb.0:
903 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
904 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
905 ; SSE41-NEXT:    paddq %xmm3, %xmm0
906 ; SSE41-NEXT:    paddq %xmm2, %xmm1
907 ; SSE41-NEXT:    retq
909 ; AVX1-LABEL: test_arg_v4i64:
910 ; AVX1:       # %bb.0:
911 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
912 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
913 ; AVX1-NEXT:    vpaddq %xmm1, %xmm2, %xmm1
914 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2
915 ; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm0
916 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
917 ; AVX1-NEXT:    retq
919 ; AVX2-LABEL: test_arg_v4i64:
920 ; AVX2:       # %bb.0:
921 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
922 ; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
923 ; AVX2-NEXT:    retq
925 ; AVX512-LABEL: test_arg_v4i64:
926 ; AVX512:       # %bb.0:
927 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
928 ; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
929 ; AVX512-NEXT:    retq
930   %1 = load <4 x i64>, ptr %src, align 32, !nontemporal !1
931   %2 = add <4 x i64> %arg, %1
932   ret <4 x i64> %2
935 define <16 x i16> @test_arg_v16i16(<16 x i16> %arg, ptr %src) {
936 ; SSE2-LABEL: test_arg_v16i16:
937 ; SSE2:       # %bb.0:
938 ; SSE2-NEXT:    paddw (%rdi), %xmm0
939 ; SSE2-NEXT:    paddw 16(%rdi), %xmm1
940 ; SSE2-NEXT:    retq
942 ; SSE41-LABEL: test_arg_v16i16:
943 ; SSE41:       # %bb.0:
944 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
945 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
946 ; SSE41-NEXT:    paddw %xmm3, %xmm0
947 ; SSE41-NEXT:    paddw %xmm2, %xmm1
948 ; SSE41-NEXT:    retq
950 ; AVX1-LABEL: test_arg_v16i16:
951 ; AVX1:       # %bb.0:
952 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
953 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
954 ; AVX1-NEXT:    vpaddw %xmm1, %xmm2, %xmm1
955 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2
956 ; AVX1-NEXT:    vpaddw %xmm2, %xmm0, %xmm0
957 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
958 ; AVX1-NEXT:    retq
960 ; AVX2-LABEL: test_arg_v16i16:
961 ; AVX2:       # %bb.0:
962 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
963 ; AVX2-NEXT:    vpaddw %ymm1, %ymm0, %ymm0
964 ; AVX2-NEXT:    retq
966 ; AVX512-LABEL: test_arg_v16i16:
967 ; AVX512:       # %bb.0:
968 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
969 ; AVX512-NEXT:    vpaddw %ymm1, %ymm0, %ymm0
970 ; AVX512-NEXT:    retq
971   %1 = load <16 x i16>, ptr %src, align 32, !nontemporal !1
972   %2 = add <16 x i16> %arg, %1
973   ret <16 x i16> %2
976 define <32 x i8> @test_arg_v32i8(<32 x i8> %arg, ptr %src) {
977 ; SSE2-LABEL: test_arg_v32i8:
978 ; SSE2:       # %bb.0:
979 ; SSE2-NEXT:    paddb (%rdi), %xmm0
980 ; SSE2-NEXT:    paddb 16(%rdi), %xmm1
981 ; SSE2-NEXT:    retq
983 ; SSE41-LABEL: test_arg_v32i8:
984 ; SSE41:       # %bb.0:
985 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2
986 ; SSE41-NEXT:    movntdqa (%rdi), %xmm3
987 ; SSE41-NEXT:    paddb %xmm3, %xmm0
988 ; SSE41-NEXT:    paddb %xmm2, %xmm1
989 ; SSE41-NEXT:    retq
991 ; AVX1-LABEL: test_arg_v32i8:
992 ; AVX1:       # %bb.0:
993 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
994 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
995 ; AVX1-NEXT:    vpaddb %xmm1, %xmm2, %xmm1
996 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2
997 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
998 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
999 ; AVX1-NEXT:    retq
1001 ; AVX2-LABEL: test_arg_v32i8:
1002 ; AVX2:       # %bb.0:
1003 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1
1004 ; AVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm0
1005 ; AVX2-NEXT:    retq
1007 ; AVX512-LABEL: test_arg_v32i8:
1008 ; AVX512:       # %bb.0:
1009 ; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1
1010 ; AVX512-NEXT:    vpaddb %ymm1, %ymm0, %ymm0
1011 ; AVX512-NEXT:    retq
1012   %1 = load <32 x i8>, ptr %src, align 32, !nontemporal !1
1013   %2 = add <32 x i8> %arg, %1
1014   ret <32 x i8> %2
1017 ; And now ZMM versions.
1019 define <16 x float> @test_arg_v16f32(<16 x float> %arg, ptr %src) {
1020 ; SSE2-LABEL: test_arg_v16f32:
1021 ; SSE2:       # %bb.0:
1022 ; SSE2-NEXT:    addps (%rdi), %xmm0
1023 ; SSE2-NEXT:    addps 16(%rdi), %xmm1
1024 ; SSE2-NEXT:    addps 32(%rdi), %xmm2
1025 ; SSE2-NEXT:    addps 48(%rdi), %xmm3
1026 ; SSE2-NEXT:    retq
1028 ; SSE41-LABEL: test_arg_v16f32:
1029 ; SSE41:       # %bb.0:
1030 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1031 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
1032 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
1033 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
1034 ; SSE41-NEXT:    addps %xmm7, %xmm0
1035 ; SSE41-NEXT:    addps %xmm6, %xmm1
1036 ; SSE41-NEXT:    addps %xmm5, %xmm2
1037 ; SSE41-NEXT:    addps %xmm4, %xmm3
1038 ; SSE41-NEXT:    retq
1040 ; AVX1-LABEL: test_arg_v16f32:
1041 ; AVX1:       # %bb.0:
1042 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
1043 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm3
1044 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2
1045 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1046 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm4
1047 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1048 ; AVX1-NEXT:    vaddps %ymm3, %ymm0, %ymm0
1049 ; AVX1-NEXT:    vaddps %ymm2, %ymm1, %ymm1
1050 ; AVX1-NEXT:    retq
1052 ; AVX2-LABEL: test_arg_v16f32:
1053 ; AVX2:       # %bb.0:
1054 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
1055 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1056 ; AVX2-NEXT:    vaddps %ymm3, %ymm0, %ymm0
1057 ; AVX2-NEXT:    vaddps %ymm2, %ymm1, %ymm1
1058 ; AVX2-NEXT:    retq
1060 ; AVX512-LABEL: test_arg_v16f32:
1061 ; AVX512:       # %bb.0:
1062 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
1063 ; AVX512-NEXT:    vaddps %zmm1, %zmm0, %zmm0
1064 ; AVX512-NEXT:    retq
1065   %1 = load <16 x float>, ptr %src, align 64, !nontemporal !1
1066   %2 = fadd <16 x float> %arg, %1
1067   ret <16 x float> %2
1070 define <16 x i32> @test_arg_v16i32(<16 x i32> %arg, ptr %src) {
1071 ; SSE2-LABEL: test_arg_v16i32:
1072 ; SSE2:       # %bb.0:
1073 ; SSE2-NEXT:    paddd (%rdi), %xmm0
1074 ; SSE2-NEXT:    paddd 16(%rdi), %xmm1
1075 ; SSE2-NEXT:    paddd 32(%rdi), %xmm2
1076 ; SSE2-NEXT:    paddd 48(%rdi), %xmm3
1077 ; SSE2-NEXT:    retq
1079 ; SSE41-LABEL: test_arg_v16i32:
1080 ; SSE41:       # %bb.0:
1081 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1082 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
1083 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
1084 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
1085 ; SSE41-NEXT:    paddd %xmm7, %xmm0
1086 ; SSE41-NEXT:    paddd %xmm6, %xmm1
1087 ; SSE41-NEXT:    paddd %xmm5, %xmm2
1088 ; SSE41-NEXT:    paddd %xmm4, %xmm3
1089 ; SSE41-NEXT:    retq
1091 ; AVX1-LABEL: test_arg_v16i32:
1092 ; AVX1:       # %bb.0:
1093 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
1094 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1095 ; AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm2
1096 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1097 ; AVX1-NEXT:    vpaddd %xmm3, %xmm0, %xmm0
1098 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1099 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
1100 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1101 ; AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm2
1102 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm3
1103 ; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm1
1104 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1105 ; AVX1-NEXT:    retq
1107 ; AVX2-LABEL: test_arg_v16i32:
1108 ; AVX2:       # %bb.0:
1109 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
1110 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1111 ; AVX2-NEXT:    vpaddd %ymm3, %ymm0, %ymm0
1112 ; AVX2-NEXT:    vpaddd %ymm2, %ymm1, %ymm1
1113 ; AVX2-NEXT:    retq
1115 ; AVX512-LABEL: test_arg_v16i32:
1116 ; AVX512:       # %bb.0:
1117 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
1118 ; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
1119 ; AVX512-NEXT:    retq
1120   %1 = load <16 x i32>, ptr %src, align 64, !nontemporal !1
1121   %2 = add <16 x i32> %arg, %1
1122   ret <16 x i32> %2
1125 define <8 x double> @test_arg_v8f64(<8 x double> %arg, ptr %src) {
1126 ; SSE2-LABEL: test_arg_v8f64:
1127 ; SSE2:       # %bb.0:
1128 ; SSE2-NEXT:    addpd (%rdi), %xmm0
1129 ; SSE2-NEXT:    addpd 16(%rdi), %xmm1
1130 ; SSE2-NEXT:    addpd 32(%rdi), %xmm2
1131 ; SSE2-NEXT:    addpd 48(%rdi), %xmm3
1132 ; SSE2-NEXT:    retq
1134 ; SSE41-LABEL: test_arg_v8f64:
1135 ; SSE41:       # %bb.0:
1136 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1137 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
1138 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
1139 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
1140 ; SSE41-NEXT:    addpd %xmm7, %xmm0
1141 ; SSE41-NEXT:    addpd %xmm6, %xmm1
1142 ; SSE41-NEXT:    addpd %xmm5, %xmm2
1143 ; SSE41-NEXT:    addpd %xmm4, %xmm3
1144 ; SSE41-NEXT:    retq
1146 ; AVX1-LABEL: test_arg_v8f64:
1147 ; AVX1:       # %bb.0:
1148 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm2
1149 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm3
1150 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2
1151 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1152 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm4
1153 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1154 ; AVX1-NEXT:    vaddpd %ymm3, %ymm0, %ymm0
1155 ; AVX1-NEXT:    vaddpd %ymm2, %ymm1, %ymm1
1156 ; AVX1-NEXT:    retq
1158 ; AVX2-LABEL: test_arg_v8f64:
1159 ; AVX2:       # %bb.0:
1160 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
1161 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1162 ; AVX2-NEXT:    vaddpd %ymm3, %ymm0, %ymm0
1163 ; AVX2-NEXT:    vaddpd %ymm2, %ymm1, %ymm1
1164 ; AVX2-NEXT:    retq
1166 ; AVX512-LABEL: test_arg_v8f64:
1167 ; AVX512:       # %bb.0:
1168 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
1169 ; AVX512-NEXT:    vaddpd %zmm1, %zmm0, %zmm0
1170 ; AVX512-NEXT:    retq
1171   %1 = load <8 x double>, ptr %src, align 64, !nontemporal !1
1172   %2 = fadd <8 x double> %arg, %1
1173   ret <8 x double> %2
1176 define <8 x i64> @test_arg_v8i64(<8 x i64> %arg, ptr %src) {
1177 ; SSE2-LABEL: test_arg_v8i64:
1178 ; SSE2:       # %bb.0:
1179 ; SSE2-NEXT:    paddq (%rdi), %xmm0
1180 ; SSE2-NEXT:    paddq 16(%rdi), %xmm1
1181 ; SSE2-NEXT:    paddq 32(%rdi), %xmm2
1182 ; SSE2-NEXT:    paddq 48(%rdi), %xmm3
1183 ; SSE2-NEXT:    retq
1185 ; SSE41-LABEL: test_arg_v8i64:
1186 ; SSE41:       # %bb.0:
1187 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1188 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
1189 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
1190 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
1191 ; SSE41-NEXT:    paddq %xmm7, %xmm0
1192 ; SSE41-NEXT:    paddq %xmm6, %xmm1
1193 ; SSE41-NEXT:    paddq %xmm5, %xmm2
1194 ; SSE41-NEXT:    paddq %xmm4, %xmm3
1195 ; SSE41-NEXT:    retq
1197 ; AVX1-LABEL: test_arg_v8i64:
1198 ; AVX1:       # %bb.0:
1199 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
1200 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1201 ; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm2
1202 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1203 ; AVX1-NEXT:    vpaddq %xmm3, %xmm0, %xmm0
1204 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1205 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
1206 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1207 ; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm2
1208 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm3
1209 ; AVX1-NEXT:    vpaddq %xmm3, %xmm1, %xmm1
1210 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1211 ; AVX1-NEXT:    retq
1213 ; AVX2-LABEL: test_arg_v8i64:
1214 ; AVX2:       # %bb.0:
1215 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
1216 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1217 ; AVX2-NEXT:    vpaddq %ymm3, %ymm0, %ymm0
1218 ; AVX2-NEXT:    vpaddq %ymm2, %ymm1, %ymm1
1219 ; AVX2-NEXT:    retq
1221 ; AVX512-LABEL: test_arg_v8i64:
1222 ; AVX512:       # %bb.0:
1223 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
1224 ; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm0
1225 ; AVX512-NEXT:    retq
1226   %1 = load <8 x i64>, ptr %src, align 64, !nontemporal !1
1227   %2 = add <8 x i64> %arg, %1
1228   ret <8 x i64> %2
1231 define <32 x i16> @test_arg_v32i16(<32 x i16> %arg, ptr %src) {
1232 ; SSE2-LABEL: test_arg_v32i16:
1233 ; SSE2:       # %bb.0:
1234 ; SSE2-NEXT:    paddw (%rdi), %xmm0
1235 ; SSE2-NEXT:    paddw 16(%rdi), %xmm1
1236 ; SSE2-NEXT:    paddw 32(%rdi), %xmm2
1237 ; SSE2-NEXT:    paddw 48(%rdi), %xmm3
1238 ; SSE2-NEXT:    retq
1240 ; SSE41-LABEL: test_arg_v32i16:
1241 ; SSE41:       # %bb.0:
1242 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1243 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
1244 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
1245 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
1246 ; SSE41-NEXT:    paddw %xmm7, %xmm0
1247 ; SSE41-NEXT:    paddw %xmm6, %xmm1
1248 ; SSE41-NEXT:    paddw %xmm5, %xmm2
1249 ; SSE41-NEXT:    paddw %xmm4, %xmm3
1250 ; SSE41-NEXT:    retq
1252 ; AVX1-LABEL: test_arg_v32i16:
1253 ; AVX1:       # %bb.0:
1254 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
1255 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1256 ; AVX1-NEXT:    vpaddw %xmm2, %xmm3, %xmm2
1257 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1258 ; AVX1-NEXT:    vpaddw %xmm3, %xmm0, %xmm0
1259 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1260 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
1261 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1262 ; AVX1-NEXT:    vpaddw %xmm2, %xmm3, %xmm2
1263 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm3
1264 ; AVX1-NEXT:    vpaddw %xmm3, %xmm1, %xmm1
1265 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1266 ; AVX1-NEXT:    retq
1268 ; AVX2-LABEL: test_arg_v32i16:
1269 ; AVX2:       # %bb.0:
1270 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
1271 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1272 ; AVX2-NEXT:    vpaddw %ymm3, %ymm0, %ymm0
1273 ; AVX2-NEXT:    vpaddw %ymm2, %ymm1, %ymm1
1274 ; AVX2-NEXT:    retq
1276 ; AVX512F-LABEL: test_arg_v32i16:
1277 ; AVX512F:       # %bb.0:
1278 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm1
1279 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm2
1280 ; AVX512F-NEXT:    vpaddw %ymm1, %ymm2, %ymm1
1281 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm2
1282 ; AVX512F-NEXT:    vpaddw %ymm2, %ymm0, %ymm0
1283 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1284 ; AVX512F-NEXT:    retq
1286 ; AVX512BW-LABEL: test_arg_v32i16:
1287 ; AVX512BW:       # %bb.0:
1288 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm1
1289 ; AVX512BW-NEXT:    vpaddw %zmm1, %zmm0, %zmm0
1290 ; AVX512BW-NEXT:    retq
1292 ; AVX512VL-LABEL: test_arg_v32i16:
1293 ; AVX512VL:       # %bb.0:
1294 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm1
1295 ; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm2
1296 ; AVX512VL-NEXT:    vpaddw %ymm1, %ymm2, %ymm1
1297 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm2
1298 ; AVX512VL-NEXT:    vpaddw %ymm2, %ymm0, %ymm0
1299 ; AVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1300 ; AVX512VL-NEXT:    retq
1301   %1 = load <32 x i16>, ptr %src, align 64, !nontemporal !1
1302   %2 = add <32 x i16> %arg, %1
1303   ret <32 x i16> %2
1306 define <64 x i8> @test_arg_v64i8(<64 x i8> %arg, ptr %src) {
1307 ; SSE2-LABEL: test_arg_v64i8:
1308 ; SSE2:       # %bb.0:
1309 ; SSE2-NEXT:    paddb (%rdi), %xmm0
1310 ; SSE2-NEXT:    paddb 16(%rdi), %xmm1
1311 ; SSE2-NEXT:    paddb 32(%rdi), %xmm2
1312 ; SSE2-NEXT:    paddb 48(%rdi), %xmm3
1313 ; SSE2-NEXT:    retq
1315 ; SSE41-LABEL: test_arg_v64i8:
1316 ; SSE41:       # %bb.0:
1317 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1318 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm5
1319 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
1320 ; SSE41-NEXT:    movntdqa (%rdi), %xmm7
1321 ; SSE41-NEXT:    paddb %xmm7, %xmm0
1322 ; SSE41-NEXT:    paddb %xmm6, %xmm1
1323 ; SSE41-NEXT:    paddb %xmm5, %xmm2
1324 ; SSE41-NEXT:    paddb %xmm4, %xmm3
1325 ; SSE41-NEXT:    retq
1327 ; AVX1-LABEL: test_arg_v64i8:
1328 ; AVX1:       # %bb.0:
1329 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2
1330 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1331 ; AVX1-NEXT:    vpaddb %xmm2, %xmm3, %xmm2
1332 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1333 ; AVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm0
1334 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1335 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
1336 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1337 ; AVX1-NEXT:    vpaddb %xmm2, %xmm3, %xmm2
1338 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm3
1339 ; AVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm1
1340 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1341 ; AVX1-NEXT:    retq
1343 ; AVX2-LABEL: test_arg_v64i8:
1344 ; AVX2:       # %bb.0:
1345 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm2
1346 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1347 ; AVX2-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
1348 ; AVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1
1349 ; AVX2-NEXT:    retq
1351 ; AVX512F-LABEL: test_arg_v64i8:
1352 ; AVX512F:       # %bb.0:
1353 ; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm1
1354 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm2
1355 ; AVX512F-NEXT:    vpaddb %ymm1, %ymm2, %ymm1
1356 ; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm2
1357 ; AVX512F-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1358 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1359 ; AVX512F-NEXT:    retq
1361 ; AVX512BW-LABEL: test_arg_v64i8:
1362 ; AVX512BW:       # %bb.0:
1363 ; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm1
1364 ; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0
1365 ; AVX512BW-NEXT:    retq
1367 ; AVX512VL-LABEL: test_arg_v64i8:
1368 ; AVX512VL:       # %bb.0:
1369 ; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm1
1370 ; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm2
1371 ; AVX512VL-NEXT:    vpaddb %ymm1, %ymm2, %ymm1
1372 ; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm2
1373 ; AVX512VL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
1374 ; AVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1375 ; AVX512VL-NEXT:    retq
1376   %1 = load <64 x i8>, ptr %src, align 64, !nontemporal !1
1377   %2 = add <64 x i8> %arg, %1
1378   ret <64 x i8> %2
1382 ; Unaligned non-temporal loads (not supported)
1384 define <4 x float> @test_unaligned_v4f32(ptr %src) {
1385 ; SSE-LABEL: test_unaligned_v4f32:
1386 ; SSE:       # %bb.0:
1387 ; SSE-NEXT:    movups (%rdi), %xmm0
1388 ; SSE-NEXT:    retq
1390 ; AVX-LABEL: test_unaligned_v4f32:
1391 ; AVX:       # %bb.0:
1392 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1393 ; AVX-NEXT:    retq
1395 ; AVX512-LABEL: test_unaligned_v4f32:
1396 ; AVX512:       # %bb.0:
1397 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
1398 ; AVX512-NEXT:    retq
1399   %1 = load <4 x float>, ptr %src, align 1, !nontemporal !1
1400   ret <4 x float> %1
1403 define <4 x i32> @test_unaligned_v4i32(ptr %src) {
1404 ; SSE-LABEL: test_unaligned_v4i32:
1405 ; SSE:       # %bb.0:
1406 ; SSE-NEXT:    movups (%rdi), %xmm0
1407 ; SSE-NEXT:    retq
1409 ; AVX-LABEL: test_unaligned_v4i32:
1410 ; AVX:       # %bb.0:
1411 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1412 ; AVX-NEXT:    retq
1414 ; AVX512-LABEL: test_unaligned_v4i32:
1415 ; AVX512:       # %bb.0:
1416 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
1417 ; AVX512-NEXT:    retq
1418   %1 = load <4 x i32>, ptr %src, align 1, !nontemporal !1
1419   ret <4 x i32> %1
1422 define <2 x double> @test_unaligned_v2f64(ptr %src) {
1423 ; SSE-LABEL: test_unaligned_v2f64:
1424 ; SSE:       # %bb.0:
1425 ; SSE-NEXT:    movups (%rdi), %xmm0
1426 ; SSE-NEXT:    retq
1428 ; AVX-LABEL: test_unaligned_v2f64:
1429 ; AVX:       # %bb.0:
1430 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1431 ; AVX-NEXT:    retq
1433 ; AVX512-LABEL: test_unaligned_v2f64:
1434 ; AVX512:       # %bb.0:
1435 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
1436 ; AVX512-NEXT:    retq
1437   %1 = load <2 x double>, ptr %src, align 1, !nontemporal !1
1438   ret <2 x double> %1
1441 define <2 x i64> @test_unaligned_v2i64(ptr %src) {
1442 ; SSE-LABEL: test_unaligned_v2i64:
1443 ; SSE:       # %bb.0:
1444 ; SSE-NEXT:    movups (%rdi), %xmm0
1445 ; SSE-NEXT:    retq
1447 ; AVX-LABEL: test_unaligned_v2i64:
1448 ; AVX:       # %bb.0:
1449 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1450 ; AVX-NEXT:    retq
1452 ; AVX512-LABEL: test_unaligned_v2i64:
1453 ; AVX512:       # %bb.0:
1454 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
1455 ; AVX512-NEXT:    retq
1456   %1 = load <2 x i64>, ptr %src, align 1, !nontemporal !1
1457   ret <2 x i64> %1
1460 define <8 x i16> @test_unaligned_v8i16(ptr %src) {
1461 ; SSE-LABEL: test_unaligned_v8i16:
1462 ; SSE:       # %bb.0:
1463 ; SSE-NEXT:    movups (%rdi), %xmm0
1464 ; SSE-NEXT:    retq
1466 ; AVX-LABEL: test_unaligned_v8i16:
1467 ; AVX:       # %bb.0:
1468 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1469 ; AVX-NEXT:    retq
1471 ; AVX512-LABEL: test_unaligned_v8i16:
1472 ; AVX512:       # %bb.0:
1473 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
1474 ; AVX512-NEXT:    retq
1475   %1 = load <8 x i16>, ptr %src, align 1, !nontemporal !1
1476   ret <8 x i16> %1
1479 define <16 x i8> @test_unaligned_v16i8(ptr %src) {
1480 ; SSE-LABEL: test_unaligned_v16i8:
1481 ; SSE:       # %bb.0:
1482 ; SSE-NEXT:    movups (%rdi), %xmm0
1483 ; SSE-NEXT:    retq
1485 ; AVX-LABEL: test_unaligned_v16i8:
1486 ; AVX:       # %bb.0:
1487 ; AVX-NEXT:    vmovups (%rdi), %xmm0
1488 ; AVX-NEXT:    retq
1490 ; AVX512-LABEL: test_unaligned_v16i8:
1491 ; AVX512:       # %bb.0:
1492 ; AVX512-NEXT:    vmovups (%rdi), %xmm0
1493 ; AVX512-NEXT:    retq
1494   %1 = load <16 x i8>, ptr %src, align 1, !nontemporal !1
1495   ret <16 x i8> %1
1498 ; And now YMM versions.
1500 define <8 x float> @test_unaligned_v8f32(ptr %src) {
1501 ; SSE-LABEL: test_unaligned_v8f32:
1502 ; SSE:       # %bb.0:
1503 ; SSE-NEXT:    movups (%rdi), %xmm0
1504 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1505 ; SSE-NEXT:    retq
1507 ; AVX-LABEL: test_unaligned_v8f32:
1508 ; AVX:       # %bb.0:
1509 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1510 ; AVX-NEXT:    retq
1512 ; AVX512-LABEL: test_unaligned_v8f32:
1513 ; AVX512:       # %bb.0:
1514 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
1515 ; AVX512-NEXT:    retq
1516   %1 = load <8 x float>, ptr %src, align 1, !nontemporal !1
1517   ret <8 x float> %1
1520 define <8 x i32> @test_unaligned_v8i32(ptr %src) {
1521 ; SSE-LABEL: test_unaligned_v8i32:
1522 ; SSE:       # %bb.0:
1523 ; SSE-NEXT:    movups (%rdi), %xmm0
1524 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1525 ; SSE-NEXT:    retq
1527 ; AVX-LABEL: test_unaligned_v8i32:
1528 ; AVX:       # %bb.0:
1529 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1530 ; AVX-NEXT:    retq
1532 ; AVX512-LABEL: test_unaligned_v8i32:
1533 ; AVX512:       # %bb.0:
1534 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
1535 ; AVX512-NEXT:    retq
1536   %1 = load <8 x i32>, ptr %src, align 1, !nontemporal !1
1537   ret <8 x i32> %1
1540 define <4 x double> @test_unaligned_v4f64(ptr %src) {
1541 ; SSE-LABEL: test_unaligned_v4f64:
1542 ; SSE:       # %bb.0:
1543 ; SSE-NEXT:    movups (%rdi), %xmm0
1544 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1545 ; SSE-NEXT:    retq
1547 ; AVX-LABEL: test_unaligned_v4f64:
1548 ; AVX:       # %bb.0:
1549 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1550 ; AVX-NEXT:    retq
1552 ; AVX512-LABEL: test_unaligned_v4f64:
1553 ; AVX512:       # %bb.0:
1554 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
1555 ; AVX512-NEXT:    retq
1556   %1 = load <4 x double>, ptr %src, align 1, !nontemporal !1
1557   ret <4 x double> %1
1560 define <4 x i64> @test_unaligned_v4i64(ptr %src) {
1561 ; SSE-LABEL: test_unaligned_v4i64:
1562 ; SSE:       # %bb.0:
1563 ; SSE-NEXT:    movups (%rdi), %xmm0
1564 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1565 ; SSE-NEXT:    retq
1567 ; AVX-LABEL: test_unaligned_v4i64:
1568 ; AVX:       # %bb.0:
1569 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1570 ; AVX-NEXT:    retq
1572 ; AVX512-LABEL: test_unaligned_v4i64:
1573 ; AVX512:       # %bb.0:
1574 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
1575 ; AVX512-NEXT:    retq
1576   %1 = load <4 x i64>, ptr %src, align 1, !nontemporal !1
1577   ret <4 x i64> %1
1580 define <16 x i16> @test_unaligned_v16i16(ptr %src) {
1581 ; SSE-LABEL: test_unaligned_v16i16:
1582 ; SSE:       # %bb.0:
1583 ; SSE-NEXT:    movups (%rdi), %xmm0
1584 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1585 ; SSE-NEXT:    retq
1587 ; AVX-LABEL: test_unaligned_v16i16:
1588 ; AVX:       # %bb.0:
1589 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1590 ; AVX-NEXT:    retq
1592 ; AVX512-LABEL: test_unaligned_v16i16:
1593 ; AVX512:       # %bb.0:
1594 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
1595 ; AVX512-NEXT:    retq
1596   %1 = load <16 x i16>, ptr %src, align 1, !nontemporal !1
1597   ret <16 x i16> %1
1600 define <32 x i8> @test_unaligned_v32i8(ptr %src) {
1601 ; SSE-LABEL: test_unaligned_v32i8:
1602 ; SSE:       # %bb.0:
1603 ; SSE-NEXT:    movups (%rdi), %xmm0
1604 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1605 ; SSE-NEXT:    retq
1607 ; AVX-LABEL: test_unaligned_v32i8:
1608 ; AVX:       # %bb.0:
1609 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1610 ; AVX-NEXT:    retq
1612 ; AVX512-LABEL: test_unaligned_v32i8:
1613 ; AVX512:       # %bb.0:
1614 ; AVX512-NEXT:    vmovups (%rdi), %ymm0
1615 ; AVX512-NEXT:    retq
1616   %1 = load <32 x i8>, ptr %src, align 1, !nontemporal !1
1617   ret <32 x i8> %1
1620 ; And now ZMM versions.
1622 define <16 x float> @test_unaligned_v16f32(ptr %src) {
1623 ; SSE-LABEL: test_unaligned_v16f32:
1624 ; SSE:       # %bb.0:
1625 ; SSE-NEXT:    movups (%rdi), %xmm0
1626 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1627 ; SSE-NEXT:    movups 32(%rdi), %xmm2
1628 ; SSE-NEXT:    movups 48(%rdi), %xmm3
1629 ; SSE-NEXT:    retq
1631 ; AVX-LABEL: test_unaligned_v16f32:
1632 ; AVX:       # %bb.0:
1633 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1634 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
1635 ; AVX-NEXT:    retq
1637 ; AVX512-LABEL: test_unaligned_v16f32:
1638 ; AVX512:       # %bb.0:
1639 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
1640 ; AVX512-NEXT:    retq
1641   %1 = load <16 x float>, ptr %src, align 1, !nontemporal !1
1642   ret <16 x float> %1
1645 define <16 x i32> @test_unaligned_v16i32(ptr %src) {
1646 ; SSE-LABEL: test_unaligned_v16i32:
1647 ; SSE:       # %bb.0:
1648 ; SSE-NEXT:    movups (%rdi), %xmm0
1649 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1650 ; SSE-NEXT:    movups 32(%rdi), %xmm2
1651 ; SSE-NEXT:    movups 48(%rdi), %xmm3
1652 ; SSE-NEXT:    retq
1654 ; AVX-LABEL: test_unaligned_v16i32:
1655 ; AVX:       # %bb.0:
1656 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1657 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
1658 ; AVX-NEXT:    retq
1660 ; AVX512-LABEL: test_unaligned_v16i32:
1661 ; AVX512:       # %bb.0:
1662 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
1663 ; AVX512-NEXT:    retq
1664   %1 = load <16 x i32>, ptr %src, align 1, !nontemporal !1
1665   ret <16 x i32> %1
1668 define <8 x double> @test_unaligned_v8f64(ptr %src) {
1669 ; SSE-LABEL: test_unaligned_v8f64:
1670 ; SSE:       # %bb.0:
1671 ; SSE-NEXT:    movups (%rdi), %xmm0
1672 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1673 ; SSE-NEXT:    movups 32(%rdi), %xmm2
1674 ; SSE-NEXT:    movups 48(%rdi), %xmm3
1675 ; SSE-NEXT:    retq
1677 ; AVX-LABEL: test_unaligned_v8f64:
1678 ; AVX:       # %bb.0:
1679 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1680 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
1681 ; AVX-NEXT:    retq
1683 ; AVX512-LABEL: test_unaligned_v8f64:
1684 ; AVX512:       # %bb.0:
1685 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
1686 ; AVX512-NEXT:    retq
1687   %1 = load <8 x double>, ptr %src, align 1, !nontemporal !1
1688   ret <8 x double> %1
1691 define <8 x i64> @test_unaligned_v8i64(ptr %src) {
1692 ; SSE-LABEL: test_unaligned_v8i64:
1693 ; SSE:       # %bb.0:
1694 ; SSE-NEXT:    movups (%rdi), %xmm0
1695 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1696 ; SSE-NEXT:    movups 32(%rdi), %xmm2
1697 ; SSE-NEXT:    movups 48(%rdi), %xmm3
1698 ; SSE-NEXT:    retq
1700 ; AVX-LABEL: test_unaligned_v8i64:
1701 ; AVX:       # %bb.0:
1702 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1703 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
1704 ; AVX-NEXT:    retq
1706 ; AVX512-LABEL: test_unaligned_v8i64:
1707 ; AVX512:       # %bb.0:
1708 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
1709 ; AVX512-NEXT:    retq
1710   %1 = load <8 x i64>, ptr %src, align 1, !nontemporal !1
1711   ret <8 x i64> %1
1714 define <32 x i16> @test_unaligned_v32i16(ptr %src) {
1715 ; SSE-LABEL: test_unaligned_v32i16:
1716 ; SSE:       # %bb.0:
1717 ; SSE-NEXT:    movups (%rdi), %xmm0
1718 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1719 ; SSE-NEXT:    movups 32(%rdi), %xmm2
1720 ; SSE-NEXT:    movups 48(%rdi), %xmm3
1721 ; SSE-NEXT:    retq
1723 ; AVX-LABEL: test_unaligned_v32i16:
1724 ; AVX:       # %bb.0:
1725 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1726 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
1727 ; AVX-NEXT:    retq
1729 ; AVX512-LABEL: test_unaligned_v32i16:
1730 ; AVX512:       # %bb.0:
1731 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
1732 ; AVX512-NEXT:    retq
1733   %1 = load <32 x i16>, ptr %src, align 1, !nontemporal !1
1734   ret <32 x i16> %1
1737 define <64 x i8> @test_unaligned_v64i8(ptr %src) {
1738 ; SSE-LABEL: test_unaligned_v64i8:
1739 ; SSE:       # %bb.0:
1740 ; SSE-NEXT:    movups (%rdi), %xmm0
1741 ; SSE-NEXT:    movups 16(%rdi), %xmm1
1742 ; SSE-NEXT:    movups 32(%rdi), %xmm2
1743 ; SSE-NEXT:    movups 48(%rdi), %xmm3
1744 ; SSE-NEXT:    retq
1746 ; AVX-LABEL: test_unaligned_v64i8:
1747 ; AVX:       # %bb.0:
1748 ; AVX-NEXT:    vmovups (%rdi), %ymm0
1749 ; AVX-NEXT:    vmovups 32(%rdi), %ymm1
1750 ; AVX-NEXT:    retq
1752 ; AVX512-LABEL: test_unaligned_v64i8:
1753 ; AVX512:       # %bb.0:
1754 ; AVX512-NEXT:    vmovups (%rdi), %zmm0
1755 ; AVX512-NEXT:    retq
1756   %1 = load <64 x i8>, ptr %src, align 1, !nontemporal !1
1757   ret <64 x i8> %1
1760 define <16 x i32> @test_masked_v16i32(ptr %addr, <16 x i32> %old, <16 x i32> %mask1) {
1761 ; SSE2-LABEL: test_masked_v16i32:
1762 ; SSE2:       # %bb.0:
1763 ; SSE2-NEXT:    pxor %xmm8, %xmm8
1764 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm7
1765 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm6
1766 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
1767 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
1768 ; SSE2-NEXT:    pand %xmm8, %xmm0
1769 ; SSE2-NEXT:    pandn (%rdi), %xmm8
1770 ; SSE2-NEXT:    por %xmm8, %xmm0
1771 ; SSE2-NEXT:    pand %xmm5, %xmm1
1772 ; SSE2-NEXT:    pandn 16(%rdi), %xmm5
1773 ; SSE2-NEXT:    por %xmm5, %xmm1
1774 ; SSE2-NEXT:    pand %xmm6, %xmm2
1775 ; SSE2-NEXT:    pandn 32(%rdi), %xmm6
1776 ; SSE2-NEXT:    por %xmm6, %xmm2
1777 ; SSE2-NEXT:    pand %xmm7, %xmm3
1778 ; SSE2-NEXT:    pandn 48(%rdi), %xmm7
1779 ; SSE2-NEXT:    por %xmm7, %xmm3
1780 ; SSE2-NEXT:    retq
1782 ; SSE41-LABEL: test_masked_v16i32:
1783 ; SSE41:       # %bb.0:
1784 ; SSE41-NEXT:    movdqa %xmm7, %xmm9
1785 ; SSE41-NEXT:    movdqa %xmm6, %xmm10
1786 ; SSE41-NEXT:    movdqa %xmm5, %xmm11
1787 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
1788 ; SSE41-NEXT:    pxor %xmm0, %xmm0
1789 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm9
1790 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm10
1791 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm11
1792 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
1793 ; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1794 ; SSE41-NEXT:    movntdqa 32(%rdi), %xmm7
1795 ; SSE41-NEXT:    movntdqa 16(%rdi), %xmm6
1796 ; SSE41-NEXT:    movntdqa (%rdi), %xmm5
1797 ; SSE41-NEXT:    blendvps %xmm0, %xmm8, %xmm5
1798 ; SSE41-NEXT:    movdqa %xmm11, %xmm0
1799 ; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm6
1800 ; SSE41-NEXT:    movdqa %xmm10, %xmm0
1801 ; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm7
1802 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
1803 ; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm4
1804 ; SSE41-NEXT:    movaps %xmm5, %xmm0
1805 ; SSE41-NEXT:    movaps %xmm6, %xmm1
1806 ; SSE41-NEXT:    movaps %xmm7, %xmm2
1807 ; SSE41-NEXT:    movaps %xmm4, %xmm3
1808 ; SSE41-NEXT:    retq
1810 ; AVX1-LABEL: test_masked_v16i32:
1811 ; AVX1:       # %bb.0:
1812 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1813 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
1814 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
1815 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm3, %xmm3
1816 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1817 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
1818 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
1819 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm2, %xmm2
1820 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
1821 ; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm4
1822 ; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm5
1823 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm4, %ymm4
1824 ; AVX1-NEXT:    vblendvps %ymm3, %ymm1, %ymm4, %ymm1
1825 ; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1826 ; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm4
1827 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1828 ; AVX1-NEXT:    vblendvps %ymm2, %ymm0, %ymm3, %ymm0
1829 ; AVX1-NEXT:    retq
1831 ; AVX2-LABEL: test_masked_v16i32:
1832 ; AVX2:       # %bb.0:
1833 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
1834 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm3
1835 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
1836 ; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm4
1837 ; AVX2-NEXT:    vblendvps %ymm3, %ymm1, %ymm4, %ymm1
1838 ; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1839 ; AVX2-NEXT:    vblendvps %ymm2, %ymm0, %ymm3, %ymm0
1840 ; AVX2-NEXT:    retq
1842 ; AVX512-LABEL: test_masked_v16i32:
1843 ; AVX512:       # %bb.0:
1844 ; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k1
1845 ; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
1846 ; AVX512-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}
1847 ; AVX512-NEXT:    retq
1848   %mask = icmp ne <16 x i32> %mask1, zeroinitializer
1849   %r = load <16 x i32>, ptr %addr, align 64, !nontemporal !1
1850   %res = select <16 x i1> %mask, <16 x i32> %r, <16 x i32> %old
1851   ret <16 x i32>%res
1854 ; Reduced from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10895
1855 define i32 @PR39256(ptr %ptr) {
1856 ; SSE-LABEL: PR39256:
1857 ; SSE:       # %bb.0: # %entry
1858 ; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1859 ; SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1860 ; SSE-NEXT:    setb (%rax)
1861 ; SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1862 ; SSE-NEXT:    retq
1864 ; AVX-LABEL: PR39256:
1865 ; AVX:       # %bb.0: # %entry
1866 ; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1867 ; AVX-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1868 ; AVX-NEXT:    setb (%rax)
1869 ; AVX-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1870 ; AVX-NEXT:    retq
1872 ; AVX512-LABEL: PR39256:
1873 ; AVX512:       # %bb.0: # %entry
1874 ; AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1875 ; AVX512-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1876 ; AVX512-NEXT:    setb (%rax)
1877 ; AVX512-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1878 ; AVX512-NEXT:    retq
1879 entry:
1880   %l = load float, ptr %ptr, !nontemporal !1
1881   %C = fcmp ult float %l, 0x36A0000000000000
1882   store i1 %C, ptr undef
1883   ret i32 -2147483648
1886 !1 = !{i32 1}