blob: 9a35fe54d32e6bd2e2e8e3eb8a69e30e0d425779 [file] [log] [blame]
Tim Northover00ed9962014-03-29 10:18:08 +00001; RUN: llc -mtriple=arm64-none-linux-gnu -verify-machineinstrs < %s | FileCheck %s
2
3@varfloat = global float 0.0
4@vardouble = global double 0.0
5@varfp128 = global fp128 zeroinitializer
6
7declare float @llvm.cos.f32(float)
8declare double @llvm.cos.f64(double)
9declare fp128 @llvm.cos.f128(fp128)
10
11define void @test_cos(float %float, double %double, fp128 %fp128) {
12; CHECK-LABEL: test_cos:
13
14 %cosfloat = call float @llvm.cos.f32(float %float)
15 store float %cosfloat, float* @varfloat
16; CHECK: bl cosf
17
18 %cosdouble = call double @llvm.cos.f64(double %double)
19 store double %cosdouble, double* @vardouble
20; CHECK: bl cos
21
22 %cosfp128 = call fp128 @llvm.cos.f128(fp128 %fp128)
23 store fp128 %cosfp128, fp128* @varfp128
24; CHECK: bl cosl
25
26 ret void
27}
28
29declare float @llvm.exp.f32(float)
30declare double @llvm.exp.f64(double)
31declare fp128 @llvm.exp.f128(fp128)
32
33define void @test_exp(float %float, double %double, fp128 %fp128) {
34; CHECK-LABEL: test_exp:
35
36 %expfloat = call float @llvm.exp.f32(float %float)
37 store float %expfloat, float* @varfloat
38; CHECK: bl expf
39
40 %expdouble = call double @llvm.exp.f64(double %double)
41 store double %expdouble, double* @vardouble
42; CHECK: bl exp
43
44 %expfp128 = call fp128 @llvm.exp.f128(fp128 %fp128)
45 store fp128 %expfp128, fp128* @varfp128
46; CHECK: bl expl
47
48 ret void
49}
50
51declare float @llvm.exp2.f32(float)
52declare double @llvm.exp2.f64(double)
53declare fp128 @llvm.exp2.f128(fp128)
54
55define void @test_exp2(float %float, double %double, fp128 %fp128) {
56; CHECK-LABEL: test_exp2:
57
58 %exp2float = call float @llvm.exp2.f32(float %float)
59 store float %exp2float, float* @varfloat
60; CHECK: bl exp2f
61
62 %exp2double = call double @llvm.exp2.f64(double %double)
63 store double %exp2double, double* @vardouble
64; CHECK: bl exp2
65
66 %exp2fp128 = call fp128 @llvm.exp2.f128(fp128 %fp128)
67 store fp128 %exp2fp128, fp128* @varfp128
68; CHECK: bl exp2l
69 ret void
70
71}
72
73declare float @llvm.log.f32(float)
74declare double @llvm.log.f64(double)
75declare fp128 @llvm.log.f128(fp128)
76
77define void @test_log(float %float, double %double, fp128 %fp128) {
78; CHECK-LABEL: test_log:
79
80 %logfloat = call float @llvm.log.f32(float %float)
81 store float %logfloat, float* @varfloat
82; CHECK: bl logf
83
84 %logdouble = call double @llvm.log.f64(double %double)
85 store double %logdouble, double* @vardouble
86; CHECK: bl log
87
88 %logfp128 = call fp128 @llvm.log.f128(fp128 %fp128)
89 store fp128 %logfp128, fp128* @varfp128
90; CHECK: bl logl
91
92 ret void
93}
94
95declare float @llvm.log2.f32(float)
96declare double @llvm.log2.f64(double)
97declare fp128 @llvm.log2.f128(fp128)
98
99define void @test_log2(float %float, double %double, fp128 %fp128) {
100; CHECK-LABEL: test_log2:
101
102 %log2float = call float @llvm.log2.f32(float %float)
103 store float %log2float, float* @varfloat
104; CHECK: bl log2f
105
106 %log2double = call double @llvm.log2.f64(double %double)
107 store double %log2double, double* @vardouble
108; CHECK: bl log2
109
110 %log2fp128 = call fp128 @llvm.log2.f128(fp128 %fp128)
111 store fp128 %log2fp128, fp128* @varfp128
112; CHECK: bl log2l
113 ret void
114
115}
116
117declare float @llvm.log10.f32(float)
118declare double @llvm.log10.f64(double)
119declare fp128 @llvm.log10.f128(fp128)
120
121define void @test_log10(float %float, double %double, fp128 %fp128) {
122; CHECK-LABEL: test_log10:
123
124 %log10float = call float @llvm.log10.f32(float %float)
125 store float %log10float, float* @varfloat
126; CHECK: bl log10f
127
128 %log10double = call double @llvm.log10.f64(double %double)
129 store double %log10double, double* @vardouble
130; CHECK: bl log10
131
132 %log10fp128 = call fp128 @llvm.log10.f128(fp128 %fp128)
133 store fp128 %log10fp128, fp128* @varfp128
134; CHECK: bl log10l
135
136 ret void
137}
138
139declare float @llvm.sin.f32(float)
140declare double @llvm.sin.f64(double)
141declare fp128 @llvm.sin.f128(fp128)
142
143define void @test_sin(float %float, double %double, fp128 %fp128) {
144; CHECK-LABEL: test_sin:
145
146 %sinfloat = call float @llvm.sin.f32(float %float)
147 store float %sinfloat, float* @varfloat
148; CHECK: bl sinf
149
150 %sindouble = call double @llvm.sin.f64(double %double)
151 store double %sindouble, double* @vardouble
152; CHECK: bl sin
153
154 %sinfp128 = call fp128 @llvm.sin.f128(fp128 %fp128)
155 store fp128 %sinfp128, fp128* @varfp128
156; CHECK: bl sinl
157 ret void
158
159}
160
161declare float @llvm.pow.f32(float, float)
162declare double @llvm.pow.f64(double, double)
163declare fp128 @llvm.pow.f128(fp128, fp128)
164
165define void @test_pow(float %float, double %double, fp128 %fp128) {
166; CHECK-LABEL: test_pow:
167
168 %powfloat = call float @llvm.pow.f32(float %float, float %float)
169 store float %powfloat, float* @varfloat
170; CHECK: bl powf
171
172 %powdouble = call double @llvm.pow.f64(double %double, double %double)
173 store double %powdouble, double* @vardouble
174; CHECK: bl pow
175
176 %powfp128 = call fp128 @llvm.pow.f128(fp128 %fp128, fp128 %fp128)
177 store fp128 %powfp128, fp128* @varfp128
178; CHECK: bl powl
179
180 ret void
181}
182
183declare float @llvm.powi.f32(float, i32)
184declare double @llvm.powi.f64(double, i32)
185declare fp128 @llvm.powi.f128(fp128, i32)
186
187define void @test_powi(float %float, double %double, i32 %exponent, fp128 %fp128) {
188; CHECK-LABEL: test_powi:
189
190 %powifloat = call float @llvm.powi.f32(float %float, i32 %exponent)
191 store float %powifloat, float* @varfloat
192; CHECK: bl __powisf2
193
194 %powidouble = call double @llvm.powi.f64(double %double, i32 %exponent)
195 store double %powidouble, double* @vardouble
196; CHECK: bl __powidf2
197
198 %powifp128 = call fp128 @llvm.powi.f128(fp128 %fp128, i32 %exponent)
199 store fp128 %powifp128, fp128* @varfp128
200; CHECK: bl __powitf2
201 ret void
202
203}
204
205define void @test_frem(float %float, double %double, fp128 %fp128) {
206; CHECK-LABEL: test_frem:
207
208 %fremfloat = frem float %float, %float
209 store float %fremfloat, float* @varfloat
210; CHECK: bl fmodf
211
212 %fremdouble = frem double %double, %double
213 store double %fremdouble, double* @vardouble
214; CHECK: bl fmod
215
216 %fremfp128 = frem fp128 %fp128, %fp128
217 store fp128 %fremfp128, fp128* @varfp128
218; CHECK: bl fmodl
219
220 ret void
221}
222
223declare fp128 @llvm.fma.f128(fp128, fp128, fp128)
224
225define void @test_fma(fp128 %fp128) {
226; CHECK-LABEL: test_fma:
227
228 %fmafp128 = call fp128 @llvm.fma.f128(fp128 %fp128, fp128 %fp128, fp128 %fp128)
229 store fp128 %fmafp128, fp128* @varfp128
230; CHECK: bl fmal
231
232 ret void
233}
234
235declare fp128 @llvm.fmuladd.f128(fp128, fp128, fp128)
236
237define void @test_fmuladd(fp128 %fp128) {
238; CHECK-LABEL: test_fmuladd:
239
240 %fmuladdfp128 = call fp128 @llvm.fmuladd.f128(fp128 %fp128, fp128 %fp128, fp128 %fp128)
241 store fp128 %fmuladdfp128, fp128* @varfp128
242; CHECK-NOT: bl fmal
243; CHECK: bl __multf3
244; CHECK: bl __addtf3
245
246 ret void
247}
Tim Northover0d80f702014-04-02 14:39:07 +0000248
249define i32 @test_fptosi32(fp128 %a) {
250; CHECK-LABEL: test_fptosi32:
251; CHECK: bl __fixtfsi
252 %conv.i = fptosi fp128 %a to i32
253 %b = add nsw i32 %conv.i, 48
254 ret i32 %b
255}
256
257define i64 @test_fptosi64(fp128 %a) {
258; CHECK-LABEL: test_fptosi64:
259; CHECK: bl __fixtfdi
260 %conv.i = fptosi fp128 %a to i64
261 %b = add nsw i64 %conv.i, 48
262 ret i64 %b
263}
264
265define i128 @test_fptosi128(fp128 %a) {
266; CHECK-LABEL: test_fptosi128:
267; CHECK: bl __fixtfti
268 %conv.i = fptosi fp128 %a to i128
269 %b = add nsw i128 %conv.i, 48
270 ret i128 %b
271}
272
273define i32 @test_fptoui32(fp128 %a) {
274; CHECK-LABEL: test_fptoui32:
275; CHECK: bl __fixunstfsi
276 %conv.i = fptoui fp128 %a to i32
277 %b = add nsw i32 %conv.i, 48
278 ret i32 %b
279}
280
281define i64 @test_fptoui64(fp128 %a) {
282; CHECK-LABEL: test_fptoui64:
283; CHECK: bl __fixunstfdi
284 %conv.i = fptoui fp128 %a to i64
285 %b = add nsw i64 %conv.i, 48
286 ret i64 %b
287}
288
289define i128 @test_fptoui128(fp128 %a) {
290; CHECK-LABEL: test_fptoui128:
291; CHECK: bl __fixunstfti
292 %conv.i = fptoui fp128 %a to i128
293 %b = add nsw i128 %conv.i, 48
294 ret i128 %b
295}