xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/mips64signextendsesf.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64 -mcpu=mips64r2 -mattr=+soft-float -O2 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine void @foosf() #0 {
4*9880d681SAndroid Build Coastguard Workerentry:
5*9880d681SAndroid Build Coastguard Worker  %in = alloca float, align 4
6*9880d681SAndroid Build Coastguard Worker  %out = alloca float, align 4
7*9880d681SAndroid Build Coastguard Worker  store volatile float 0xBFD59E1380000000, float* %in, align 4
8*9880d681SAndroid Build Coastguard Worker  %in.0.in.0. = load volatile float, float* %in, align 4
9*9880d681SAndroid Build Coastguard Worker  %rintf = tail call float @rintf(float %in.0.in.0.) #1
10*9880d681SAndroid Build Coastguard Worker  store volatile float %rintf, float* %out, align 4
11*9880d681SAndroid Build Coastguard Worker  ret void
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf
14*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
15*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
16*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdeclare float @rintf(float)
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine float @foosf1(float* nocapture readonly %a) #0 {
22*9880d681SAndroid Build Coastguard Workerentry:
23*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %a, align 4
24*9880d681SAndroid Build Coastguard Worker  %call = tail call float @roundf(float %0) #2
25*9880d681SAndroid Build Coastguard Worker  ret float %call
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf1
28*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
29*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
30*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerdeclare float @roundf(float) #1
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine float @foosf2(float* nocapture readonly %a) #0 {
36*9880d681SAndroid Build Coastguard Workerentry:
37*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %a, align 4
38*9880d681SAndroid Build Coastguard Worker  %call = tail call float @truncf(float %0) #2
39*9880d681SAndroid Build Coastguard Worker  ret float %call
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf2
42*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
43*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
44*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerdeclare float @truncf(float) #1
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerdefine float @foosf3(float* nocapture readonly %a) #0 {
50*9880d681SAndroid Build Coastguard Workerentry:
51*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %a, align 4
52*9880d681SAndroid Build Coastguard Worker  %call = tail call float @floorf(float %0) #2
53*9880d681SAndroid Build Coastguard Worker  ret float %call
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf3
56*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
57*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
58*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdeclare float @floorf(float) #1
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine float @foosf4(float* nocapture readonly %a) #0 {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %a, align 4
66*9880d681SAndroid Build Coastguard Worker  %call = tail call float @nearbyintf(float %0) #2
67*9880d681SAndroid Build Coastguard Worker  ret float %call
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf4
70*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
71*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
72*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdeclare float @nearbyintf(float) #1
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine float @foosf5(float* nocapture readonly %a) #0 {
78*9880d681SAndroid Build Coastguard Workerentry:
79*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %a, align 4
80*9880d681SAndroid Build Coastguard Worker  %mul = fmul float %0, undef
81*9880d681SAndroid Build Coastguard Worker  ret float %mul
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf5
84*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
85*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
86*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerdefine float @foosf6(float* nocapture readonly %a) #0 {
90*9880d681SAndroid Build Coastguard Workerentry:
91*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %a, align 4
92*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %0, undef
93*9880d681SAndroid Build Coastguard Worker  ret float %sub
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf6
96*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
97*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
98*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdefine float @foosf7(float* nocapture readonly %a) #0 {
102*9880d681SAndroid Build Coastguard Workerentry:
103*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %a, align 4
104*9880d681SAndroid Build Coastguard Worker  %add = fadd float %0, undef
105*9880d681SAndroid Build Coastguard Worker  ret float %add
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf7
108*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
109*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
110*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine float @foosf8(float* nocapture readonly %a) #0 {
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker  %b = alloca float, align 4
116*9880d681SAndroid Build Coastguard Worker  %b.0.b.0. = load volatile float, float* %b, align 4
117*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %a, align 4
118*9880d681SAndroid Build Coastguard Worker  %div = fdiv float %b.0.b.0., %0
119*9880d681SAndroid Build Coastguard Worker  ret float %div
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf8
122*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
123*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
124*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
125*9880d681SAndroid Build Coastguard Worker}
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Workerdefine float @foosf9() #0 {
128*9880d681SAndroid Build Coastguard Workerentry:
129*9880d681SAndroid Build Coastguard Worker  %b = alloca float, align 4
130*9880d681SAndroid Build Coastguard Worker  %b.0.b.0. = load volatile float, float* %b, align 4
131*9880d681SAndroid Build Coastguard Worker  %conv = fpext float %b.0.b.0. to double
132*9880d681SAndroid Build Coastguard Worker  %b.0.b.0.3 = load volatile float, float* %b, align 4
133*9880d681SAndroid Build Coastguard Worker  %conv1 = fpext float %b.0.b.0.3 to double
134*9880d681SAndroid Build Coastguard Worker  %call = tail call double @pow(double %conv, double %conv1) #1
135*9880d681SAndroid Build Coastguard Worker  %conv2 = fptrunc double %call to float
136*9880d681SAndroid Build Coastguard Worker  ret float %conv2
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf9
139*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
140*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
141*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
142*9880d681SAndroid Build Coastguard Worker}
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Workerdeclare double @pow(double, double) #0
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Workerdefine float @foosf10() #0 {
147*9880d681SAndroid Build Coastguard Workerentry:
148*9880d681SAndroid Build Coastguard Worker  %a = alloca float, align 4
149*9880d681SAndroid Build Coastguard Worker  %a.0.a.0. = load volatile float, float* %a, align 4
150*9880d681SAndroid Build Coastguard Worker  %conv = fpext float %a.0.a.0. to double
151*9880d681SAndroid Build Coastguard Worker  %call = tail call double @sin(double %conv) #1
152*9880d681SAndroid Build Coastguard Worker  %conv1 = fptrunc double %call to float
153*9880d681SAndroid Build Coastguard Worker  ret float %conv1
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf10
156*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
157*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
158*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Workerdeclare double @sin(double) #0
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Workerdefine float @foosf11() #0 {
164*9880d681SAndroid Build Coastguard Workerentry:
165*9880d681SAndroid Build Coastguard Worker  %b = alloca float, align 4
166*9880d681SAndroid Build Coastguard Worker  %b.0.b.0. = load volatile float, float* %b, align 4
167*9880d681SAndroid Build Coastguard Worker  %call = tail call float @ceilf(float %b.0.b.0.) #2
168*9880d681SAndroid Build Coastguard Worker  ret float %call
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf11
171*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
172*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
173*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
174*9880d681SAndroid Build Coastguard Worker}
175*9880d681SAndroid Build Coastguard Worker
176*9880d681SAndroid Build Coastguard Workerdeclare float @ceilf(float) #1
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Workerdefine float @foosf12() #0 {
179*9880d681SAndroid Build Coastguard Workerentry:
180*9880d681SAndroid Build Coastguard Worker  %b = alloca float, align 4
181*9880d681SAndroid Build Coastguard Worker  %a = alloca float, align 4
182*9880d681SAndroid Build Coastguard Worker  %b.0.b.0. = load volatile float, float* %b, align 4
183*9880d681SAndroid Build Coastguard Worker  %a.0.a.0. = load volatile float, float* %a, align 4
184*9880d681SAndroid Build Coastguard Worker  %call = tail call float @fmaxf(float %b.0.b.0., float %a.0.a.0.) #2
185*9880d681SAndroid Build Coastguard Worker  ret float %call
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf12
188*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
189*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
190*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
191*9880d681SAndroid Build Coastguard Worker}
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Workerdeclare float @fmaxf(float, float) #1
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Workerdefine float @foosf13() #0 {
196*9880d681SAndroid Build Coastguard Workerentry:
197*9880d681SAndroid Build Coastguard Worker  %b = alloca float, align 4
198*9880d681SAndroid Build Coastguard Worker  %a = alloca float, align 4
199*9880d681SAndroid Build Coastguard Worker  %b.0.b.0. = load volatile float, float* %b, align 4
200*9880d681SAndroid Build Coastguard Worker  %a.0.a.0. = load volatile float, float* %a, align 4
201*9880d681SAndroid Build Coastguard Worker  %call = tail call float @fminf(float %b.0.b.0., float %a.0.a.0.) #2
202*9880d681SAndroid Build Coastguard Worker  ret float %call
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:      foosf13
205*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsll
206*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        dsrl
207*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:        lwu
208*9880d681SAndroid Build Coastguard Worker}
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Workerdeclare float @fminf(float, float) #1
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind "use-soft-float"="true" }
214*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind readnone "use-soft-float"="true" }