xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/illegal-float-ops.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-none-linux-gnu -verify-machineinstrs -o - %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@varfloat = global float 0.0
4*9880d681SAndroid Build Coastguard Worker@vardouble = global double 0.0
5*9880d681SAndroid Build Coastguard Worker@varfp128 = global fp128 zeroinitializer
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.cos.f32(float)
8*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.cos.f64(double)
9*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.cos.f128(fp128)
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine void @test_cos(float %float, double %double, fp128 %fp128) {
12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_cos:
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker   %cosfloat = call float @llvm.cos.f32(float %float)
15*9880d681SAndroid Build Coastguard Worker   store float %cosfloat, float* @varfloat
16*9880d681SAndroid Build Coastguard Worker; CHECK: bl cosf
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker   %cosdouble = call double @llvm.cos.f64(double %double)
19*9880d681SAndroid Build Coastguard Worker   store double %cosdouble, double* @vardouble
20*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker   %cosfp128 = call fp128 @llvm.cos.f128(fp128 %fp128)
23*9880d681SAndroid Build Coastguard Worker   store fp128 %cosfp128, fp128* @varfp128
24*9880d681SAndroid Build Coastguard Worker; CHECK: bl cosl
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker  ret void
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.exp.f32(float)
30*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.exp.f64(double)
31*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.exp.f128(fp128)
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerdefine void @test_exp(float %float, double %double, fp128 %fp128) {
34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_exp:
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker   %expfloat = call float @llvm.exp.f32(float %float)
37*9880d681SAndroid Build Coastguard Worker   store float %expfloat, float* @varfloat
38*9880d681SAndroid Build Coastguard Worker; CHECK: bl expf
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker   %expdouble = call double @llvm.exp.f64(double %double)
41*9880d681SAndroid Build Coastguard Worker   store double %expdouble, double* @vardouble
42*9880d681SAndroid Build Coastguard Worker; CHECK: bl exp
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker   %expfp128 = call fp128 @llvm.exp.f128(fp128 %fp128)
45*9880d681SAndroid Build Coastguard Worker   store fp128 %expfp128, fp128* @varfp128
46*9880d681SAndroid Build Coastguard Worker; CHECK: bl expl
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker  ret void
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.exp2.f32(float)
52*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.exp2.f64(double)
53*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.exp2.f128(fp128)
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdefine void @test_exp2(float %float, double %double, fp128 %fp128) {
56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_exp2:
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker   %exp2float = call float @llvm.exp2.f32(float %float)
59*9880d681SAndroid Build Coastguard Worker   store float %exp2float, float* @varfloat
60*9880d681SAndroid Build Coastguard Worker; CHECK: bl exp2f
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Worker   %exp2double = call double @llvm.exp2.f64(double %double)
63*9880d681SAndroid Build Coastguard Worker   store double %exp2double, double* @vardouble
64*9880d681SAndroid Build Coastguard Worker; CHECK: bl exp2
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker   %exp2fp128 = call fp128 @llvm.exp2.f128(fp128 %fp128)
67*9880d681SAndroid Build Coastguard Worker   store fp128 %exp2fp128, fp128* @varfp128
68*9880d681SAndroid Build Coastguard Worker; CHECK: bl exp2l
69*9880d681SAndroid Build Coastguard Worker  ret void
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.log.f32(float)
74*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.log.f64(double)
75*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.log.f128(fp128)
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine void @test_log(float %float, double %double, fp128 %fp128) {
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log:
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker   %logfloat = call float @llvm.log.f32(float %float)
81*9880d681SAndroid Build Coastguard Worker   store float %logfloat, float* @varfloat
82*9880d681SAndroid Build Coastguard Worker; CHECK: bl logf
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker   %logdouble = call double @llvm.log.f64(double %double)
85*9880d681SAndroid Build Coastguard Worker   store double %logdouble, double* @vardouble
86*9880d681SAndroid Build Coastguard Worker; CHECK: bl log
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker   %logfp128 = call fp128 @llvm.log.f128(fp128 %fp128)
89*9880d681SAndroid Build Coastguard Worker   store fp128 %logfp128, fp128* @varfp128
90*9880d681SAndroid Build Coastguard Worker; CHECK: bl logl
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker  ret void
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.log2.f32(float)
96*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.log2.f64(double)
97*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.log2.f128(fp128)
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerdefine void @test_log2(float %float, double %double, fp128 %fp128) {
100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log2:
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker   %log2float = call float @llvm.log2.f32(float %float)
103*9880d681SAndroid Build Coastguard Worker   store float %log2float, float* @varfloat
104*9880d681SAndroid Build Coastguard Worker; CHECK: bl log2f
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker   %log2double = call double @llvm.log2.f64(double %double)
107*9880d681SAndroid Build Coastguard Worker   store double %log2double, double* @vardouble
108*9880d681SAndroid Build Coastguard Worker; CHECK: bl log2
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker   %log2fp128 = call fp128 @llvm.log2.f128(fp128 %fp128)
111*9880d681SAndroid Build Coastguard Worker   store fp128 %log2fp128, fp128* @varfp128
112*9880d681SAndroid Build Coastguard Worker; CHECK: bl log2l
113*9880d681SAndroid Build Coastguard Worker  ret void
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.log10.f32(float)
118*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.log10.f64(double)
119*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.log10.f128(fp128)
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerdefine void @test_log10(float %float, double %double, fp128 %fp128) {
122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log10:
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker   %log10float = call float @llvm.log10.f32(float %float)
125*9880d681SAndroid Build Coastguard Worker   store float %log10float, float* @varfloat
126*9880d681SAndroid Build Coastguard Worker; CHECK: bl log10f
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker   %log10double = call double @llvm.log10.f64(double %double)
129*9880d681SAndroid Build Coastguard Worker   store double %log10double, double* @vardouble
130*9880d681SAndroid Build Coastguard Worker; CHECK: bl log10
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker   %log10fp128 = call fp128 @llvm.log10.f128(fp128 %fp128)
133*9880d681SAndroid Build Coastguard Worker   store fp128 %log10fp128, fp128* @varfp128
134*9880d681SAndroid Build Coastguard Worker; CHECK: bl log10l
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Worker  ret void
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.sin.f32(float)
140*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.sin.f64(double)
141*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.sin.f128(fp128)
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdefine void @test_sin(float %float, double %double, fp128 %fp128) {
144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sin:
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker   %sinfloat = call float @llvm.sin.f32(float %float)
147*9880d681SAndroid Build Coastguard Worker   store float %sinfloat, float* @varfloat
148*9880d681SAndroid Build Coastguard Worker; CHECK: bl sinf
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker   %sindouble = call double @llvm.sin.f64(double %double)
151*9880d681SAndroid Build Coastguard Worker   store double %sindouble, double* @vardouble
152*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker   %sinfp128 = call fp128 @llvm.sin.f128(fp128 %fp128)
155*9880d681SAndroid Build Coastguard Worker   store fp128 %sinfp128, fp128* @varfp128
156*9880d681SAndroid Build Coastguard Worker; CHECK: bl sinl
157*9880d681SAndroid Build Coastguard Worker  ret void
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.pow.f32(float, float)
162*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.pow.f64(double, double)
163*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.pow.f128(fp128, fp128)
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine void @test_pow(float %float, double %double, fp128 %fp128) {
166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pow:
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker   %powfloat = call float @llvm.pow.f32(float %float, float %float)
169*9880d681SAndroid Build Coastguard Worker   store float %powfloat, float* @varfloat
170*9880d681SAndroid Build Coastguard Worker; CHECK: bl powf
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker   %powdouble = call double @llvm.pow.f64(double %double, double %double)
173*9880d681SAndroid Build Coastguard Worker   store double %powdouble, double* @vardouble
174*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
175*9880d681SAndroid Build Coastguard Worker
176*9880d681SAndroid Build Coastguard Worker   %powfp128 = call fp128 @llvm.pow.f128(fp128 %fp128, fp128 %fp128)
177*9880d681SAndroid Build Coastguard Worker   store fp128 %powfp128, fp128* @varfp128
178*9880d681SAndroid Build Coastguard Worker; CHECK: bl powl
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker  ret void
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.powi.f32(float, i32)
184*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.powi.f64(double, i32)
185*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.powi.f128(fp128, i32)
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Workerdefine void @test_powi(float %float, double %double, i32 %exponent, fp128 %fp128) {
188*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_powi:
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker   %powifloat = call float @llvm.powi.f32(float %float, i32 %exponent)
191*9880d681SAndroid Build Coastguard Worker   store float %powifloat, float* @varfloat
192*9880d681SAndroid Build Coastguard Worker; CHECK: bl __powisf2
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker   %powidouble = call double @llvm.powi.f64(double %double, i32 %exponent)
195*9880d681SAndroid Build Coastguard Worker   store double %powidouble, double* @vardouble
196*9880d681SAndroid Build Coastguard Worker; CHECK: bl __powidf2
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Worker   %powifp128 = call fp128 @llvm.powi.f128(fp128 %fp128, i32 %exponent)
199*9880d681SAndroid Build Coastguard Worker   store fp128 %powifp128, fp128* @varfp128
200*9880d681SAndroid Build Coastguard Worker; CHECK: bl __powitf2
201*9880d681SAndroid Build Coastguard Worker  ret void
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerdefine void @test_frem(float %float, double %double, fp128 %fp128) {
206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_frem:
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker  %fremfloat = frem float %float, %float
209*9880d681SAndroid Build Coastguard Worker  store float %fremfloat, float* @varfloat
210*9880d681SAndroid Build Coastguard Worker; CHECK: bl fmodf
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Worker  %fremdouble = frem double %double, %double
213*9880d681SAndroid Build Coastguard Worker  store double %fremdouble, double* @vardouble
214*9880d681SAndroid Build Coastguard Worker; CHECK: bl fmod
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker  %fremfp128 = frem fp128 %fp128, %fp128
217*9880d681SAndroid Build Coastguard Worker  store fp128 %fremfp128, fp128* @varfp128
218*9880d681SAndroid Build Coastguard Worker; CHECK: bl fmodl
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Worker  ret void
221*9880d681SAndroid Build Coastguard Worker}
222*9880d681SAndroid Build Coastguard Worker
223*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.fma.f128(fp128, fp128, fp128)
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Workerdefine void @test_fma(fp128 %fp128) {
226*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fma:
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker  %fmafp128 = call fp128 @llvm.fma.f128(fp128 %fp128, fp128 %fp128, fp128 %fp128)
229*9880d681SAndroid Build Coastguard Worker  store fp128 %fmafp128, fp128* @varfp128
230*9880d681SAndroid Build Coastguard Worker; CHECK: bl fmal
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Worker  ret void
233*9880d681SAndroid Build Coastguard Worker}
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.fmuladd.f128(fp128, fp128, fp128)
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Workerdefine void @test_fmuladd(fp128 %fp128) {
238*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fmuladd:
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker  %fmuladdfp128 = call fp128 @llvm.fmuladd.f128(fp128 %fp128, fp128 %fp128, fp128 %fp128)
241*9880d681SAndroid Build Coastguard Worker  store fp128 %fmuladdfp128, fp128* @varfp128
242*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: bl fmal
243*9880d681SAndroid Build Coastguard Worker; CHECK: bl __multf3
244*9880d681SAndroid Build Coastguard Worker; CHECK: bl __addtf3
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Worker  ret void
247*9880d681SAndroid Build Coastguard Worker}
248