xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/fp-round-01.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test rounding functions for z10.
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Test rint for f32.
6*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.rint.f32(float %f)
7*9880d681SAndroid Build Coastguard Workerdefine float @f1(float %f) {
8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
9*9880d681SAndroid Build Coastguard Worker; CHECK: fiebr %f0, 0, %f0
10*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
11*9880d681SAndroid Build Coastguard Worker  %res = call float @llvm.rint.f32(float %f)
12*9880d681SAndroid Build Coastguard Worker  ret float %res
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; Test rint for f64.
16*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.rint.f64(double %f)
17*9880d681SAndroid Build Coastguard Workerdefine double @f2(double %f) {
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2:
19*9880d681SAndroid Build Coastguard Worker; CHECK: fidbr %f0, 0, %f0
20*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
21*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.rint.f64(double %f)
22*9880d681SAndroid Build Coastguard Worker  ret double %res
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; Test rint for f128.
26*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.rint.f128(fp128 %f)
27*9880d681SAndroid Build Coastguard Workerdefine void @f3(fp128 *%ptr) {
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3:
29*9880d681SAndroid Build Coastguard Worker; CHECK: fixbr %f0, 0, %f0
30*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
31*9880d681SAndroid Build Coastguard Worker  %src = load fp128 , fp128 *%ptr
32*9880d681SAndroid Build Coastguard Worker  %res = call fp128 @llvm.rint.f128(fp128 %src)
33*9880d681SAndroid Build Coastguard Worker  store fp128 %res, fp128 *%ptr
34*9880d681SAndroid Build Coastguard Worker  ret void
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; Test nearbyint for f32.
38*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.nearbyint.f32(float %f)
39*9880d681SAndroid Build Coastguard Workerdefine float @f4(float %f) {
40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4:
41*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, nearbyintf@PLT
42*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
43*9880d681SAndroid Build Coastguard Worker  %res = call float @llvm.nearbyint.f32(float %f)
44*9880d681SAndroid Build Coastguard Worker  ret float %res
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; Test nearbyint for f64.
48*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.nearbyint.f64(double %f)
49*9880d681SAndroid Build Coastguard Workerdefine double @f5(double %f) {
50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5:
51*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, nearbyint@PLT
52*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
53*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.nearbyint.f64(double %f)
54*9880d681SAndroid Build Coastguard Worker  ret double %res
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; Test nearbyint for f128: omitted for now because we cannot handle
58*9880d681SAndroid Build Coastguard Worker; indirect arguments.
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; Test floor for f32.
61*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.floor.f32(float %f)
62*9880d681SAndroid Build Coastguard Workerdefine float @f7(float %f) {
63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
64*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, floorf@PLT
65*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
66*9880d681SAndroid Build Coastguard Worker  %res = call float @llvm.floor.f32(float %f)
67*9880d681SAndroid Build Coastguard Worker  ret float %res
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; Test floor for f64.
71*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.floor.f64(double %f)
72*9880d681SAndroid Build Coastguard Workerdefine double @f8(double %f) {
73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
74*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, floor@PLT
75*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
76*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.floor.f64(double %f)
77*9880d681SAndroid Build Coastguard Worker  ret double %res
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker; Test floor for f128: omitted for now because we cannot handle
81*9880d681SAndroid Build Coastguard Worker; indirect arguments.
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; Test ceil for f32.
84*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.ceil.f32(float %f)
85*9880d681SAndroid Build Coastguard Workerdefine float @f10(float %f) {
86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10:
87*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, ceilf@PLT
88*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
89*9880d681SAndroid Build Coastguard Worker  %res = call float @llvm.ceil.f32(float %f)
90*9880d681SAndroid Build Coastguard Worker  ret float %res
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker; Test ceil for f64.
94*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.ceil.f64(double %f)
95*9880d681SAndroid Build Coastguard Workerdefine double @f11(double %f) {
96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11:
97*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, ceil@PLT
98*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
99*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.ceil.f64(double %f)
100*9880d681SAndroid Build Coastguard Worker  ret double %res
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; Test ceil for f128: omitted for now because we cannot handle
104*9880d681SAndroid Build Coastguard Worker; indirect arguments.
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker; Test trunc for f32.
107*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.trunc.f32(float %f)
108*9880d681SAndroid Build Coastguard Workerdefine float @f13(float %f) {
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13:
110*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, truncf@PLT
111*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
112*9880d681SAndroid Build Coastguard Worker  %res = call float @llvm.trunc.f32(float %f)
113*9880d681SAndroid Build Coastguard Worker  ret float %res
114*9880d681SAndroid Build Coastguard Worker}
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker; Test trunc for f64.
117*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.trunc.f64(double %f)
118*9880d681SAndroid Build Coastguard Workerdefine double @f14(double %f) {
119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14:
120*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, trunc@PLT
121*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
122*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.trunc.f64(double %f)
123*9880d681SAndroid Build Coastguard Worker  ret double %res
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker; Test trunc for f128: omitted for now because we cannot handle
127*9880d681SAndroid Build Coastguard Worker; indirect arguments.
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker; Test round for f32.
130*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.round.f32(float %f)
131*9880d681SAndroid Build Coastguard Workerdefine float @f16(float %f) {
132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16:
133*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, roundf@PLT
134*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
135*9880d681SAndroid Build Coastguard Worker  %res = call float @llvm.round.f32(float %f)
136*9880d681SAndroid Build Coastguard Worker  ret float %res
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; Test round for f64.
140*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.round.f64(double %f)
141*9880d681SAndroid Build Coastguard Workerdefine double @f17(double %f) {
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17:
143*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, round@PLT
144*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
145*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.round.f64(double %f)
146*9880d681SAndroid Build Coastguard Worker  ret double %res
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker; Test round for f128: omitted for now because we cannot handle
150*9880d681SAndroid Build Coastguard Worker; indirect arguments.
151