blob: cd14c1932d4712726db2bdec96cd07a1dd45a485 [file] [log] [blame]
Alex Bradbury8f296472018-04-12 05:36:44 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
3; RUN: | FileCheck -check-prefix=RV32IFD %s
4
Alex Bradbury52c27782018-11-02 19:50:38 +00005declare double @llvm.sqrt.f64(double)
6
Alex Bradbury919f5fb2018-12-13 10:49:05 +00007define double @sqrt_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +00008; RV32IFD-LABEL: sqrt_f64:
9; RV32IFD: # %bb.0:
10; RV32IFD-NEXT: addi sp, sp, -16
11; RV32IFD-NEXT: sw a0, 8(sp)
12; RV32IFD-NEXT: sw a1, 12(sp)
13; RV32IFD-NEXT: fld ft0, 8(sp)
14; RV32IFD-NEXT: fsqrt.d ft0, ft0
15; RV32IFD-NEXT: fsd ft0, 8(sp)
16; RV32IFD-NEXT: lw a0, 8(sp)
17; RV32IFD-NEXT: lw a1, 12(sp)
18; RV32IFD-NEXT: addi sp, sp, 16
19; RV32IFD-NEXT: ret
20 %1 = call double @llvm.sqrt.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +000021 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +000022}
23
24declare double @llvm.powi.f64(double, i32)
25
Alex Bradbury919f5fb2018-12-13 10:49:05 +000026define double @powi_f64(double %a, i32 %b) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +000027; RV32IFD-LABEL: powi_f64:
28; RV32IFD: # %bb.0:
29; RV32IFD-NEXT: addi sp, sp, -16
30; RV32IFD-NEXT: sw ra, 12(sp)
31; RV32IFD-NEXT: call __powidf2
32; RV32IFD-NEXT: lw ra, 12(sp)
33; RV32IFD-NEXT: addi sp, sp, 16
34; RV32IFD-NEXT: ret
35 %1 = call double @llvm.powi.f64(double %a, i32 %b)
Alex Bradbury919f5fb2018-12-13 10:49:05 +000036 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +000037}
38
39declare double @llvm.sin.f64(double)
40
Alex Bradbury919f5fb2018-12-13 10:49:05 +000041define double @sin_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +000042; RV32IFD-LABEL: sin_f64:
43; RV32IFD: # %bb.0:
44; RV32IFD-NEXT: addi sp, sp, -16
45; RV32IFD-NEXT: sw ra, 12(sp)
46; RV32IFD-NEXT: call sin
47; RV32IFD-NEXT: lw ra, 12(sp)
48; RV32IFD-NEXT: addi sp, sp, 16
49; RV32IFD-NEXT: ret
50 %1 = call double @llvm.sin.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +000051 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +000052}
53
54declare double @llvm.cos.f64(double)
55
Alex Bradbury919f5fb2018-12-13 10:49:05 +000056define double @cos_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +000057; RV32IFD-LABEL: cos_f64:
58; RV32IFD: # %bb.0:
59; RV32IFD-NEXT: addi sp, sp, -16
60; RV32IFD-NEXT: sw ra, 12(sp)
61; RV32IFD-NEXT: call cos
62; RV32IFD-NEXT: lw ra, 12(sp)
63; RV32IFD-NEXT: addi sp, sp, 16
64; RV32IFD-NEXT: ret
65 %1 = call double @llvm.cos.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +000066 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +000067}
68
69; The sin+cos combination results in an FSINCOS SelectionDAG node.
Alex Bradbury919f5fb2018-12-13 10:49:05 +000070define double @sincos_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +000071; RV32IFD-LABEL: sincos_f64:
72; RV32IFD: # %bb.0:
73; RV32IFD-NEXT: addi sp, sp, -32
74; RV32IFD-NEXT: sw ra, 28(sp)
75; RV32IFD-NEXT: sw s1, 24(sp)
76; RV32IFD-NEXT: sw s2, 20(sp)
77; RV32IFD-NEXT: sw s3, 16(sp)
78; RV32IFD-NEXT: sw s4, 12(sp)
79; RV32IFD-NEXT: mv s2, a1
80; RV32IFD-NEXT: mv s1, a0
81; RV32IFD-NEXT: call sin
82; RV32IFD-NEXT: mv s3, a0
83; RV32IFD-NEXT: mv s4, a1
84; RV32IFD-NEXT: mv a0, s1
85; RV32IFD-NEXT: mv a1, s2
86; RV32IFD-NEXT: call cos
87; RV32IFD-NEXT: sw a0, 0(sp)
88; RV32IFD-NEXT: sw a1, 4(sp)
89; RV32IFD-NEXT: fld ft0, 0(sp)
90; RV32IFD-NEXT: sw s3, 0(sp)
91; RV32IFD-NEXT: sw s4, 4(sp)
92; RV32IFD-NEXT: fld ft1, 0(sp)
93; RV32IFD-NEXT: fadd.d ft0, ft1, ft0
94; RV32IFD-NEXT: fsd ft0, 0(sp)
95; RV32IFD-NEXT: lw a0, 0(sp)
96; RV32IFD-NEXT: lw a1, 4(sp)
97; RV32IFD-NEXT: lw s4, 12(sp)
98; RV32IFD-NEXT: lw s3, 16(sp)
99; RV32IFD-NEXT: lw s2, 20(sp)
100; RV32IFD-NEXT: lw s1, 24(sp)
101; RV32IFD-NEXT: lw ra, 28(sp)
102; RV32IFD-NEXT: addi sp, sp, 32
103; RV32IFD-NEXT: ret
104 %1 = call double @llvm.sin.f64(double %a)
105 %2 = call double @llvm.cos.f64(double %a)
106 %3 = fadd double %1, %2
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000107 ret double %3
Alex Bradbury52c27782018-11-02 19:50:38 +0000108}
109
110declare double @llvm.pow.f64(double, double)
111
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000112define double @pow_f64(double %a, double %b) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000113; RV32IFD-LABEL: pow_f64:
114; RV32IFD: # %bb.0:
115; RV32IFD-NEXT: addi sp, sp, -16
116; RV32IFD-NEXT: sw ra, 12(sp)
117; RV32IFD-NEXT: call pow
118; RV32IFD-NEXT: lw ra, 12(sp)
119; RV32IFD-NEXT: addi sp, sp, 16
120; RV32IFD-NEXT: ret
121 %1 = call double @llvm.pow.f64(double %a, double %b)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000122 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000123}
124
125declare double @llvm.exp.f64(double)
126
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000127define double @exp_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000128; RV32IFD-LABEL: exp_f64:
129; RV32IFD: # %bb.0:
130; RV32IFD-NEXT: addi sp, sp, -16
131; RV32IFD-NEXT: sw ra, 12(sp)
132; RV32IFD-NEXT: call exp
133; RV32IFD-NEXT: lw ra, 12(sp)
134; RV32IFD-NEXT: addi sp, sp, 16
135; RV32IFD-NEXT: ret
136 %1 = call double @llvm.exp.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000137 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000138}
139
140declare double @llvm.exp2.f64(double)
141
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000142define double @exp2_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000143; RV32IFD-LABEL: exp2_f64:
144; RV32IFD: # %bb.0:
145; RV32IFD-NEXT: addi sp, sp, -16
146; RV32IFD-NEXT: sw ra, 12(sp)
147; RV32IFD-NEXT: call exp2
148; RV32IFD-NEXT: lw ra, 12(sp)
149; RV32IFD-NEXT: addi sp, sp, 16
150; RV32IFD-NEXT: ret
151 %1 = call double @llvm.exp2.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000152 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000153}
154
155declare double @llvm.log.f64(double)
156
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000157define double @log_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000158; RV32IFD-LABEL: log_f64:
159; RV32IFD: # %bb.0:
160; RV32IFD-NEXT: addi sp, sp, -16
161; RV32IFD-NEXT: sw ra, 12(sp)
162; RV32IFD-NEXT: call log
163; RV32IFD-NEXT: lw ra, 12(sp)
164; RV32IFD-NEXT: addi sp, sp, 16
165; RV32IFD-NEXT: ret
166 %1 = call double @llvm.log.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000167 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000168}
169
170declare double @llvm.log10.f64(double)
171
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000172define double @log10_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000173; RV32IFD-LABEL: log10_f64:
174; RV32IFD: # %bb.0:
175; RV32IFD-NEXT: addi sp, sp, -16
176; RV32IFD-NEXT: sw ra, 12(sp)
177; RV32IFD-NEXT: call log10
178; RV32IFD-NEXT: lw ra, 12(sp)
179; RV32IFD-NEXT: addi sp, sp, 16
180; RV32IFD-NEXT: ret
181 %1 = call double @llvm.log10.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000182 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000183}
184
185declare double @llvm.log2.f64(double)
186
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000187define double @log2_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000188; RV32IFD-LABEL: log2_f64:
189; RV32IFD: # %bb.0:
190; RV32IFD-NEXT: addi sp, sp, -16
191; RV32IFD-NEXT: sw ra, 12(sp)
192; RV32IFD-NEXT: call log2
193; RV32IFD-NEXT: lw ra, 12(sp)
194; RV32IFD-NEXT: addi sp, sp, 16
195; RV32IFD-NEXT: ret
196 %1 = call double @llvm.log2.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000197 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000198}
199
200declare double @llvm.fma.f64(double, double, double)
201
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000202define double @fma_f64(double %a, double %b, double %c) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000203; RV32IFD-LABEL: fma_f64:
204; RV32IFD: # %bb.0:
205; RV32IFD-NEXT: addi sp, sp, -16
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000206; RV32IFD-NEXT: sw a4, 8(sp)
207; RV32IFD-NEXT: sw a5, 12(sp)
208; RV32IFD-NEXT: fld ft0, 8(sp)
209; RV32IFD-NEXT: sw a2, 8(sp)
210; RV32IFD-NEXT: sw a3, 12(sp)
211; RV32IFD-NEXT: fld ft1, 8(sp)
212; RV32IFD-NEXT: sw a0, 8(sp)
213; RV32IFD-NEXT: sw a1, 12(sp)
214; RV32IFD-NEXT: fld ft2, 8(sp)
215; RV32IFD-NEXT: fmadd.d ft0, ft2, ft1, ft0
216; RV32IFD-NEXT: fsd ft0, 8(sp)
217; RV32IFD-NEXT: lw a0, 8(sp)
218; RV32IFD-NEXT: lw a1, 12(sp)
Alex Bradbury52c27782018-11-02 19:50:38 +0000219; RV32IFD-NEXT: addi sp, sp, 16
220; RV32IFD-NEXT: ret
221 %1 = call double @llvm.fma.f64(double %a, double %b, double %c)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000222 ret double %1
223}
224
225declare double @llvm.fmuladd.f64(double, double, double)
226
227define double @fmuladd_f64(double %a, double %b, double %c) nounwind {
228; Use of fmadd depends on TargetLowering::isFMAFasterthanFMulAndFAdd
229; RV32IFD-LABEL: fmuladd_f64:
230; RV32IFD: # %bb.0:
231; RV32IFD-NEXT: addi sp, sp, -16
232; RV32IFD-NEXT: sw a2, 8(sp)
233; RV32IFD-NEXT: sw a3, 12(sp)
234; RV32IFD-NEXT: fld ft0, 8(sp)
235; RV32IFD-NEXT: sw a0, 8(sp)
236; RV32IFD-NEXT: sw a1, 12(sp)
237; RV32IFD-NEXT: fld ft1, 8(sp)
238; RV32IFD-NEXT: fmul.d ft0, ft1, ft0
239; RV32IFD-NEXT: sw a4, 8(sp)
240; RV32IFD-NEXT: sw a5, 12(sp)
241; RV32IFD-NEXT: fld ft1, 8(sp)
242; RV32IFD-NEXT: fadd.d ft0, ft0, ft1
243; RV32IFD-NEXT: fsd ft0, 8(sp)
244; RV32IFD-NEXT: lw a0, 8(sp)
245; RV32IFD-NEXT: lw a1, 12(sp)
246; RV32IFD-NEXT: addi sp, sp, 16
247; RV32IFD-NEXT: ret
248 %1 = call double @llvm.fmuladd.f64(double %a, double %b, double %c)
249 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000250}
251
252declare double @llvm.fabs.f64(double)
253
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000254define double @fabs_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000255; RV32IFD-LABEL: fabs_f64:
256; RV32IFD: # %bb.0:
257; RV32IFD-NEXT: addi sp, sp, -16
258; RV32IFD-NEXT: sw a0, 8(sp)
259; RV32IFD-NEXT: sw a1, 12(sp)
260; RV32IFD-NEXT: fld ft0, 8(sp)
261; RV32IFD-NEXT: fabs.d ft0, ft0
262; RV32IFD-NEXT: fsd ft0, 8(sp)
263; RV32IFD-NEXT: lw a0, 8(sp)
264; RV32IFD-NEXT: lw a1, 12(sp)
265; RV32IFD-NEXT: addi sp, sp, 16
266; RV32IFD-NEXT: ret
267 %1 = call double @llvm.fabs.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000268 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000269}
270
271declare double @llvm.minnum.f64(double, double)
272
273define double @minnum_f64(double %a, double %b) nounwind {
274; RV32IFD-LABEL: minnum_f64:
275; RV32IFD: # %bb.0:
276; RV32IFD-NEXT: addi sp, sp, -16
277; RV32IFD-NEXT: sw a2, 8(sp)
278; RV32IFD-NEXT: sw a3, 12(sp)
279; RV32IFD-NEXT: fld ft0, 8(sp)
280; RV32IFD-NEXT: sw a0, 8(sp)
281; RV32IFD-NEXT: sw a1, 12(sp)
282; RV32IFD-NEXT: fld ft1, 8(sp)
283; RV32IFD-NEXT: fmin.d ft0, ft1, ft0
284; RV32IFD-NEXT: fsd ft0, 8(sp)
285; RV32IFD-NEXT: lw a0, 8(sp)
286; RV32IFD-NEXT: lw a1, 12(sp)
287; RV32IFD-NEXT: addi sp, sp, 16
288; RV32IFD-NEXT: ret
289 %1 = call double @llvm.minnum.f64(double %a, double %b)
290 ret double %1
291}
292
293declare double @llvm.maxnum.f64(double, double)
294
295define double @maxnum_f64(double %a, double %b) nounwind {
296; RV32IFD-LABEL: maxnum_f64:
297; RV32IFD: # %bb.0:
298; RV32IFD-NEXT: addi sp, sp, -16
299; RV32IFD-NEXT: sw a2, 8(sp)
300; RV32IFD-NEXT: sw a3, 12(sp)
301; RV32IFD-NEXT: fld ft0, 8(sp)
302; RV32IFD-NEXT: sw a0, 8(sp)
303; RV32IFD-NEXT: sw a1, 12(sp)
304; RV32IFD-NEXT: fld ft1, 8(sp)
305; RV32IFD-NEXT: fmax.d ft0, ft1, ft0
306; RV32IFD-NEXT: fsd ft0, 8(sp)
307; RV32IFD-NEXT: lw a0, 8(sp)
308; RV32IFD-NEXT: lw a1, 12(sp)
309; RV32IFD-NEXT: addi sp, sp, 16
310; RV32IFD-NEXT: ret
311 %1 = call double @llvm.maxnum.f64(double %a, double %b)
312 ret double %1
313}
314
315; TODO: FMINNAN and FMAXNAN aren't handled in
316; SelectionDAGLegalize::ExpandNode.
317
318; declare double @llvm.minimum.f64(double, double)
319
320; define double @fminimum_f64(double %a, double %b) nounwind {
321; %1 = call double @llvm.minimum.f64(double %a, double %b)
322; ret double %1
323; }
324
325; declare double @llvm.maximum.f64(double, double)
326
327; define double @fmaximum_f64(double %a, double %b) nounwind {
328; %1 = call double @llvm.maximum.f64(double %a, double %b)
329; ret double %1
330; }
331
332declare double @llvm.copysign.f64(double, double)
333
334define double @copysign_f64(double %a, double %b) nounwind {
335; RV32IFD-LABEL: copysign_f64:
336; RV32IFD: # %bb.0:
337; RV32IFD-NEXT: addi sp, sp, -16
338; RV32IFD-NEXT: sw a2, 8(sp)
339; RV32IFD-NEXT: sw a3, 12(sp)
340; RV32IFD-NEXT: fld ft0, 8(sp)
341; RV32IFD-NEXT: sw a0, 8(sp)
342; RV32IFD-NEXT: sw a1, 12(sp)
343; RV32IFD-NEXT: fld ft1, 8(sp)
344; RV32IFD-NEXT: fsgnj.d ft0, ft1, ft0
345; RV32IFD-NEXT: fsd ft0, 8(sp)
346; RV32IFD-NEXT: lw a0, 8(sp)
347; RV32IFD-NEXT: lw a1, 12(sp)
348; RV32IFD-NEXT: addi sp, sp, 16
349; RV32IFD-NEXT: ret
350 %1 = call double @llvm.copysign.f64(double %a, double %b)
351 ret double %1
352}
353
Alex Bradbury8f296472018-04-12 05:36:44 +0000354declare double @llvm.floor.f64(double)
355
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000356define double @floor_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000357; RV32IFD-LABEL: floor_f64:
Alex Bradbury8f296472018-04-12 05:36:44 +0000358; RV32IFD: # %bb.0:
359; RV32IFD-NEXT: addi sp, sp, -16
360; RV32IFD-NEXT: sw ra, 12(sp)
Shiva Chend58bd8d2018-04-25 14:19:12 +0000361; RV32IFD-NEXT: call floor
Alex Bradbury8f296472018-04-12 05:36:44 +0000362; RV32IFD-NEXT: lw ra, 12(sp)
363; RV32IFD-NEXT: addi sp, sp, 16
364; RV32IFD-NEXT: ret
365 %1 = call double @llvm.floor.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000366 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000367}
368
369declare double @llvm.ceil.f64(double)
370
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000371define double @ceil_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000372; RV32IFD-LABEL: ceil_f64:
373; RV32IFD: # %bb.0:
374; RV32IFD-NEXT: addi sp, sp, -16
375; RV32IFD-NEXT: sw ra, 12(sp)
376; RV32IFD-NEXT: call ceil
377; RV32IFD-NEXT: lw ra, 12(sp)
378; RV32IFD-NEXT: addi sp, sp, 16
379; RV32IFD-NEXT: ret
380 %1 = call double @llvm.ceil.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000381 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000382}
383
384declare double @llvm.trunc.f64(double)
385
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000386define double @trunc_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000387; RV32IFD-LABEL: trunc_f64:
388; RV32IFD: # %bb.0:
389; RV32IFD-NEXT: addi sp, sp, -16
390; RV32IFD-NEXT: sw ra, 12(sp)
391; RV32IFD-NEXT: call trunc
392; RV32IFD-NEXT: lw ra, 12(sp)
393; RV32IFD-NEXT: addi sp, sp, 16
394; RV32IFD-NEXT: ret
395 %1 = call double @llvm.trunc.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000396 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000397}
398
399declare double @llvm.rint.f64(double)
400
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000401define double @rint_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000402; RV32IFD-LABEL: rint_f64:
403; RV32IFD: # %bb.0:
404; RV32IFD-NEXT: addi sp, sp, -16
405; RV32IFD-NEXT: sw ra, 12(sp)
406; RV32IFD-NEXT: call rint
407; RV32IFD-NEXT: lw ra, 12(sp)
408; RV32IFD-NEXT: addi sp, sp, 16
409; RV32IFD-NEXT: ret
410 %1 = call double @llvm.rint.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000411 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000412}
413
414declare double @llvm.nearbyint.f64(double)
415
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000416define double @nearbyint_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000417; RV32IFD-LABEL: nearbyint_f64:
418; RV32IFD: # %bb.0:
419; RV32IFD-NEXT: addi sp, sp, -16
420; RV32IFD-NEXT: sw ra, 12(sp)
421; RV32IFD-NEXT: call nearbyint
422; RV32IFD-NEXT: lw ra, 12(sp)
423; RV32IFD-NEXT: addi sp, sp, 16
424; RV32IFD-NEXT: ret
425 %1 = call double @llvm.nearbyint.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000426 ret double %1
Alex Bradbury52c27782018-11-02 19:50:38 +0000427}
428
429declare double @llvm.round.f64(double)
430
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000431define double @round_f64(double %a) nounwind {
Alex Bradbury52c27782018-11-02 19:50:38 +0000432; RV32IFD-LABEL: round_f64:
433; RV32IFD: # %bb.0:
434; RV32IFD-NEXT: addi sp, sp, -16
435; RV32IFD-NEXT: sw ra, 12(sp)
436; RV32IFD-NEXT: call round
437; RV32IFD-NEXT: lw ra, 12(sp)
438; RV32IFD-NEXT: addi sp, sp, 16
439; RV32IFD-NEXT: ret
440 %1 = call double @llvm.round.f64(double %a)
Alex Bradbury919f5fb2018-12-13 10:49:05 +0000441 ret double %1
Alex Bradbury8f296472018-04-12 05:36:44 +0000442}