xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/fast-isel-ret.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; FIXME: FastISel currently returns false if it hits code that uses VSX
2*9880d681SAndroid Build Coastguard Worker; registers and with -fast-isel-abort=1 turned on the test case will then fail.
3*9880d681SAndroid Build Coastguard Worker; When fastisel better supports VSX fix up this test case.
4*9880d681SAndroid Build Coastguard Worker;
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=-vsx | FileCheck %s --check-prefix=ELF64
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @rettrue() nounwind {
8*9880d681SAndroid Build Coastguard Workerentry:
9*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: rettrue
10*9880d681SAndroid Build Coastguard Worker; ELF64: li 3, 1
11*9880d681SAndroid Build Coastguard Worker; ELF64: blr
12*9880d681SAndroid Build Coastguard Worker  ret i1 true
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @retfalse() nounwind {
16*9880d681SAndroid Build Coastguard Workerentry:
17*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: retfalse
18*9880d681SAndroid Build Coastguard Worker; ELF64: li 3, 0
19*9880d681SAndroid Build Coastguard Worker; ELF64: blr
20*9880d681SAndroid Build Coastguard Worker  ret i1 false
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine signext i1 @retstrue() nounwind {
24*9880d681SAndroid Build Coastguard Workerentry:
25*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: retstrue
26*9880d681SAndroid Build Coastguard Worker; ELF64: li 3, -1
27*9880d681SAndroid Build Coastguard Worker; ELF64: blr
28*9880d681SAndroid Build Coastguard Worker  ret i1 true
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdefine signext i1 @retsfalse() nounwind {
32*9880d681SAndroid Build Coastguard Workerentry:
33*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: retsfalse
34*9880d681SAndroid Build Coastguard Worker; ELF64: li 3, 0
35*9880d681SAndroid Build Coastguard Worker; ELF64: blr
36*9880d681SAndroid Build Coastguard Worker  ret i1 false
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdefine signext i8 @ret2(i8 signext %a) nounwind {
40*9880d681SAndroid Build Coastguard Workerentry:
41*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret2
42*9880d681SAndroid Build Coastguard Worker; ELF64: extsb
43*9880d681SAndroid Build Coastguard Worker; ELF64: blr
44*9880d681SAndroid Build Coastguard Worker  ret i8 %a
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @ret3(i8 signext %a) nounwind {
48*9880d681SAndroid Build Coastguard Workerentry:
49*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret3
50*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 56
51*9880d681SAndroid Build Coastguard Worker; ELF64: blr
52*9880d681SAndroid Build Coastguard Worker  ret i8 %a
53*9880d681SAndroid Build Coastguard Worker}
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdefine signext i16 @ret4(i16 signext %a) nounwind {
56*9880d681SAndroid Build Coastguard Workerentry:
57*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret4
58*9880d681SAndroid Build Coastguard Worker; ELF64: extsh
59*9880d681SAndroid Build Coastguard Worker; ELF64: blr
60*9880d681SAndroid Build Coastguard Worker  ret i16 %a
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @ret5(i16 signext %a) nounwind {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret5
66*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48
67*9880d681SAndroid Build Coastguard Worker; ELF64: blr
68*9880d681SAndroid Build Coastguard Worker  ret i16 %a
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerdefine i16 @ret6(i16 %a) nounwind {
72*9880d681SAndroid Build Coastguard Workerentry:
73*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret6
74*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48
75*9880d681SAndroid Build Coastguard Worker; ELF64: blr
76*9880d681SAndroid Build Coastguard Worker  ret i16 %a
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerdefine signext i32 @ret7(i32 signext %a) nounwind {
80*9880d681SAndroid Build Coastguard Workerentry:
81*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret7
82*9880d681SAndroid Build Coastguard Worker; ELF64: extsw
83*9880d681SAndroid Build Coastguard Worker; ELF64: blr
84*9880d681SAndroid Build Coastguard Worker  ret i32 %a
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @ret8(i32 signext %a) nounwind {
88*9880d681SAndroid Build Coastguard Workerentry:
89*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret8
90*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32
91*9880d681SAndroid Build Coastguard Worker; ELF64: blr
92*9880d681SAndroid Build Coastguard Worker  ret i32 %a
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdefine i32 @ret9(i32 %a) nounwind {
96*9880d681SAndroid Build Coastguard Workerentry:
97*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret9
98*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32
99*9880d681SAndroid Build Coastguard Worker; ELF64: blr
100*9880d681SAndroid Build Coastguard Worker  ret i32 %a
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerdefine i64 @ret10(i64 %a) nounwind {
104*9880d681SAndroid Build Coastguard Workerentry:
105*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret10
106*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: exts
107*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl
108*9880d681SAndroid Build Coastguard Worker; ELF64: blr
109*9880d681SAndroid Build Coastguard Worker  ret i64 %a
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerdefine float @ret11(float %a) nounwind {
113*9880d681SAndroid Build Coastguard Workerentry:
114*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret11
115*9880d681SAndroid Build Coastguard Worker; ELF64: blr
116*9880d681SAndroid Build Coastguard Worker  ret float %a
117*9880d681SAndroid Build Coastguard Worker}
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Workerdefine double @ret12(double %a) nounwind {
120*9880d681SAndroid Build Coastguard Workerentry:
121*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret12
122*9880d681SAndroid Build Coastguard Worker; ELF64: blr
123*9880d681SAndroid Build Coastguard Worker  ret double %a
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine i8 @ret13() nounwind {
127*9880d681SAndroid Build Coastguard Workerentry:
128*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret13
129*9880d681SAndroid Build Coastguard Worker; ELF64: li
130*9880d681SAndroid Build Coastguard Worker; ELF64: blr
131*9880d681SAndroid Build Coastguard Worker  ret i8 15;
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerdefine i16 @ret14() nounwind {
135*9880d681SAndroid Build Coastguard Workerentry:
136*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret14
137*9880d681SAndroid Build Coastguard Worker; ELF64: li
138*9880d681SAndroid Build Coastguard Worker; ELF64: blr
139*9880d681SAndroid Build Coastguard Worker  ret i16 -225;
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Workerdefine i32 @ret15() nounwind {
143*9880d681SAndroid Build Coastguard Workerentry:
144*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret15
145*9880d681SAndroid Build Coastguard Worker; ELF64: lis
146*9880d681SAndroid Build Coastguard Worker; ELF64: ori
147*9880d681SAndroid Build Coastguard Worker; ELF64: blr
148*9880d681SAndroid Build Coastguard Worker  ret i32 278135;
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Workerdefine i64 @ret16() nounwind {
152*9880d681SAndroid Build Coastguard Workerentry:
153*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret16
154*9880d681SAndroid Build Coastguard Worker; ELF64: li
155*9880d681SAndroid Build Coastguard Worker; ELF64: sldi
156*9880d681SAndroid Build Coastguard Worker; ELF64: oris
157*9880d681SAndroid Build Coastguard Worker; ELF64: ori
158*9880d681SAndroid Build Coastguard Worker; ELF64: blr
159*9880d681SAndroid Build Coastguard Worker  ret i64 27813515225;
160*9880d681SAndroid Build Coastguard Worker}
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Workerdefine float @ret17() nounwind {
163*9880d681SAndroid Build Coastguard Workerentry:
164*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret17
165*9880d681SAndroid Build Coastguard Worker; ELF64: addis
166*9880d681SAndroid Build Coastguard Worker; ELF64: lfs
167*9880d681SAndroid Build Coastguard Worker; ELF64: blr
168*9880d681SAndroid Build Coastguard Worker  ret float 2.5;
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Workerdefine double @ret18() nounwind {
172*9880d681SAndroid Build Coastguard Workerentry:
173*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret18
174*9880d681SAndroid Build Coastguard Worker; ELF64: addis
175*9880d681SAndroid Build Coastguard Worker; ELF64: lfd
176*9880d681SAndroid Build Coastguard Worker; ELF64: blr
177*9880d681SAndroid Build Coastguard Worker  ret double 2.5e-33;
178*9880d681SAndroid Build Coastguard Worker}
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @ret19() nounwind {
181*9880d681SAndroid Build Coastguard Workerentry:
182*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret19
183*9880d681SAndroid Build Coastguard Worker; ELF64: li
184*9880d681SAndroid Build Coastguard Worker; ELF64: oris
185*9880d681SAndroid Build Coastguard Worker; ELF64: ori
186*9880d681SAndroid Build Coastguard Worker; ELF64: blr
187*9880d681SAndroid Build Coastguard Worker  ret i32 -1
188*9880d681SAndroid Build Coastguard Worker}
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @ret20() nounwind {
191*9880d681SAndroid Build Coastguard Workerentry:
192*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret20
193*9880d681SAndroid Build Coastguard Worker; ELF64: lis{{.*}}0
194*9880d681SAndroid Build Coastguard Worker; ELF64: ori{{.*}}32768
195*9880d681SAndroid Build Coastguard Worker; ELF64: blr
196*9880d681SAndroid Build Coastguard Worker  ret i16 32768
197*9880d681SAndroid Build Coastguard Worker}
198