xref: /llvm-project/llvm/test/CodeGen/X86/nontemporal-loads.ll (revision 189900eb149bb55ae3787346f57c1ccbdc50fb3c)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512BW
8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512VL
9
10define <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
15;
16; SSE41-LABEL: test_v4f32:
17; SSE41:       # %bb.0:
18; SSE41-NEXT:    movntdqa (%rdi), %xmm0
19; SSE41-NEXT:    retq
20;
21; AVX-LABEL: test_v4f32:
22; AVX:       # %bb.0:
23; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
24; AVX-NEXT:    retq
25;
26; AVX512-LABEL: test_v4f32:
27; AVX512:       # %bb.0:
28; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
29; AVX512-NEXT:    retq
30  %1 = load <4 x float>, ptr %src, align 16, !nontemporal !1
31  ret <4 x float> %1
32}
33
34define <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
39;
40; SSE41-LABEL: test_v4i32:
41; SSE41:       # %bb.0:
42; SSE41-NEXT:    movntdqa (%rdi), %xmm0
43; SSE41-NEXT:    retq
44;
45; AVX-LABEL: test_v4i32:
46; AVX:       # %bb.0:
47; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
48; AVX-NEXT:    retq
49;
50; AVX512-LABEL: test_v4i32:
51; AVX512:       # %bb.0:
52; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
53; AVX512-NEXT:    retq
54  %1 = load <4 x i32>, ptr %src, align 16, !nontemporal !1
55  ret <4 x i32> %1
56}
57
58define <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
63;
64; SSE41-LABEL: test_v2f64:
65; SSE41:       # %bb.0:
66; SSE41-NEXT:    movntdqa (%rdi), %xmm0
67; SSE41-NEXT:    retq
68;
69; AVX-LABEL: test_v2f64:
70; AVX:       # %bb.0:
71; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
72; AVX-NEXT:    retq
73;
74; AVX512-LABEL: test_v2f64:
75; AVX512:       # %bb.0:
76; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
77; AVX512-NEXT:    retq
78  %1 = load <2 x double>, ptr %src, align 16, !nontemporal !1
79  ret <2 x double> %1
80}
81
82define <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
87;
88; SSE41-LABEL: test_v2i64:
89; SSE41:       # %bb.0:
90; SSE41-NEXT:    movntdqa (%rdi), %xmm0
91; SSE41-NEXT:    retq
92;
93; AVX-LABEL: test_v2i64:
94; AVX:       # %bb.0:
95; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
96; AVX-NEXT:    retq
97;
98; AVX512-LABEL: test_v2i64:
99; AVX512:       # %bb.0:
100; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
101; AVX512-NEXT:    retq
102  %1 = load <2 x i64>, ptr %src, align 16, !nontemporal !1
103  ret <2 x i64> %1
104}
105
106define <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
111;
112; SSE41-LABEL: test_v8i16:
113; SSE41:       # %bb.0:
114; SSE41-NEXT:    movntdqa (%rdi), %xmm0
115; SSE41-NEXT:    retq
116;
117; AVX-LABEL: test_v8i16:
118; AVX:       # %bb.0:
119; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
120; AVX-NEXT:    retq
121;
122; AVX512-LABEL: test_v8i16:
123; AVX512:       # %bb.0:
124; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
125; AVX512-NEXT:    retq
126  %1 = load <8 x i16>, ptr %src, align 16, !nontemporal !1
127  ret <8 x i16> %1
128}
129
130define <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
135;
136; SSE41-LABEL: test_v16i8:
137; SSE41:       # %bb.0:
138; SSE41-NEXT:    movntdqa (%rdi), %xmm0
139; SSE41-NEXT:    retq
140;
141; AVX-LABEL: test_v16i8:
142; AVX:       # %bb.0:
143; AVX-NEXT:    vmovntdqa (%rdi), %xmm0
144; AVX-NEXT:    retq
145;
146; AVX512-LABEL: test_v16i8:
147; AVX512:       # %bb.0:
148; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0
149; AVX512-NEXT:    retq
150  %1 = load <16 x i8>, ptr %src, align 16, !nontemporal !1
151  ret <16 x i8> %1
152}
153
154; And now YMM versions.
155
156define <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
162;
163; SSE41-LABEL: test_v8f32:
164; SSE41:       # %bb.0:
165; SSE41-NEXT:    movntdqa (%rdi), %xmm0
166; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
167; SSE41-NEXT:    retq
168;
169; AVX1-LABEL: test_v8f32:
170; AVX1:       # %bb.0:
171; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
172; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
173; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
174; AVX1-NEXT:    retq
175;
176; AVX2-LABEL: test_v8f32:
177; AVX2:       # %bb.0:
178; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
179; AVX2-NEXT:    retq
180;
181; AVX512-LABEL: test_v8f32:
182; AVX512:       # %bb.0:
183; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
184; AVX512-NEXT:    retq
185  %1 = load <8 x float>, ptr %src, align 32, !nontemporal !1
186  ret <8 x float> %1
187}
188
189define <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
195;
196; SSE41-LABEL: test_v8i32:
197; SSE41:       # %bb.0:
198; SSE41-NEXT:    movntdqa (%rdi), %xmm0
199; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
200; SSE41-NEXT:    retq
201;
202; AVX1-LABEL: test_v8i32:
203; AVX1:       # %bb.0:
204; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
205; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
206; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
207; AVX1-NEXT:    retq
208;
209; AVX2-LABEL: test_v8i32:
210; AVX2:       # %bb.0:
211; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
212; AVX2-NEXT:    retq
213;
214; AVX512-LABEL: test_v8i32:
215; AVX512:       # %bb.0:
216; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
217; AVX512-NEXT:    retq
218  %1 = load <8 x i32>, ptr %src, align 32, !nontemporal !1
219  ret <8 x i32> %1
220}
221
222define <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
228;
229; SSE41-LABEL: test_v4f64:
230; SSE41:       # %bb.0:
231; SSE41-NEXT:    movntdqa (%rdi), %xmm0
232; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
233; SSE41-NEXT:    retq
234;
235; AVX1-LABEL: test_v4f64:
236; AVX1:       # %bb.0:
237; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
238; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
239; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
240; AVX1-NEXT:    retq
241;
242; AVX2-LABEL: test_v4f64:
243; AVX2:       # %bb.0:
244; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
245; AVX2-NEXT:    retq
246;
247; AVX512-LABEL: test_v4f64:
248; AVX512:       # %bb.0:
249; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
250; AVX512-NEXT:    retq
251  %1 = load <4 x double>, ptr %src, align 32, !nontemporal !1
252  ret <4 x double> %1
253}
254
255define <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
261;
262; SSE41-LABEL: test_v4i64:
263; SSE41:       # %bb.0:
264; SSE41-NEXT:    movntdqa (%rdi), %xmm0
265; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
266; SSE41-NEXT:    retq
267;
268; AVX1-LABEL: test_v4i64:
269; AVX1:       # %bb.0:
270; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
271; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
272; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
273; AVX1-NEXT:    retq
274;
275; AVX2-LABEL: test_v4i64:
276; AVX2:       # %bb.0:
277; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
278; AVX2-NEXT:    retq
279;
280; AVX512-LABEL: test_v4i64:
281; AVX512:       # %bb.0:
282; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
283; AVX512-NEXT:    retq
284  %1 = load <4 x i64>, ptr %src, align 32, !nontemporal !1
285  ret <4 x i64> %1
286}
287
288define <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
294;
295; SSE41-LABEL: test_v16i16:
296; SSE41:       # %bb.0:
297; SSE41-NEXT:    movntdqa (%rdi), %xmm0
298; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
299; SSE41-NEXT:    retq
300;
301; AVX1-LABEL: test_v16i16:
302; AVX1:       # %bb.0:
303; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
304; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
305; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
306; AVX1-NEXT:    retq
307;
308; AVX2-LABEL: test_v16i16:
309; AVX2:       # %bb.0:
310; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
311; AVX2-NEXT:    retq
312;
313; AVX512-LABEL: test_v16i16:
314; AVX512:       # %bb.0:
315; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
316; AVX512-NEXT:    retq
317  %1 = load <16 x i16>, ptr %src, align 32, !nontemporal !1
318  ret <16 x i16> %1
319}
320
321define <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
327;
328; SSE41-LABEL: test_v32i8:
329; SSE41:       # %bb.0:
330; SSE41-NEXT:    movntdqa (%rdi), %xmm0
331; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
332; SSE41-NEXT:    retq
333;
334; AVX1-LABEL: test_v32i8:
335; AVX1:       # %bb.0:
336; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
337; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
338; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
339; AVX1-NEXT:    retq
340;
341; AVX2-LABEL: test_v32i8:
342; AVX2:       # %bb.0:
343; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
344; AVX2-NEXT:    retq
345;
346; AVX512-LABEL: test_v32i8:
347; AVX512:       # %bb.0:
348; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0
349; AVX512-NEXT:    retq
350  %1 = load <32 x i8>, ptr %src, align 32, !nontemporal !1
351  ret <32 x i8> %1
352}
353
354; And now ZMM versions.
355
356define <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
364;
365; SSE41-LABEL: test_v16f32:
366; SSE41:       # %bb.0:
367; SSE41-NEXT:    movntdqa (%rdi), %xmm0
368; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
369; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
370; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
371; SSE41-NEXT:    retq
372;
373; AVX1-LABEL: test_v16f32:
374; AVX1:       # %bb.0:
375; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
376; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
377; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
378; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
379; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
380; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
381; AVX1-NEXT:    retq
382;
383; AVX2-LABEL: test_v16f32:
384; AVX2:       # %bb.0:
385; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
386; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
387; AVX2-NEXT:    retq
388;
389; AVX512-LABEL: test_v16f32:
390; AVX512:       # %bb.0:
391; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
392; AVX512-NEXT:    retq
393  %1 = load <16 x float>, ptr %src, align 64, !nontemporal !1
394  ret <16 x float> %1
395}
396
397define <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
405;
406; SSE41-LABEL: test_v16i32:
407; SSE41:       # %bb.0:
408; SSE41-NEXT:    movntdqa (%rdi), %xmm0
409; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
410; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
411; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
412; SSE41-NEXT:    retq
413;
414; AVX1-LABEL: test_v16i32:
415; AVX1:       # %bb.0:
416; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
417; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
418; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
419; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
420; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
421; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
422; AVX1-NEXT:    retq
423;
424; AVX2-LABEL: test_v16i32:
425; AVX2:       # %bb.0:
426; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
427; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
428; AVX2-NEXT:    retq
429;
430; AVX512-LABEL: test_v16i32:
431; AVX512:       # %bb.0:
432; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
433; AVX512-NEXT:    retq
434  %1 = load <16 x i32>, ptr %src, align 64, !nontemporal !1
435  ret <16 x i32> %1
436}
437
438define <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
446;
447; SSE41-LABEL: test_v8f64:
448; SSE41:       # %bb.0:
449; SSE41-NEXT:    movntdqa (%rdi), %xmm0
450; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
451; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
452; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
453; SSE41-NEXT:    retq
454;
455; AVX1-LABEL: test_v8f64:
456; AVX1:       # %bb.0:
457; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
458; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
459; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
460; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
461; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
462; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
463; AVX1-NEXT:    retq
464;
465; AVX2-LABEL: test_v8f64:
466; AVX2:       # %bb.0:
467; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
468; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
469; AVX2-NEXT:    retq
470;
471; AVX512-LABEL: test_v8f64:
472; AVX512:       # %bb.0:
473; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
474; AVX512-NEXT:    retq
475  %1 = load <8 x double>, ptr %src, align 64, !nontemporal !1
476  ret <8 x double> %1
477}
478
479define <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
487;
488; SSE41-LABEL: test_v8i64:
489; SSE41:       # %bb.0:
490; SSE41-NEXT:    movntdqa (%rdi), %xmm0
491; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
492; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
493; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
494; SSE41-NEXT:    retq
495;
496; AVX1-LABEL: test_v8i64:
497; AVX1:       # %bb.0:
498; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
499; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
500; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
501; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
502; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
503; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
504; AVX1-NEXT:    retq
505;
506; AVX2-LABEL: test_v8i64:
507; AVX2:       # %bb.0:
508; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
509; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
510; AVX2-NEXT:    retq
511;
512; AVX512-LABEL: test_v8i64:
513; AVX512:       # %bb.0:
514; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0
515; AVX512-NEXT:    retq
516  %1 = load <8 x i64>, ptr %src, align 64, !nontemporal !1
517  ret <8 x i64> %1
518}
519
520define <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
528;
529; SSE41-LABEL: test_v32i16:
530; SSE41:       # %bb.0:
531; SSE41-NEXT:    movntdqa (%rdi), %xmm0
532; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
533; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
534; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
535; SSE41-NEXT:    retq
536;
537; AVX1-LABEL: test_v32i16:
538; AVX1:       # %bb.0:
539; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0
540; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1
541; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
542; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1
543; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2
544; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
545; AVX1-NEXT:    retq
546;
547; AVX2-LABEL: test_v32i16:
548; AVX2:       # %bb.0:
549; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0
550; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1
551; AVX2-NEXT:    retq
552;
553; 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
559}
560
561define <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
569;
570; SSE41-LABEL: test_v64i8:
571; SSE41:       # %bb.0:
572; SSE41-NEXT:    movntdqa (%rdi), %xmm0
573; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1
574; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2
575; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3
576; SSE41-NEXT:    retq
577;
578; AVX1-LABEL: test_v64i8:
579; AVX1:       # %bb.0:
580; AVX1-NEXT:    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
587;
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
593;
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
600}
601
602
603; Check cases where the load would be folded.
604
605define <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
610;
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
616;
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
622;
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
631}
632
633define <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
638;
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
644;
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
650;
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
659}
660
661define <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
666;
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
672;
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
678;
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
687}
688
689define <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
694;
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
700;
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
706;
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
715}
716
717define <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
722;
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
728;
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
734;
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
743}
744
745define <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
750;
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
756;
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
762;
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
771}
772
773; And now YMM versions.
774
775define <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
781;
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
789;
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
797;
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
803;
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
812}
813
814define <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
820;
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
828;
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
838;
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
844;
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
853}
854
855define <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
861;
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
869;
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
877;
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
883;
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
892}
893
894define <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
900;
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
908;
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
918;
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
924;
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
933}
934
935define <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
941;
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
949;
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
959;
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
965;
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
974}
975
976define <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
982;
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
990;
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
1000;
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
1006;
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
1015}
1016
1017; And now ZMM versions.
1018
1019define <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
1027;
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
1039;
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
1051;
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
1059;
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
1068}
1069
1070define <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
1078;
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
1090;
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
1106;
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
1114;
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
1123}
1124
1125define <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
1133;
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
1145;
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
1157;
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
1165;
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
1174}
1175
1176define <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
1184;
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
1196;
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
1212;
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
1220;
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
1229}
1230
1231define <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
1239;
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
1251;
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
1267;
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
1275;
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
1285;
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
1291;
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
1304}
1305
1306define <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
1314;
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
1326;
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
1342;
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
1350;
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
1360;
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
1366;
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
1379}
1380
1381
1382; Unaligned non-temporal loads (not supported)
1383
1384define <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
1389;
1390; AVX-LABEL: test_unaligned_v4f32:
1391; AVX:       # %bb.0:
1392; AVX-NEXT:    vmovups (%rdi), %xmm0
1393; AVX-NEXT:    retq
1394;
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
1401}
1402
1403define <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
1408;
1409; AVX-LABEL: test_unaligned_v4i32:
1410; AVX:       # %bb.0:
1411; AVX-NEXT:    vmovups (%rdi), %xmm0
1412; AVX-NEXT:    retq
1413;
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
1420}
1421
1422define <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
1427;
1428; AVX-LABEL: test_unaligned_v2f64:
1429; AVX:       # %bb.0:
1430; AVX-NEXT:    vmovups (%rdi), %xmm0
1431; AVX-NEXT:    retq
1432;
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
1439}
1440
1441define <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
1446;
1447; AVX-LABEL: test_unaligned_v2i64:
1448; AVX:       # %bb.0:
1449; AVX-NEXT:    vmovups (%rdi), %xmm0
1450; AVX-NEXT:    retq
1451;
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
1458}
1459
1460define <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
1465;
1466; AVX-LABEL: test_unaligned_v8i16:
1467; AVX:       # %bb.0:
1468; AVX-NEXT:    vmovups (%rdi), %xmm0
1469; AVX-NEXT:    retq
1470;
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
1477}
1478
1479define <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
1484;
1485; AVX-LABEL: test_unaligned_v16i8:
1486; AVX:       # %bb.0:
1487; AVX-NEXT:    vmovups (%rdi), %xmm0
1488; AVX-NEXT:    retq
1489;
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
1496}
1497
1498; And now YMM versions.
1499
1500define <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
1506;
1507; AVX-LABEL: test_unaligned_v8f32:
1508; AVX:       # %bb.0:
1509; AVX-NEXT:    vmovups (%rdi), %ymm0
1510; AVX-NEXT:    retq
1511;
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
1518}
1519
1520define <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
1526;
1527; AVX-LABEL: test_unaligned_v8i32:
1528; AVX:       # %bb.0:
1529; AVX-NEXT:    vmovups (%rdi), %ymm0
1530; AVX-NEXT:    retq
1531;
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
1538}
1539
1540define <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
1546;
1547; AVX-LABEL: test_unaligned_v4f64:
1548; AVX:       # %bb.0:
1549; AVX-NEXT:    vmovups (%rdi), %ymm0
1550; AVX-NEXT:    retq
1551;
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
1558}
1559
1560define <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
1566;
1567; AVX-LABEL: test_unaligned_v4i64:
1568; AVX:       # %bb.0:
1569; AVX-NEXT:    vmovups (%rdi), %ymm0
1570; AVX-NEXT:    retq
1571;
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
1578}
1579
1580define <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
1586;
1587; AVX-LABEL: test_unaligned_v16i16:
1588; AVX:       # %bb.0:
1589; AVX-NEXT:    vmovups (%rdi), %ymm0
1590; AVX-NEXT:    retq
1591;
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
1598}
1599
1600define <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
1606;
1607; AVX-LABEL: test_unaligned_v32i8:
1608; AVX:       # %bb.0:
1609; AVX-NEXT:    vmovups (%rdi), %ymm0
1610; AVX-NEXT:    retq
1611;
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
1618}
1619
1620; And now ZMM versions.
1621
1622define <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
1630;
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
1636;
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
1643}
1644
1645define <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
1653;
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
1659;
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
1666}
1667
1668define <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
1676;
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
1682;
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
1689}
1690
1691define <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
1699;
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
1705;
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
1712}
1713
1714define <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
1722;
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
1728;
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
1735}
1736
1737define <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
1745;
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
1751;
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
1758}
1759
1760define <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
1781;
1782; SSE41-LABEL: test_masked_v16i32:
1783; SSE41:       # %bb.0:
1784; SSE41-NEXT:    movdqa %xmm0, %xmm8
1785; SSE41-NEXT:    pxor %xmm0, %xmm0
1786; SSE41-NEXT:    pcmpeqd %xmm0, %xmm7
1787; SSE41-NEXT:    pcmpeqd %xmm0, %xmm6
1788; SSE41-NEXT:    pcmpeqd %xmm0, %xmm5
1789; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
1790; SSE41-NEXT:    movntdqa 48(%rdi), %xmm4
1791; SSE41-NEXT:    movntdqa 32(%rdi), %xmm9
1792; SSE41-NEXT:    movntdqa 16(%rdi), %xmm10
1793; SSE41-NEXT:    movntdqa (%rdi), %xmm11
1794; SSE41-NEXT:    blendvps %xmm0, %xmm8, %xmm11
1795; SSE41-NEXT:    movdqa %xmm5, %xmm0
1796; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm10
1797; SSE41-NEXT:    movdqa %xmm6, %xmm0
1798; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm9
1799; SSE41-NEXT:    movdqa %xmm7, %xmm0
1800; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm4
1801; SSE41-NEXT:    movaps %xmm11, %xmm0
1802; SSE41-NEXT:    movaps %xmm10, %xmm1
1803; SSE41-NEXT:    movaps %xmm9, %xmm2
1804; SSE41-NEXT:    movaps %xmm4, %xmm3
1805; SSE41-NEXT:    retq
1806;
1807; AVX1-LABEL: test_masked_v16i32:
1808; AVX1:       # %bb.0:
1809; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1810; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
1811; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
1812; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm3, %xmm3
1813; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1814; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
1815; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
1816; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm2, %xmm2
1817; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
1818; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm4
1819; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm5
1820; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm4, %ymm4
1821; AVX1-NEXT:    vblendvps %ymm3, %ymm1, %ymm4, %ymm1
1822; AVX1-NEXT:    vmovntdqa (%rdi), %xmm3
1823; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm4
1824; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1825; AVX1-NEXT:    vblendvps %ymm2, %ymm0, %ymm3, %ymm0
1826; AVX1-NEXT:    retq
1827;
1828; AVX2-LABEL: test_masked_v16i32:
1829; AVX2:       # %bb.0:
1830; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
1831; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm3
1832; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
1833; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm4
1834; AVX2-NEXT:    vblendvps %ymm3, %ymm1, %ymm4, %ymm1
1835; AVX2-NEXT:    vmovntdqa (%rdi), %ymm3
1836; AVX2-NEXT:    vblendvps %ymm2, %ymm0, %ymm3, %ymm0
1837; AVX2-NEXT:    retq
1838;
1839; AVX512-LABEL: test_masked_v16i32:
1840; AVX512:       # %bb.0:
1841; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k1
1842; AVX512-NEXT:    vmovntdqa (%rdi), %zmm1
1843; AVX512-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}
1844; AVX512-NEXT:    retq
1845  %mask = icmp ne <16 x i32> %mask1, zeroinitializer
1846  %r = load <16 x i32>, ptr %addr, align 64, !nontemporal !1
1847  %res = select <16 x i1> %mask, <16 x i32> %r, <16 x i32> %old
1848  ret <16 x i32>%res
1849}
1850
1851; Reduced from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10895
1852define i32 @PR39256(ptr %ptr) {
1853; SSE-LABEL: PR39256:
1854; SSE:       # %bb.0: # %entry
1855; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1856; SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1857; SSE-NEXT:    setb (%rax)
1858; SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1859; SSE-NEXT:    retq
1860;
1861; AVX-LABEL: PR39256:
1862; AVX:       # %bb.0: # %entry
1863; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1864; AVX-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1865; AVX-NEXT:    setb (%rax)
1866; AVX-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1867; AVX-NEXT:    retq
1868;
1869; AVX512-LABEL: PR39256:
1870; AVX512:       # %bb.0: # %entry
1871; AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1872; AVX512-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1873; AVX512-NEXT:    setb (%rax)
1874; AVX512-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1875; AVX512-NEXT:    retq
1876entry:
1877  %l = load float, ptr %ptr, !nontemporal !1
1878  %C = fcmp ult float %l, 0x36A0000000000000
1879  store i1 %C, ptr undef
1880  ret i32 -2147483648
1881}
1882
1883!1 = !{i32 1}
1884