276 lines · plain
1; Test rounding functions for z10.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s4 5; Test rint for f32.6declare float @llvm.rint.f32(float %f)7define float @f1(float %f) {8; CHECK-LABEL: f1:9; CHECK: fiebr %f0, 0, %f010; CHECK: br %r1411 %res = call float @llvm.rint.f32(float %f)12 ret float %res13}14 15; Test rint for f64.16declare double @llvm.rint.f64(double %f)17define double @f2(double %f) {18; CHECK-LABEL: f2:19; CHECK: fidbr %f0, 0, %f020; CHECK: br %r1421 %res = call double @llvm.rint.f64(double %f)22 ret double %res23}24 25; Test rint for f128.26declare fp128 @llvm.rint.f128(fp128 %f)27define void @f3(ptr %ptr) {28; CHECK-LABEL: f3:29; CHECK: fixbr %f0, 0, %f030; CHECK: br %r1431 %src = load fp128, ptr %ptr32 %res = call fp128 @llvm.rint.f128(fp128 %src)33 store fp128 %res, ptr %ptr34 ret void35}36 37; Test nearbyint for f16.38declare half @llvm.nearbyint.f16(half %f)39define half @f4_half(half %f) {40; CHECK-LABEL: f4_half:41; CHECK: brasl %r14, __extendhfsf2@PLT42; CHECK: brasl %r14, nearbyintf@PLT43; CHECK: brasl %r14, __truncsfhf2@PLT44; CHECK: br %r1445 %res = call half @llvm.nearbyint.f16(half %f)46 ret half %res47}48 49; Test nearbyint for f32.50declare float @llvm.nearbyint.f32(float %f)51define float @f4(float %f) {52; CHECK-LABEL: f4:53; CHECK: brasl %r14, nearbyintf@PLT54; CHECK: br %r1455 %res = call float @llvm.nearbyint.f32(float %f)56 ret float %res57}58 59; Test nearbyint for f64.60declare double @llvm.nearbyint.f64(double %f)61define double @f5(double %f) {62; CHECK-LABEL: f5:63; CHECK: brasl %r14, nearbyint@PLT64; CHECK: br %r1465 %res = call double @llvm.nearbyint.f64(double %f)66 ret double %res67}68 69; Test nearbyint for f128.70declare fp128 @llvm.nearbyint.f128(fp128 %f)71define void @f6(ptr %ptr) {72; CHECK-LABEL: f6:73; CHECK: brasl %r14, nearbyintl@PLT74; CHECK: br %r1475 %src = load fp128, ptr %ptr76 %res = call fp128 @llvm.nearbyint.f128(fp128 %src)77 store fp128 %res, ptr %ptr78 ret void79}80 81; Test floor for f16.82declare half @llvm.floor.f16(half %f)83define half @f7_half(half %f) {84; CHECK-LABEL: f7_half:85; CHECK: brasl %r14, __extendhfsf2@PLT86; CHECK: brasl %r14, floorf@PLT87; CHECK: brasl %r14, __truncsfhf2@PLT88; CHECK: br %r1489 %res = call half @llvm.floor.f16(half %f)90 ret half %res91}92 93; Test floor for f32.94declare float @llvm.floor.f32(float %f)95define float @f7(float %f) {96; CHECK-LABEL: f7:97; CHECK: brasl %r14, floorf@PLT98; CHECK: br %r1499 %res = call float @llvm.floor.f32(float %f)100 ret float %res101}102 103; Test floor for f64.104declare double @llvm.floor.f64(double %f)105define double @f8(double %f) {106; CHECK-LABEL: f8:107; CHECK: brasl %r14, floor@PLT108; CHECK: br %r14109 %res = call double @llvm.floor.f64(double %f)110 ret double %res111}112 113; Test floor for f128.114declare fp128 @llvm.floor.f128(fp128 %f)115define void @f9(ptr %ptr) {116; CHECK-LABEL: f9:117; CHECK: brasl %r14, floorl@PLT118; CHECK: br %r14119 %src = load fp128, ptr %ptr120 %res = call fp128 @llvm.floor.f128(fp128 %src)121 store fp128 %res, ptr %ptr122 ret void123}124 125; Test ceil for f16.126declare half @llvm.ceil.f16(half %f)127define half @f10_half(half %f) {128; CHECK-LABEL: f10_half:129; CHECK: brasl %r14, __extendhfsf2@PLT130; CHECK: brasl %r14, ceilf@PLT131; CHECK: brasl %r14, __truncsfhf2@PLT132; CHECK: br %r14133 %res = call half @llvm.ceil.f16(half %f)134 ret half %res135}136 137; Test ceil for f32.138declare float @llvm.ceil.f32(float %f)139define float @f10(float %f) {140; CHECK-LABEL: f10:141; CHECK: brasl %r14, ceilf@PLT142; CHECK: br %r14143 %res = call float @llvm.ceil.f32(float %f)144 ret float %res145}146 147; Test ceil for f64.148declare double @llvm.ceil.f64(double %f)149define double @f11(double %f) {150; CHECK-LABEL: f11:151; CHECK: brasl %r14, ceil@PLT152; CHECK: br %r14153 %res = call double @llvm.ceil.f64(double %f)154 ret double %res155}156 157; Test ceil for f128.158declare fp128 @llvm.ceil.f128(fp128 %f)159define void @f12(ptr %ptr) {160; CHECK-LABEL: f12:161; CHECK: brasl %r14, ceill@PLT162; CHECK: br %r14163 %src = load fp128, ptr %ptr164 %res = call fp128 @llvm.ceil.f128(fp128 %src)165 store fp128 %res, ptr %ptr166 ret void167}168 169; Test trunc for f32.170declare float @llvm.trunc.f32(float %f)171define float @f13(float %f) {172; CHECK-LABEL: f13:173; CHECK: brasl %r14, truncf@PLT174; CHECK: br %r14175 %res = call float @llvm.trunc.f32(float %f)176 ret float %res177}178 179; Test trunc for f64.180declare double @llvm.trunc.f64(double %f)181define double @f14(double %f) {182; CHECK-LABEL: f14:183; CHECK: brasl %r14, trunc@PLT184; CHECK: br %r14185 %res = call double @llvm.trunc.f64(double %f)186 ret double %res187}188 189; Test trunc for f128.190declare fp128 @llvm.trunc.f128(fp128 %f)191define void @f15(ptr %ptr) {192; CHECK-LABEL: f15:193; CHECK: brasl %r14, truncl@PLT194; CHECK: br %r14195 %src = load fp128, ptr %ptr196 %res = call fp128 @llvm.trunc.f128(fp128 %src)197 store fp128 %res, ptr %ptr198 ret void199}200 201; Test round for f16.202declare half @llvm.round.f16(half %f)203define half @f16_half(half %f) {204; CHECK-LABEL: f16_half:205; CHECK: brasl %r14, __extendhfsf2@PLT206; CHECK: brasl %r14, roundf@PLT207; CHECK: brasl %r14, __truncsfhf2@PLT208; CHECK: br %r14209 %res = call half @llvm.round.f16(half %f)210 ret half %res211}212 213; Test round for f32.214declare float @llvm.round.f32(float %f)215define float @f16(float %f) {216; CHECK-LABEL: f16:217; CHECK: brasl %r14, roundf@PLT218; CHECK: br %r14219 %res = call float @llvm.round.f32(float %f)220 ret float %res221}222 223; Test round for f64.224declare double @llvm.round.f64(double %f)225define double @f17(double %f) {226; CHECK-LABEL: f17:227; CHECK: brasl %r14, round@PLT228; CHECK: br %r14229 %res = call double @llvm.round.f64(double %f)230 ret double %res231}232 233; Test round for f128.234declare fp128 @llvm.round.f128(fp128 %f)235define void @f18(ptr %ptr) {236; CHECK-LABEL: f18:237; CHECK: brasl %r14, roundl@PLT238; CHECK: br %r14239 %src = load fp128, ptr %ptr240 %res = call fp128 @llvm.round.f128(fp128 %src)241 store fp128 %res, ptr %ptr242 ret void243}244 245; Test roundeven for f32.246declare float @llvm.roundeven.f32(float %f)247define float @f19(float %f) {248; CHECK-LABEL: f19:249; CHECK: brasl %r14, roundevenf@PLT250; CHECK: br %r14251 %res = call float @llvm.roundeven.f32(float %f)252 ret float %res253}254 255; Test roundeven for f64.256declare double @llvm.roundeven.f64(double %f)257define double @f20(double %f) {258; CHECK-LABEL: f20:259; CHECK: brasl %r14, roundeven@PLT260; CHECK: br %r14261 %res = call double @llvm.roundeven.f64(double %f)262 ret double %res263}264 265; Test roundeven for f128.266declare fp128 @llvm.roundeven.f128(fp128 %f)267define void @f21(ptr %ptr) {268; CHECK-LABEL: f21:269; CHECK: brasl %r14, roundevenl@PLT270; CHECK: br %r14271 %src = load fp128, ptr %ptr272 %res = call fp128 @llvm.roundeven.f128(fp128 %src)273 store fp128 %res, ptr %ptr274 ret void275}276