brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · 5d9ee28 Raw
307 lines · plain
1; Test strict rounding functions for z14 and above.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s4 5; Test rint for f16.6declare half @llvm.experimental.constrained.rint.f16(half, metadata, metadata)7define half @f0(half %f) #0 {8; CHECK-LABEL: f0:9; CHECK: brasl %r14, __extendhfsf2@PLT10; CHECK: fiebra %f0, 0, %f0, 011; CHECK: brasl %r14, __truncsfhf2@PLT12; CHECK: br %r1413  %res = call half @llvm.experimental.constrained.rint.f16(14                        half %f,15                        metadata !"round.dynamic",16                        metadata !"fpexcept.strict") #017  ret half %res18}19 20; Test rint for f32.21declare float @llvm.experimental.constrained.rint.f32(float, metadata, metadata)22define float @f1(float %f) #0 {23; CHECK-LABEL: f1:24; CHECK: fiebra %f0, 0, %f0, 025; CHECK: br %r1426  %res = call float @llvm.experimental.constrained.rint.f32(27                        float %f,28                        metadata !"round.dynamic",29                        metadata !"fpexcept.strict") #030  ret float %res31}32 33; Test rint for f64.34declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)35define double @f2(double %f) #0 {36; CHECK-LABEL: f2:37; CHECK: fidbra %f0, 0, %f0, 038; CHECK: br %r1439  %res = call double @llvm.experimental.constrained.rint.f64(40                        double %f,41                        metadata !"round.dynamic",42                        metadata !"fpexcept.strict") #043  ret double %res44}45 46; Test rint for f128.47declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata)48define void @f3(ptr %ptr) #0 {49; CHECK-LABEL: f3:50; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)51; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 0, 052; CHECK: vst [[RES]], 0(%r2)53; CHECK: br %r1454  %src = load fp128, ptr %ptr55  %res = call fp128 @llvm.experimental.constrained.rint.f128(56                        fp128 %src,57                        metadata !"round.dynamic",58                        metadata !"fpexcept.strict") #059  store fp128 %res, ptr %ptr60  ret void61}62 63; Test nearbyint for f32.64declare float @llvm.experimental.constrained.nearbyint.f32(float, metadata, metadata)65define float @f4(float %f) #0 {66; CHECK-LABEL: f4:67; CHECK: fiebra %f0, 0, %f0, 468; CHECK: br %r1469  %res = call float @llvm.experimental.constrained.nearbyint.f32(70                        float %f,71                        metadata !"round.dynamic",72                        metadata !"fpexcept.strict") #073  ret float %res74}75 76; Test nearbyint for f64.77declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)78define double @f5(double %f) #0 {79; CHECK-LABEL: f5:80; CHECK: fidbra %f0, 0, %f0, 481; CHECK: br %r1482  %res = call double @llvm.experimental.constrained.nearbyint.f64(83                        double %f,84                        metadata !"round.dynamic",85                        metadata !"fpexcept.strict") #086  ret double %res87}88 89; Test nearbyint for f128.90declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata)91define void @f6(ptr %ptr) #0 {92; CHECK-LABEL: f6:93; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)94; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 095; CHECK: vst [[RES]], 0(%r2)96; CHECK: br %r1497  %src = load fp128, ptr %ptr98  %res = call fp128 @llvm.experimental.constrained.nearbyint.f128(99                        fp128 %src,100                        metadata !"round.dynamic",101                        metadata !"fpexcept.strict") #0102  store fp128 %res, ptr %ptr103  ret void104}105 106; Test floor for f32.107declare float @llvm.experimental.constrained.floor.f32(float, metadata)108define float @f7(float %f) #0 {109; CHECK-LABEL: f7:110; CHECK: fiebra %f0, 7, %f0, 4111; CHECK: br %r14112  %res = call float @llvm.experimental.constrained.floor.f32(113                        float %f,114                        metadata !"fpexcept.strict") #0115  ret float %res116}117 118; Test floor for f64.119declare double @llvm.experimental.constrained.floor.f64(double, metadata)120define double @f8(double %f) #0 {121; CHECK-LABEL: f8:122; CHECK: fidbra %f0, 7, %f0, 4123; CHECK: br %r14124  %res = call double @llvm.experimental.constrained.floor.f64(125                        double %f,126                        metadata !"fpexcept.strict") #0127  ret double %res128}129 130; Test floor for f128.131declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata)132define void @f9(ptr %ptr) #0 {133; CHECK-LABEL: f9:134; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)135; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 7136; CHECK: vst [[RES]], 0(%r2)137; CHECK: br %r14138  %src = load fp128, ptr %ptr139  %res = call fp128 @llvm.experimental.constrained.floor.f128(140                        fp128 %src,141                        metadata !"fpexcept.strict") #0142  store fp128 %res, ptr %ptr143  ret void144}145 146; Test ceil for f32.147declare float @llvm.experimental.constrained.ceil.f32(float, metadata)148define float @f10(float %f) #0 {149; CHECK-LABEL: f10:150; CHECK: fiebra %f0, 6, %f0, 4151; CHECK: br %r14152  %res = call float @llvm.experimental.constrained.ceil.f32(153                        float %f,154                        metadata !"fpexcept.strict") #0155  ret float %res156}157 158; Test ceil for f64.159declare double @llvm.experimental.constrained.ceil.f64(double, metadata)160define double @f11(double %f) #0 {161; CHECK-LABEL: f11:162; CHECK: fidbra %f0, 6, %f0, 4163; CHECK: br %r14164  %res = call double @llvm.experimental.constrained.ceil.f64(165                        double %f,166                        metadata !"fpexcept.strict") #0167  ret double %res168}169 170; Test ceil for f128.171declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata)172define void @f12(ptr %ptr) #0 {173; CHECK-LABEL: f12:174; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)175; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 6176; CHECK: vst [[RES]], 0(%r2)177; CHECK: br %r14178  %src = load fp128, ptr %ptr179  %res = call fp128 @llvm.experimental.constrained.ceil.f128(180                        fp128 %src,181                        metadata !"fpexcept.strict") #0182  store fp128 %res, ptr %ptr183  ret void184}185 186; Test trunc for f32.187declare float @llvm.experimental.constrained.trunc.f32(float, metadata)188define float @f13(float %f) #0 {189; CHECK-LABEL: f13:190; CHECK: fiebra %f0, 5, %f0, 4191; CHECK: br %r14192  %res = call float @llvm.experimental.constrained.trunc.f32(193                        float %f,194                        metadata !"fpexcept.strict") #0195  ret float %res196}197 198; Test trunc for f64.199declare double @llvm.experimental.constrained.trunc.f64(double, metadata)200define double @f14(double %f) #0 {201; CHECK-LABEL: f14:202; CHECK: fidbra %f0, 5, %f0, 4203; CHECK: br %r14204  %res = call double @llvm.experimental.constrained.trunc.f64(205                        double %f,206                        metadata !"fpexcept.strict") #0207  ret double %res208}209 210; Test trunc for f128.211declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)212define void @f15(ptr %ptr) #0 {213; CHECK-LABEL: f15:214; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)215; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 5216; CHECK: vst [[RES]], 0(%r2)217; CHECK: br %r14218  %src = load fp128, ptr %ptr219  %res = call fp128 @llvm.experimental.constrained.trunc.f128(220                        fp128 %src,221                        metadata !"fpexcept.strict") #0222  store fp128 %res, ptr %ptr223  ret void224}225 226; Test round for f32.227declare float @llvm.experimental.constrained.round.f32(float, metadata)228define float @f16(float %f) #0 {229; CHECK-LABEL: f16:230; CHECK: fiebra %f0, 1, %f0, 4231; CHECK: br %r14232  %res = call float @llvm.experimental.constrained.round.f32(233                        float %f,234                        metadata !"fpexcept.strict") #0235  ret float %res236}237 238; Test round for f64.239declare double @llvm.experimental.constrained.round.f64(double, metadata)240define double @f17(double %f) #0 {241; CHECK-LABEL: f17:242; CHECK: fidbra %f0, 1, %f0, 4243; CHECK: br %r14244  %res = call double @llvm.experimental.constrained.round.f64(245                        double %f,246                        metadata !"fpexcept.strict") #0247  ret double %res248}249 250; Test round for f128.251declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)252define void @f18(ptr %ptr) #0 {253; CHECK-LABEL: f18:254; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)255; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 1256; CHECK: vst [[RES]], 0(%r2)257; CHECK: br %r14258  %src = load fp128, ptr %ptr259  %res = call fp128 @llvm.experimental.constrained.round.f128(260                        fp128 %src,261                        metadata !"fpexcept.strict") #0262  store fp128 %res, ptr %ptr263  ret void264}265 266; Test roundeven for f32.267declare float @llvm.experimental.constrained.roundeven.f32(float, metadata)268define float @f19(float %f) #0 {269; CHECK-LABEL: f19:270; CHECK: fiebra %f0, 4, %f0, 4271; CHECK: br %r14272  %res = call float @llvm.experimental.constrained.roundeven.f32(273                        float %f,274                        metadata !"fpexcept.strict") #0275  ret float %res276}277 278; Test roundeven for f64.279declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)280define double @f20(double %f) #0 {281; CHECK-LABEL: f20:282; CHECK: fidbra %f0, 4, %f0, 4283; CHECK: br %r14284  %res = call double @llvm.experimental.constrained.roundeven.f64(285                        double %f,286                        metadata !"fpexcept.strict") #0287  ret double %res288}289 290; Test roundeven for f128.291declare fp128 @llvm.experimental.constrained.roundeven.f128(fp128, metadata)292define void @f21(ptr %ptr) #0 {293; CHECK-LABEL: f21:294; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)295; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 4296; CHECK: vst [[RES]], 0(%r2)297; CHECK: br %r14298  %src = load fp128, ptr %ptr299  %res = call fp128 @llvm.experimental.constrained.roundeven.f128(300                        fp128 %src,301                        metadata !"fpexcept.strict") #0302  store fp128 %res, ptr %ptr303  ret void304}305 306attributes #0 = { strictfp }307