xref: /llvm-project/llvm/test/CodeGen/PowerPC/scalar_vector_test_1.ll (revision 5403c59c608c08c8ecd4303763f08eb046eb5e4d)
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
12; Function Attrs: norecurse nounwind readonly
13define <2 x i64> @s2v_test1(ptr nocapture readonly %int64, <2 x i64> %vec) {
14; P9LE-LABEL: s2v_test1:
15; P9LE:       # %bb.0: # %entry
16; P9LE-NEXT:    lfd f0, 0(r3)
17; P9LE-NEXT:    xxmrghd v2, v2, vs0
18; P9LE-NEXT:    blr
19;
20; P9BE-LABEL: s2v_test1:
21; P9BE:       # %bb.0: # %entry
22; P9BE-NEXT:    lfd f0, 0(r3)
23; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
24; P9BE-NEXT:    blr
25;
26; P8LE-LABEL: s2v_test1:
27; P8LE:       # %bb.0: # %entry
28; P8LE-NEXT:    lfdx f0, 0, r3
29; P8LE-NEXT:    xxmrghd v2, v2, vs0
30; P8LE-NEXT:    blr
31;
32; P8BE-LABEL: s2v_test1:
33; P8BE:       # %bb.0: # %entry
34; P8BE-NEXT:    lfdx f0, 0, r3
35; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
36; P8BE-NEXT:    blr
37
38entry:
39  %0 = load i64, ptr %int64, align 8
40  %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0
41  ret <2 x i64> %vecins
42}
43
44; Function Attrs: norecurse nounwind readonly
45define <2 x i64> @s2v_test2(ptr nocapture readonly %int64, <2 x i64> %vec)  {
46; P9LE-LABEL: s2v_test2:
47; P9LE:       # %bb.0: # %entry
48; P9LE-NEXT:    lfd f0, 8(r3)
49; P9LE-NEXT:    xxmrghd v2, v2, vs0
50; P9LE-NEXT:    blr
51;
52; P9BE-LABEL: s2v_test2:
53; P9BE:       # %bb.0: # %entry
54; P9BE-NEXT:    lfd f0, 8(r3)
55; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
56; P9BE-NEXT:    blr
57;
58; P8LE-LABEL: s2v_test2:
59; P8LE:       # %bb.0: # %entry
60; P8LE-NEXT:    lfd f0, 8(r3)
61; P8LE-NEXT:    xxmrghd v2, v2, vs0
62; P8LE-NEXT:    blr
63;
64; P8BE-LABEL: s2v_test2:
65; P8BE:       # %bb.0: # %entry
66; P8BE-NEXT:    lfd f0, 8(r3)
67; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
68; P8BE-NEXT:    blr
69
70entry:
71  %arrayidx = getelementptr inbounds i64, ptr %int64, i64 1
72  %0 = load i64, ptr %arrayidx, align 8
73  %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0
74  ret <2 x i64> %vecins
75}
76
77; Function Attrs: norecurse nounwind readonly
78define <2 x i64> @s2v_test3(ptr nocapture readonly %int64, <2 x i64> %vec, i32 signext %Idx)  {
79; P9LE-LABEL: s2v_test3:
80; P9LE:       # %bb.0: # %entry
81; P9LE-NEXT:    sldi r4, r7, 3
82; P9LE-NEXT:    lfdx f0, r3, r4
83; P9LE-NEXT:    xxmrghd v2, v2, vs0
84; P9LE-NEXT:    blr
85;
86; P9BE-LABEL: s2v_test3:
87; P9BE:       # %bb.0: # %entry
88; P9BE-NEXT:    sldi r4, r7, 3
89; P9BE-NEXT:    lfdx f0, r3, r4
90; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
91; P9BE-NEXT:    blr
92;
93; P8LE-LABEL: s2v_test3:
94; P8LE:       # %bb.0: # %entry
95; P8LE-NEXT:    sldi r4, r7, 3
96; P8LE-NEXT:    lfdx f0, r3, r4
97; P8LE-NEXT:    xxmrghd v2, v2, vs0
98; P8LE-NEXT:    blr
99;
100; P8BE-LABEL: s2v_test3:
101; P8BE:       # %bb.0: # %entry
102; P8BE-NEXT:    sldi r4, r7, 3
103; P8BE-NEXT:    lfdx f0, r3, r4
104; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
105; P8BE-NEXT:    blr
106
107entry:
108  %idxprom = sext i32 %Idx to i64
109  %arrayidx = getelementptr inbounds i64, ptr %int64, i64 %idxprom
110  %0 = load i64, ptr %arrayidx, align 8
111  %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0
112  ret <2 x i64> %vecins
113}
114
115; Function Attrs: norecurse nounwind readonly
116define <2 x i64> @s2v_test4(ptr nocapture readonly %int64, <2 x i64> %vec)  {
117; P9LE-LABEL: s2v_test4:
118; P9LE:       # %bb.0: # %entry
119; P9LE-NEXT:    lfd f0, 8(r3)
120; P9LE-NEXT:    xxmrghd v2, v2, vs0
121; P9LE-NEXT:    blr
122;
123; P9BE-LABEL: s2v_test4:
124; P9BE:       # %bb.0: # %entry
125; P9BE-NEXT:    lfd f0, 8(r3)
126; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
127; P9BE-NEXT:    blr
128;
129; P8LE-LABEL: s2v_test4:
130; P8LE:       # %bb.0: # %entry
131; P8LE-NEXT:    lfd f0, 8(r3)
132; P8LE-NEXT:    xxmrghd v2, v2, vs0
133; P8LE-NEXT:    blr
134;
135; P8BE-LABEL: s2v_test4:
136; P8BE:       # %bb.0: # %entry
137; P8BE-NEXT:    lfd f0, 8(r3)
138; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
139; P8BE-NEXT:    blr
140
141entry:
142  %arrayidx = getelementptr inbounds i64, ptr %int64, i64 1
143  %0 = load i64, ptr %arrayidx, align 8
144  %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0
145  ret <2 x i64> %vecins
146}
147
148; Function Attrs: norecurse nounwind readonly
149define <2 x i64> @s2v_test5(<2 x i64> %vec, ptr nocapture readonly %ptr1)  {
150; P9LE-LABEL: s2v_test5:
151; P9LE:       # %bb.0: # %entry
152; P9LE-NEXT:    lfd f0, 0(r5)
153; P9LE-NEXT:    xxmrghd v2, v2, vs0
154; P9LE-NEXT:    blr
155;
156; P9BE-LABEL: s2v_test5:
157; P9BE:       # %bb.0: # %entry
158; P9BE-NEXT:    lfd f0, 0(r5)
159; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
160; P9BE-NEXT:    blr
161;
162; P8LE-LABEL: s2v_test5:
163; P8LE:       # %bb.0: # %entry
164; P8LE-NEXT:    lfdx f0, 0, r5
165; P8LE-NEXT:    xxmrghd v2, v2, vs0
166; P8LE-NEXT:    blr
167;
168; P8BE-LABEL: s2v_test5:
169; P8BE:       # %bb.0: # %entry
170; P8BE-NEXT:    lfdx f0, 0, r5
171; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
172; P8BE-NEXT:    blr
173
174entry:
175  %0 = load i64, ptr %ptr1, align 8
176  %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0
177  ret <2 x i64> %vecins
178}
179
180; Function Attrs: norecurse nounwind readonly
181define <2 x double> @s2v_test_f1(ptr nocapture readonly %f64, <2 x double> %vec)  {
182; P9LE-LABEL: s2v_test_f1:
183; P9LE:       # %bb.0: # %entry
184; P9LE-NEXT:    lfd f0, 0(r3)
185; P9LE-NEXT:    xxmrghd v2, v2, vs0
186; P9LE-NEXT:    blr
187;
188; P9BE-LABEL: s2v_test_f1:
189; P9BE:       # %bb.0: # %entry
190; P9BE-NEXT:    lfd f0, 0(r3)
191; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
192; P9BE-NEXT:    blr
193;
194; P8LE-LABEL: s2v_test_f1:
195; P8LE:       # %bb.0: # %entry
196; P8LE-NEXT:    lfd f0, 0(r3)
197; P8LE-NEXT:    xxmrghd v2, v2, vs0
198; P8LE-NEXT:    blr
199;
200; P8BE-LABEL: s2v_test_f1:
201; P8BE:       # %bb.0: # %entry
202; P8BE-NEXT:    lfd f0, 0(r3)
203; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
204; P8BE-NEXT:    blr
205
206
207
208entry:
209  %0 = load double, ptr %f64, align 8
210  %vecins = insertelement <2 x double> %vec, double %0, i32 0
211  ret <2 x double> %vecins
212}
213
214; Function Attrs: norecurse nounwind readonly
215define <2 x double> @s2v_test_f2(ptr nocapture readonly %f64, <2 x double> %vec)  {
216; P9LE-LABEL: s2v_test_f2:
217; P9LE:       # %bb.0: # %entry
218; P9LE-NEXT:    lfd f0, 8(r3)
219; P9LE-NEXT:    xxmrghd v2, v2, vs0
220; P9LE-NEXT:    blr
221;
222; P9BE-LABEL: s2v_test_f2:
223; P9BE:       # %bb.0: # %entry
224; P9BE-NEXT:    lfd f0, 8(r3)
225; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
226; P9BE-NEXT:    blr
227;
228; P8LE-LABEL: s2v_test_f2:
229; P8LE:       # %bb.0: # %entry
230; P8LE-NEXT:    lfd f0, 8(r3)
231; P8LE-NEXT:    xxmrghd v2, v2, vs0
232; P8LE-NEXT:    blr
233;
234; P8BE-LABEL: s2v_test_f2:
235; P8BE:       # %bb.0: # %entry
236; P8BE-NEXT:    lfd f0, 8(r3)
237; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
238; P8BE-NEXT:    blr
239
240
241
242entry:
243  %arrayidx = getelementptr inbounds double, ptr %f64, i64 1
244  %0 = load double, ptr %arrayidx, align 8
245  %vecins = insertelement <2 x double> %vec, double %0, i32 0
246  ret <2 x double> %vecins
247}
248
249; Function Attrs: norecurse nounwind readonly
250define <2 x double> @s2v_test_f3(ptr nocapture readonly %f64, <2 x double> %vec, i32 signext %Idx)  {
251; P9LE-LABEL: s2v_test_f3:
252; P9LE:       # %bb.0: # %entry
253; P9LE-NEXT:    sldi r4, r7, 3
254; P9LE-NEXT:    lfdx f0, r3, r4
255; P9LE-NEXT:    xxmrghd v2, v2, vs0
256; P9LE-NEXT:    blr
257;
258; P9BE-LABEL: s2v_test_f3:
259; P9BE:       # %bb.0: # %entry
260; P9BE-NEXT:    sldi r4, r7, 3
261; P9BE-NEXT:    lfdx f0, r3, r4
262; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
263; P9BE-NEXT:    blr
264;
265; P8LE-LABEL: s2v_test_f3:
266; P8LE:       # %bb.0: # %entry
267; P8LE-NEXT:    sldi r4, r7, 3
268; P8LE-NEXT:    lfdx f0, r3, r4
269; P8LE-NEXT:    xxmrghd v2, v2, vs0
270; P8LE-NEXT:    blr
271;
272; P8BE-LABEL: s2v_test_f3:
273; P8BE:       # %bb.0: # %entry
274; P8BE-NEXT:    sldi r4, r7, 3
275; P8BE-NEXT:    lfdx f0, r3, r4
276; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
277; P8BE-NEXT:    blr
278
279
280
281entry:
282  %idxprom = sext i32 %Idx to i64
283  %arrayidx = getelementptr inbounds double, ptr %f64, i64 %idxprom
284  %0 = load double, ptr %arrayidx, align 8
285  %vecins = insertelement <2 x double> %vec, double %0, i32 0
286  ret <2 x double> %vecins
287}
288
289; Function Attrs: norecurse nounwind readonly
290define <2 x double> @s2v_test_f4(ptr nocapture readonly %f64, <2 x double> %vec)  {
291; P9LE-LABEL: s2v_test_f4:
292; P9LE:       # %bb.0: # %entry
293; P9LE-NEXT:    lfd f0, 8(r3)
294; P9LE-NEXT:    xxmrghd v2, v2, vs0
295; P9LE-NEXT:    blr
296;
297; P9BE-LABEL: s2v_test_f4:
298; P9BE:       # %bb.0: # %entry
299; P9BE-NEXT:    lfd f0, 8(r3)
300; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
301; P9BE-NEXT:    blr
302;
303; P8LE-LABEL: s2v_test_f4:
304; P8LE:       # %bb.0: # %entry
305; P8LE-NEXT:    lfd f0, 8(r3)
306; P8LE-NEXT:    xxmrghd v2, v2, vs0
307; P8LE-NEXT:    blr
308;
309; P8BE-LABEL: s2v_test_f4:
310; P8BE:       # %bb.0: # %entry
311; P8BE-NEXT:    lfd f0, 8(r3)
312; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
313; P8BE-NEXT:    blr
314
315
316
317entry:
318  %arrayidx = getelementptr inbounds double, ptr %f64, i64 1
319  %0 = load double, ptr %arrayidx, align 8
320  %vecins = insertelement <2 x double> %vec, double %0, i32 0
321  ret <2 x double> %vecins
322}
323
324; Function Attrs: norecurse nounwind readonly
325define <2 x double> @s2v_test_f5(<2 x double> %vec, ptr nocapture readonly %ptr1)  {
326; P9LE-LABEL: s2v_test_f5:
327; P9LE:       # %bb.0: # %entry
328; P9LE-NEXT:    lfd f0, 0(r5)
329; P9LE-NEXT:    xxmrghd v2, v2, vs0
330; P9LE-NEXT:    blr
331;
332; P9BE-LABEL: s2v_test_f5:
333; P9BE:       # %bb.0: # %entry
334; P9BE-NEXT:    lfd f0, 0(r5)
335; P9BE-NEXT:    xxpermdi v2, vs0, v2, 1
336; P9BE-NEXT:    blr
337;
338; P8LE-LABEL: s2v_test_f5:
339; P8LE:       # %bb.0: # %entry
340; P8LE-NEXT:    lfd f0, 0(r5)
341; P8LE-NEXT:    xxmrghd v2, v2, vs0
342; P8LE-NEXT:    blr
343;
344; P8BE-LABEL: s2v_test_f5:
345; P8BE:       # %bb.0: # %entry
346; P8BE-NEXT:    lfd f0, 0(r5)
347; P8BE-NEXT:    xxpermdi v2, vs0, v2, 1
348; P8BE-NEXT:    blr
349
350
351
352entry:
353  %0 = load double, ptr %ptr1, align 8
354  %vecins = insertelement <2 x double> %vec, double %0, i32 0
355  ret <2 x double> %vecins
356}
357
358