xref: /llvm-project/llvm/test/CodeGen/PowerPC/scalar_vector_test_4.ll (revision 26ba186bd0a22fac7d08ed566b00c03236b6b7a9)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
3; RUN:    -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P9LE
4; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
5; RUN:    -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P9BE
6; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
7; RUN:    -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P8LE
8; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
9; RUN:    -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P8BE
10
11; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
12; RUN:    -mtriple=powerpc64-ibm-aix-xcoff< %s | FileCheck %s \
13; RUN:    --check-prefixes=AIX,P9-AIX,P9-AIX-64
14; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
15; RUN:    -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck %s \
16; RUN:    --check-prefixes=AIX,P9-AIX,P9-AIX-32
17; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
18; RUN:    -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck %s \
19; RUN:    --check-prefixes=AIX,P8-AIX-64
20; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
21; RUN:    -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck %s \
22; RUN:    --check-prefixes=AIX,P8-AIX-32
23
24; Function Attrs: norecurse nounwind readonly
25define <4 x i32> @s2v_test1(ptr nocapture readonly %int32, <4 x i32> %vec)  {
26; P9LE-LABEL: s2v_test1:
27; P9LE:       # %bb.0: # %entry
28; P9LE-NEXT:    lwz r3, 0(r3)
29; P9LE-NEXT:    mtfprwz f0, r3
30; P9LE-NEXT:    xxinsertw v2, vs0, 12
31; P9LE-NEXT:    blr
32;
33; P9BE-LABEL: s2v_test1:
34; P9BE:       # %bb.0: # %entry
35; P9BE-NEXT:    lwz r3, 0(r3)
36; P9BE-NEXT:    mtfprwz f0, r3
37; P9BE-NEXT:    xxinsertw v2, vs0, 0
38; P9BE-NEXT:    blr
39;
40; P8LE-LABEL: s2v_test1:
41; P8LE:       # %bb.0: # %entry
42; P8LE-NEXT:    addis r4, r2, .LCPI0_0@toc@ha
43; P8LE-NEXT:    lxsiwzx v4, 0, r3
44; P8LE-NEXT:    addi r4, r4, .LCPI0_0@toc@l
45; P8LE-NEXT:    lxvd2x vs0, 0, r4
46; P8LE-NEXT:    xxswapd v3, vs0
47; P8LE-NEXT:    vperm v2, v2, v4, v3
48; P8LE-NEXT:    blr
49;
50; P8BE-LABEL: s2v_test1:
51; P8BE:       # %bb.0: # %entry
52; P8BE-NEXT:    addis r4, r2, .LCPI0_0@toc@ha
53; P8BE-NEXT:    lxsiwzx v4, 0, r3
54; P8BE-NEXT:    addi r4, r4, .LCPI0_0@toc@l
55; P8BE-NEXT:    lxvw4x v3, 0, r4
56; P8BE-NEXT:    vperm v2, v4, v2, v3
57; P8BE-NEXT:    blr
58;
59; P9-AIX-LABEL: s2v_test1:
60; P9-AIX:       # %bb.0: # %entry
61; P9-AIX-NEXT:    lwz r3, 0(r3)
62; P9-AIX-NEXT:    mtfprwz f0, r3
63; P9-AIX-NEXT:    xxinsertw v2, vs0, 0
64; P9-AIX-NEXT:    blr
65;
66; P8-AIX-64-LABEL: s2v_test1:
67; P8-AIX-64:       # %bb.0: # %entry
68; P8-AIX-64-NEXT:    ld r4, L..C0(r2) # %const.0
69; P8-AIX-64-NEXT:    lxsiwzx v4, 0, r3
70; P8-AIX-64-NEXT:    lxvw4x v3, 0, r4
71; P8-AIX-64-NEXT:    vperm v2, v4, v2, v3
72; P8-AIX-64-NEXT:    blr
73;
74; P8-AIX-32-LABEL: s2v_test1:
75; P8-AIX-32:       # %bb.0: # %entry
76; P8-AIX-32-NEXT:    lfiwzx f0, 0, r3
77; P8-AIX-32-NEXT:    lwz r3, L..C0(r2) # %const.0
78; P8-AIX-32-NEXT:    lxvw4x v4, 0, r3
79; P8-AIX-32-NEXT:    xxspltw v3, vs0, 1
80; P8-AIX-32-NEXT:    vperm v2, v3, v2, v4
81; P8-AIX-32-NEXT:    blr
82entry:
83  %0 = load i32, ptr %int32, align 4
84  %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0
85  ret <4 x i32> %vecins
86}
87
88; Function Attrs: norecurse nounwind readonly
89define <4 x i32> @s2v_test2(ptr nocapture readonly %int32, <4 x i32> %vec)  {
90; P9LE-LABEL: s2v_test2:
91; P9LE:       # %bb.0: # %entry
92; P9LE-NEXT:    lwz r3, 4(r3)
93; P9LE-NEXT:    mtfprwz f0, r3
94; P9LE-NEXT:    xxinsertw v2, vs0, 12
95; P9LE-NEXT:    blr
96;
97; P9BE-LABEL: s2v_test2:
98; P9BE:       # %bb.0: # %entry
99; P9BE-NEXT:    lwz r3, 4(r3)
100; P9BE-NEXT:    mtfprwz f0, r3
101; P9BE-NEXT:    xxinsertw v2, vs0, 0
102; P9BE-NEXT:    blr
103;
104; P8LE-LABEL: s2v_test2:
105; P8LE:       # %bb.0: # %entry
106; P8LE-NEXT:    addis r4, r2, .LCPI1_0@toc@ha
107; P8LE-NEXT:    addi r3, r3, 4
108; P8LE-NEXT:    addi r4, r4, .LCPI1_0@toc@l
109; P8LE-NEXT:    lxsiwzx v4, 0, r3
110; P8LE-NEXT:    lxvd2x vs0, 0, r4
111; P8LE-NEXT:    xxswapd v3, vs0
112; P8LE-NEXT:    vperm v2, v2, v4, v3
113; P8LE-NEXT:    blr
114;
115; P8BE-LABEL: s2v_test2:
116; P8BE:       # %bb.0: # %entry
117; P8BE-NEXT:    addis r4, r2, .LCPI1_0@toc@ha
118; P8BE-NEXT:    addi r3, r3, 4
119; P8BE-NEXT:    addi r4, r4, .LCPI1_0@toc@l
120; P8BE-NEXT:    lxsiwzx v4, 0, r3
121; P8BE-NEXT:    lxvw4x v3, 0, r4
122; P8BE-NEXT:    vperm v2, v4, v2, v3
123; P8BE-NEXT:    blr
124;
125; P9-AIX-LABEL: s2v_test2:
126; P9-AIX:       # %bb.0: # %entry
127; P9-AIX-NEXT:    lwz r3, 4(r3)
128; P9-AIX-NEXT:    mtfprwz f0, r3
129; P9-AIX-NEXT:    xxinsertw v2, vs0, 0
130; P9-AIX-NEXT:    blr
131;
132; P8-AIX-64-LABEL: s2v_test2:
133; P8-AIX-64:       # %bb.0: # %entry
134; P8-AIX-64-NEXT:    ld r4, L..C1(r2) # %const.0
135; P8-AIX-64-NEXT:    addi r3, r3, 4
136; P8-AIX-64-NEXT:    lxsiwzx v4, 0, r3
137; P8-AIX-64-NEXT:    lxvw4x v3, 0, r4
138; P8-AIX-64-NEXT:    vperm v2, v4, v2, v3
139; P8-AIX-64-NEXT:    blr
140;
141; P8-AIX-32-LABEL: s2v_test2:
142; P8-AIX-32:       # %bb.0: # %entry
143; P8-AIX-32-NEXT:    addi r3, r3, 4
144; P8-AIX-32-NEXT:    lfiwzx f0, 0, r3
145; P8-AIX-32-NEXT:    lwz r3, L..C1(r2) # %const.0
146; P8-AIX-32-NEXT:    lxvw4x v4, 0, r3
147; P8-AIX-32-NEXT:    xxspltw v3, vs0, 1
148; P8-AIX-32-NEXT:    vperm v2, v3, v2, v4
149; P8-AIX-32-NEXT:    blr
150entry:
151  %arrayidx = getelementptr inbounds i32, ptr %int32, i64 1
152  %0 = load i32, ptr %arrayidx, align 4
153  %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0
154  ret <4 x i32> %vecins
155}
156
157; Function Attrs: norecurse nounwind readonly
158define <4 x i32> @s2v_test3(ptr nocapture readonly %int32, <4 x i32> %vec, i32 signext %Idx)  {
159; P9LE-LABEL: s2v_test3:
160; P9LE:       # %bb.0: # %entry
161; P9LE-NEXT:    sldi r4, r7, 2
162; P9LE-NEXT:    lwzx r3, r3, r4
163; P9LE-NEXT:    mtfprwz f0, r3
164; P9LE-NEXT:    xxinsertw v2, vs0, 12
165; P9LE-NEXT:    blr
166;
167; P9BE-LABEL: s2v_test3:
168; P9BE:       # %bb.0: # %entry
169; P9BE-NEXT:    sldi r4, r7, 2
170; P9BE-NEXT:    lwzx r3, r3, r4
171; P9BE-NEXT:    mtfprwz f0, r3
172; P9BE-NEXT:    xxinsertw v2, vs0, 0
173; P9BE-NEXT:    blr
174;
175; P8LE-LABEL: s2v_test3:
176; P8LE:       # %bb.0: # %entry
177; P8LE-NEXT:    addis r4, r2, .LCPI2_0@toc@ha
178; P8LE-NEXT:    addi r4, r4, .LCPI2_0@toc@l
179; P8LE-NEXT:    lxvd2x vs0, 0, r4
180; P8LE-NEXT:    sldi r4, r7, 2
181; P8LE-NEXT:    lxsiwzx v4, r3, r4
182; P8LE-NEXT:    xxswapd v3, vs0
183; P8LE-NEXT:    vperm v2, v2, v4, v3
184; P8LE-NEXT:    blr
185;
186; P8BE-LABEL: s2v_test3:
187; P8BE:       # %bb.0: # %entry
188; P8BE-NEXT:    sldi r4, r7, 2
189; P8BE-NEXT:    lxsiwzx v3, r3, r4
190; P8BE-NEXT:    addis r3, r2, .LCPI2_0@toc@ha
191; P8BE-NEXT:    addi r3, r3, .LCPI2_0@toc@l
192; P8BE-NEXT:    lxvw4x v4, 0, r3
193; P8BE-NEXT:    vperm v2, v3, v2, v4
194; P8BE-NEXT:    blr
195;
196; P9-AIX-64-LABEL: s2v_test3:
197; P9-AIX-64:       # %bb.0: # %entry
198; P9-AIX-64-NEXT:    sldi r4, r4, 2
199; P9-AIX-64-NEXT:    lwzx r3, r3, r4
200; P9-AIX-64-NEXT:    mtfprwz f0, r3
201; P9-AIX-64-NEXT:    xxinsertw v2, vs0, 0
202; P9-AIX-64-NEXT:    blr
203;
204; P9-AIX-32-LABEL: s2v_test3:
205; P9-AIX-32:       # %bb.0: # %entry
206; P9-AIX-32-NEXT:    slwi r4, r4, 2
207; P9-AIX-32-NEXT:    lwzx r3, r3, r4
208; P9-AIX-32-NEXT:    mtfprwz f0, r3
209; P9-AIX-32-NEXT:    xxinsertw v2, vs0, 0
210; P9-AIX-32-NEXT:    blr
211;
212; P8-AIX-64-LABEL: s2v_test3:
213; P8-AIX-64:       # %bb.0: # %entry
214; P8-AIX-64-NEXT:    sldi r4, r4, 2
215; P8-AIX-64-NEXT:    lxsiwzx v3, r3, r4
216; P8-AIX-64-NEXT:    ld r3, L..C2(r2) # %const.0
217; P8-AIX-64-NEXT:    lxvw4x v4, 0, r3
218; P8-AIX-64-NEXT:    vperm v2, v3, v2, v4
219; P8-AIX-64-NEXT:    blr
220;
221; P8-AIX-32-LABEL: s2v_test3:
222; P8-AIX-32:       # %bb.0: # %entry
223; P8-AIX-32-NEXT:    slwi r4, r4, 2
224; P8-AIX-32-NEXT:    lfiwzx f0, r3, r4
225; P8-AIX-32-NEXT:    lwz r3, L..C2(r2) # %const.0
226; P8-AIX-32-NEXT:    lxvw4x v4, 0, r3
227; P8-AIX-32-NEXT:    xxspltw v3, vs0, 1
228; P8-AIX-32-NEXT:    vperm v2, v3, v2, v4
229; P8-AIX-32-NEXT:    blr
230entry:
231  %idxprom = sext i32 %Idx to i64
232  %arrayidx = getelementptr inbounds i32, ptr %int32, i64 %idxprom
233  %0 = load i32, ptr %arrayidx, align 4
234  %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0
235  ret <4 x i32> %vecins
236}
237
238; Function Attrs: norecurse nounwind readonly
239define <4 x i32> @s2v_test4(ptr nocapture readonly %int32, <4 x i32> %vec)  {
240; P9LE-LABEL: s2v_test4:
241; P9LE:       # %bb.0: # %entry
242; P9LE-NEXT:    lwz r3, 4(r3)
243; P9LE-NEXT:    mtfprwz f0, r3
244; P9LE-NEXT:    xxinsertw v2, vs0, 12
245; P9LE-NEXT:    blr
246;
247; P9BE-LABEL: s2v_test4:
248; P9BE:       # %bb.0: # %entry
249; P9BE-NEXT:    lwz r3, 4(r3)
250; P9BE-NEXT:    mtfprwz f0, r3
251; P9BE-NEXT:    xxinsertw v2, vs0, 0
252; P9BE-NEXT:    blr
253;
254; P8LE-LABEL: s2v_test4:
255; P8LE:       # %bb.0: # %entry
256; P8LE-NEXT:    addis r4, r2, .LCPI3_0@toc@ha
257; P8LE-NEXT:    addi r3, r3, 4
258; P8LE-NEXT:    addi r4, r4, .LCPI3_0@toc@l
259; P8LE-NEXT:    lxsiwzx v4, 0, r3
260; P8LE-NEXT:    lxvd2x vs0, 0, r4
261; P8LE-NEXT:    xxswapd v3, vs0
262; P8LE-NEXT:    vperm v2, v2, v4, v3
263; P8LE-NEXT:    blr
264;
265; P8BE-LABEL: s2v_test4:
266; P8BE:       # %bb.0: # %entry
267; P8BE-NEXT:    addis r4, r2, .LCPI3_0@toc@ha
268; P8BE-NEXT:    addi r3, r3, 4
269; P8BE-NEXT:    addi r4, r4, .LCPI3_0@toc@l
270; P8BE-NEXT:    lxsiwzx v4, 0, r3
271; P8BE-NEXT:    lxvw4x v3, 0, r4
272; P8BE-NEXT:    vperm v2, v4, v2, v3
273; P8BE-NEXT:    blr
274;
275; P9-AIX-LABEL: s2v_test4:
276; P9-AIX:       # %bb.0: # %entry
277; P9-AIX-NEXT:    lwz r3, 4(r3)
278; P9-AIX-NEXT:    mtfprwz f0, r3
279; P9-AIX-NEXT:    xxinsertw v2, vs0, 0
280; P9-AIX-NEXT:    blr
281;
282; P8-AIX-64-LABEL: s2v_test4:
283; P8-AIX-64:       # %bb.0: # %entry
284; P8-AIX-64-NEXT:    ld r4, L..C3(r2) # %const.0
285; P8-AIX-64-NEXT:    addi r3, r3, 4
286; P8-AIX-64-NEXT:    lxsiwzx v4, 0, r3
287; P8-AIX-64-NEXT:    lxvw4x v3, 0, r4
288; P8-AIX-64-NEXT:    vperm v2, v4, v2, v3
289; P8-AIX-64-NEXT:    blr
290;
291; P8-AIX-32-LABEL: s2v_test4:
292; P8-AIX-32:       # %bb.0: # %entry
293; P8-AIX-32-NEXT:    addi r3, r3, 4
294; P8-AIX-32-NEXT:    lfiwzx f0, 0, r3
295; P8-AIX-32-NEXT:    lwz r3, L..C3(r2) # %const.0
296; P8-AIX-32-NEXT:    lxvw4x v4, 0, r3
297; P8-AIX-32-NEXT:    xxspltw v3, vs0, 1
298; P8-AIX-32-NEXT:    vperm v2, v3, v2, v4
299; P8-AIX-32-NEXT:    blr
300entry:
301  %arrayidx = getelementptr inbounds i32, ptr %int32, i64 1
302  %0 = load i32, ptr %arrayidx, align 4
303  %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0
304  ret <4 x i32> %vecins
305}
306
307; Function Attrs: norecurse nounwind readonly
308define <4 x i32> @s2v_test5(<4 x i32> %vec, ptr nocapture readonly %ptr1)  {
309; P9LE-LABEL: s2v_test5:
310; P9LE:       # %bb.0: # %entry
311; P9LE-NEXT:    lwz r3, 0(r5)
312; P9LE-NEXT:    mtfprwz f0, r3
313; P9LE-NEXT:    xxinsertw v2, vs0, 12
314; P9LE-NEXT:    blr
315;
316; P9BE-LABEL: s2v_test5:
317; P9BE:       # %bb.0: # %entry
318; P9BE-NEXT:    lwz r3, 0(r5)
319; P9BE-NEXT:    mtfprwz f0, r3
320; P9BE-NEXT:    xxinsertw v2, vs0, 0
321; P9BE-NEXT:    blr
322;
323; P8LE-LABEL: s2v_test5:
324; P8LE:       # %bb.0: # %entry
325; P8LE-NEXT:    addis r3, r2, .LCPI4_0@toc@ha
326; P8LE-NEXT:    lxsiwzx v4, 0, r5
327; P8LE-NEXT:    addi r3, r3, .LCPI4_0@toc@l
328; P8LE-NEXT:    lxvd2x vs0, 0, r3
329; P8LE-NEXT:    xxswapd v3, vs0
330; P8LE-NEXT:    vperm v2, v2, v4, v3
331; P8LE-NEXT:    blr
332;
333; P8BE-LABEL: s2v_test5:
334; P8BE:       # %bb.0: # %entry
335; P8BE-NEXT:    addis r3, r2, .LCPI4_0@toc@ha
336; P8BE-NEXT:    lxsiwzx v4, 0, r5
337; P8BE-NEXT:    addi r3, r3, .LCPI4_0@toc@l
338; P8BE-NEXT:    lxvw4x v3, 0, r3
339; P8BE-NEXT:    vperm v2, v4, v2, v3
340; P8BE-NEXT:    blr
341;
342; P9-AIX-LABEL: s2v_test5:
343; P9-AIX:       # %bb.0: # %entry
344; P9-AIX-NEXT:    lwz r3, 0(r3)
345; P9-AIX-NEXT:    mtfprwz f0, r3
346; P9-AIX-NEXT:    xxinsertw v2, vs0, 0
347; P9-AIX-NEXT:    blr
348;
349; P8-AIX-64-LABEL: s2v_test5:
350; P8-AIX-64:       # %bb.0: # %entry
351; P8-AIX-64-NEXT:    ld r4, L..C4(r2) # %const.0
352; P8-AIX-64-NEXT:    lxsiwzx v4, 0, r3
353; P8-AIX-64-NEXT:    lxvw4x v3, 0, r4
354; P8-AIX-64-NEXT:    vperm v2, v4, v2, v3
355; P8-AIX-64-NEXT:    blr
356;
357; P8-AIX-32-LABEL: s2v_test5:
358; P8-AIX-32:       # %bb.0: # %entry
359; P8-AIX-32-NEXT:    lfiwzx f0, 0, r3
360; P8-AIX-32-NEXT:    lwz r3, L..C4(r2) # %const.0
361; P8-AIX-32-NEXT:    lxvw4x v4, 0, r3
362; P8-AIX-32-NEXT:    xxspltw v3, vs0, 1
363; P8-AIX-32-NEXT:    vperm v2, v3, v2, v4
364; P8-AIX-32-NEXT:    blr
365entry:
366  %0 = load i32, ptr %ptr1, align 4
367  %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0
368  ret <4 x i32> %vecins
369}
370
371; Function Attrs: norecurse nounwind readonly
372define <4 x float> @s2v_test_f1(ptr nocapture readonly %f64, <4 x float> %vec)  {
373; P9LE-LABEL: s2v_test_f1:
374; P9LE:       # %bb.0: # %entry
375; P9LE-NEXT:    lwz r3, 0(r3)
376; P9LE-NEXT:    mtfprwz f0, r3
377; P9LE-NEXT:    xxinsertw v2, vs0, 12
378; P9LE-NEXT:    blr
379;
380; P9BE-LABEL: s2v_test_f1:
381; P9BE:       # %bb.0: # %entry
382; P9BE-NEXT:    lwz r3, 0(r3)
383; P9BE-NEXT:    mtfprwz f0, r3
384; P9BE-NEXT:    xxinsertw v2, vs0, 0
385; P9BE-NEXT:    blr
386;
387; P8LE-LABEL: s2v_test_f1:
388; P8LE:       # %bb.0: # %entry
389; P8LE-NEXT:    addis r4, r2, .LCPI5_0@toc@ha
390; P8LE-NEXT:    lxsiwzx v4, 0, r3
391; P8LE-NEXT:    addi r4, r4, .LCPI5_0@toc@l
392; P8LE-NEXT:    lxvd2x vs0, 0, r4
393; P8LE-NEXT:    xxswapd v3, vs0
394; P8LE-NEXT:    vperm v2, v2, v4, v3
395; P8LE-NEXT:    blr
396;
397; P8BE-LABEL: s2v_test_f1:
398; P8BE:       # %bb.0: # %entry
399; P8BE-NEXT:    addis r4, r2, .LCPI5_0@toc@ha
400; P8BE-NEXT:    lxsiwzx v4, 0, r3
401; P8BE-NEXT:    addi r4, r4, .LCPI5_0@toc@l
402; P8BE-NEXT:    lxvw4x v3, 0, r4
403; P8BE-NEXT:    vperm v2, v4, v2, v3
404; P8BE-NEXT:    blr
405;
406; P9-AIX-LABEL: s2v_test_f1:
407; P9-AIX:       # %bb.0: # %entry
408; P9-AIX-NEXT:    lwz r3, 0(r3)
409; P9-AIX-NEXT:    mtfprwz f0, r3
410; P9-AIX-NEXT:    xxinsertw v2, vs0, 0
411; P9-AIX-NEXT:    blr
412;
413; P8-AIX-64-LABEL: s2v_test_f1:
414; P8-AIX-64:       # %bb.0: # %entry
415; P8-AIX-64-NEXT:    ld r4, L..C5(r2) # %const.0
416; P8-AIX-64-NEXT:    lxsiwzx v4, 0, r3
417; P8-AIX-64-NEXT:    lxvw4x v3, 0, r4
418; P8-AIX-64-NEXT:    vperm v2, v4, v2, v3
419; P8-AIX-64-NEXT:    blr
420;
421; P8-AIX-32-LABEL: s2v_test_f1:
422; P8-AIX-32:       # %bb.0: # %entry
423; P8-AIX-32-NEXT:    lwz r4, L..C5(r2) # %const.0
424; P8-AIX-32-NEXT:    lxsiwzx v4, 0, r3
425; P8-AIX-32-NEXT:    lxvw4x v3, 0, r4
426; P8-AIX-32-NEXT:    vperm v2, v4, v2, v3
427; P8-AIX-32-NEXT:    blr
428entry:
429  %0 = load float, ptr %f64, align 4
430  %vecins = insertelement <4 x float> %vec, float %0, i32 0
431  ret <4 x float> %vecins
432}
433
434; Function Attrs: norecurse nounwind readonly
435define <2 x float> @s2v_test_f2(ptr nocapture readonly %f64, <2 x float> %vec)  {
436; P9LE-LABEL: s2v_test_f2:
437; P9LE:       # %bb.0: # %entry
438; P9LE-NEXT:    addi r3, r3, 4
439; P9LE-NEXT:    xxmrglw vs1, v2, v2
440; P9LE-NEXT:    lfiwzx f0, 0, r3
441; P9LE-NEXT:    xxmrghw v2, vs1, vs0
442; P9LE-NEXT:    blr
443;
444; P9BE-LABEL: s2v_test_f2:
445; P9BE:       # %bb.0: # %entry
446; P9BE-NEXT:    addi r3, r3, 4
447; P9BE-NEXT:    lxsiwzx v3, 0, r3
448; P9BE-NEXT:    vmrgow v2, v3, v2
449; P9BE-NEXT:    blr
450;
451; P8LE-LABEL: s2v_test_f2:
452; P8LE:       # %bb.0: # %entry
453; P8LE-NEXT:    addi r3, r3, 4
454; P8LE-NEXT:    xxmrglw vs0, v2, v2
455; P8LE-NEXT:    lfiwzx f1, 0, r3
456; P8LE-NEXT:    xxmrghw v2, vs0, vs1
457; P8LE-NEXT:    blr
458;
459; P8BE-LABEL: s2v_test_f2:
460; P8BE:       # %bb.0: # %entry
461; P8BE-NEXT:    addi r3, r3, 4
462; P8BE-NEXT:    lxsiwzx v3, 0, r3
463; P8BE-NEXT:    vmrgow v2, v3, v2
464; P8BE-NEXT:    blr
465;
466; AIX-LABEL: s2v_test_f2:
467; AIX:       # %bb.0: # %entry
468; AIX-NEXT:    addi r3, r3, 4
469; AIX-NEXT:    lxsiwzx v3, 0, r3
470; AIX-NEXT:    vmrgow v2, v3, v2
471; AIX-NEXT:    blr
472entry:
473  %arrayidx = getelementptr inbounds float, ptr %f64, i64 1
474  %0 = load float, ptr %arrayidx, align 8
475  %vecins = insertelement <2 x float> %vec, float %0, i32 0
476  ret <2 x float> %vecins
477}
478
479; Function Attrs: norecurse nounwind readonly
480define <2 x float> @s2v_test_f3(ptr nocapture readonly %f64, <2 x float> %vec, i32 signext %Idx)  {
481; P9LE-LABEL: s2v_test_f3:
482; P9LE:       # %bb.0: # %entry
483; P9LE-NEXT:    sldi r4, r7, 2
484; P9LE-NEXT:    xxmrglw vs1, v2, v2
485; P9LE-NEXT:    lfiwzx f0, r3, r4
486; P9LE-NEXT:    xxmrghw v2, vs1, vs0
487; P9LE-NEXT:    blr
488;
489; P9BE-LABEL: s2v_test_f3:
490; P9BE:       # %bb.0: # %entry
491; P9BE-NEXT:    sldi r4, r7, 2
492; P9BE-NEXT:    lxsiwzx v3, r3, r4
493; P9BE-NEXT:    vmrgow v2, v3, v2
494; P9BE-NEXT:    blr
495;
496; P8LE-LABEL: s2v_test_f3:
497; P8LE:       # %bb.0: # %entry
498; P8LE-NEXT:    sldi r4, r7, 2
499; P8LE-NEXT:    xxmrglw vs0, v2, v2
500; P8LE-NEXT:    lfiwzx f1, r3, r4
501; P8LE-NEXT:    xxmrghw v2, vs0, vs1
502; P8LE-NEXT:    blr
503;
504; P8BE-LABEL: s2v_test_f3:
505; P8BE:       # %bb.0: # %entry
506; P8BE-NEXT:    sldi r4, r7, 2
507; P8BE-NEXT:    lxsiwzx v3, r3, r4
508; P8BE-NEXT:    vmrgow v2, v3, v2
509; P8BE-NEXT:    blr
510;
511; P9-AIX-64-LABEL: s2v_test_f3:
512; P9-AIX-64:       # %bb.0: # %entry
513; P9-AIX-64-NEXT:    sldi r4, r4, 2
514; P9-AIX-64-NEXT:    lxsiwzx v3, r3, r4
515; P9-AIX-64-NEXT:    vmrgow v2, v3, v2
516; P9-AIX-64-NEXT:    blr
517;
518; P9-AIX-32-LABEL: s2v_test_f3:
519; P9-AIX-32:       # %bb.0: # %entry
520; P9-AIX-32-NEXT:    slwi r4, r4, 2
521; P9-AIX-32-NEXT:    lxsiwzx v3, r3, r4
522; P9-AIX-32-NEXT:    vmrgow v2, v3, v2
523; P9-AIX-32-NEXT:    blr
524;
525; P8-AIX-64-LABEL: s2v_test_f3:
526; P8-AIX-64:       # %bb.0: # %entry
527; P8-AIX-64-NEXT:    sldi r4, r4, 2
528; P8-AIX-64-NEXT:    lxsiwzx v3, r3, r4
529; P8-AIX-64-NEXT:    vmrgow v2, v3, v2
530; P8-AIX-64-NEXT:    blr
531;
532; P8-AIX-32-LABEL: s2v_test_f3:
533; P8-AIX-32:       # %bb.0: # %entry
534; P8-AIX-32-NEXT:    slwi r4, r4, 2
535; P8-AIX-32-NEXT:    lxsiwzx v3, r3, r4
536; P8-AIX-32-NEXT:    vmrgow v2, v3, v2
537; P8-AIX-32-NEXT:    blr
538entry:
539  %idxprom = sext i32 %Idx to i64
540  %arrayidx = getelementptr inbounds float, ptr %f64, i64 %idxprom
541  %0 = load float, ptr %arrayidx, align 8
542  %vecins = insertelement <2 x float> %vec, float %0, i32 0
543  ret <2 x float> %vecins
544}
545
546; Function Attrs: norecurse nounwind readonly
547define <2 x float> @s2v_test_f4(ptr nocapture readonly %f64, <2 x float> %vec)  {
548; P9LE-LABEL: s2v_test_f4:
549; P9LE:       # %bb.0: # %entry
550; P9LE-NEXT:    addi r3, r3, 4
551; P9LE-NEXT:    xxmrglw vs1, v2, v2
552; P9LE-NEXT:    lfiwzx f0, 0, r3
553; P9LE-NEXT:    xxmrghw v2, vs1, vs0
554; P9LE-NEXT:    blr
555;
556; P9BE-LABEL: s2v_test_f4:
557; P9BE:       # %bb.0: # %entry
558; P9BE-NEXT:    addi r3, r3, 4
559; P9BE-NEXT:    lxsiwzx v3, 0, r3
560; P9BE-NEXT:    vmrgow v2, v3, v2
561; P9BE-NEXT:    blr
562;
563; P8LE-LABEL: s2v_test_f4:
564; P8LE:       # %bb.0: # %entry
565; P8LE-NEXT:    addi r3, r3, 4
566; P8LE-NEXT:    xxmrglw vs0, v2, v2
567; P8LE-NEXT:    lfiwzx f1, 0, r3
568; P8LE-NEXT:    xxmrghw v2, vs0, vs1
569; P8LE-NEXT:    blr
570;
571; P8BE-LABEL: s2v_test_f4:
572; P8BE:       # %bb.0: # %entry
573; P8BE-NEXT:    addi r3, r3, 4
574; P8BE-NEXT:    lxsiwzx v3, 0, r3
575; P8BE-NEXT:    vmrgow v2, v3, v2
576; P8BE-NEXT:    blr
577;
578; AIX-LABEL: s2v_test_f4:
579; AIX:       # %bb.0: # %entry
580; AIX-NEXT:    addi r3, r3, 4
581; AIX-NEXT:    lxsiwzx v3, 0, r3
582; AIX-NEXT:    vmrgow v2, v3, v2
583; AIX-NEXT:    blr
584entry:
585  %arrayidx = getelementptr inbounds float, ptr %f64, i64 1
586  %0 = load float, ptr %arrayidx, align 8
587  %vecins = insertelement <2 x float> %vec, float %0, i32 0
588  ret <2 x float> %vecins
589}
590
591; Function Attrs: norecurse nounwind readonly
592define <2 x float> @s2v_test_f5(<2 x float> %vec, ptr nocapture readonly %ptr1)  {
593; P9LE-LABEL: s2v_test_f5:
594; P9LE:       # %bb.0: # %entry
595; P9LE-NEXT:    lfiwzx f0, 0, r5
596; P9LE-NEXT:    xxmrglw vs1, v2, v2
597; P9LE-NEXT:    xxmrghw v2, vs1, vs0
598; P9LE-NEXT:    blr
599;
600; P9BE-LABEL: s2v_test_f5:
601; P9BE:       # %bb.0: # %entry
602; P9BE-NEXT:    lxsiwzx v3, 0, r5
603; P9BE-NEXT:    vmrgow v2, v3, v2
604; P9BE-NEXT:    blr
605;
606; P8LE-LABEL: s2v_test_f5:
607; P8LE:       # %bb.0: # %entry
608; P8LE-NEXT:    lfiwzx f1, 0, r5
609; P8LE-NEXT:    xxmrglw vs0, v2, v2
610; P8LE-NEXT:    xxmrghw v2, vs0, vs1
611; P8LE-NEXT:    blr
612;
613; P8BE-LABEL: s2v_test_f5:
614; P8BE:       # %bb.0: # %entry
615; P8BE-NEXT:    lxsiwzx v3, 0, r5
616; P8BE-NEXT:    vmrgow v2, v3, v2
617; P8BE-NEXT:    blr
618;
619; AIX-LABEL: s2v_test_f5:
620; AIX:       # %bb.0: # %entry
621; AIX-NEXT:    lxsiwzx v3, 0, r3
622; AIX-NEXT:    vmrgow v2, v3, v2
623; AIX-NEXT:    blr
624entry:
625  %0 = load float, ptr %ptr1, align 8
626  %vecins = insertelement <2 x float> %vec, float %0, i32 0
627  ret <2 x float> %vecins
628}
629
630