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