brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 21b354c Raw
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