brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.0 KiB · bdfd9ad Raw
324 lines · plain
1; Test strict rounding functions for z196 and above.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 \4; RUN:   | FileCheck -check-prefix=CHECK -check-prefix=CHECK-SCALAR %s5; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 \6; RUN:   | FileCheck -check-prefix=CHECK -check-prefix=CHECK-VECTOR %s7 8; Test rint for f32.9declare float @llvm.experimental.constrained.rint.f32(float, metadata, metadata)10define float @f1(float %f) #0 {11; CHECK-LABEL: f1:12; CHECK: fiebr %f0, 0, %f013; CHECK: br %r1414  %res = call float @llvm.experimental.constrained.rint.f32(15                        float %f,16                        metadata !"round.dynamic",17                        metadata !"fpexcept.strict") #018  ret float %res19}20 21; Test rint for f64.22declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)23define double @f2(double %f) #0 {24; CHECK-LABEL: f2:25; CHECK-SCALAR: fidbr %f0, 0, %f026; CHECK-VECTOR: fidbra %f0, 0, %f0, 027; CHECK: br %r1428  %res = call double @llvm.experimental.constrained.rint.f64(29                        double %f,30                        metadata !"round.dynamic",31                        metadata !"fpexcept.strict") #032  ret double %res33}34 35; Test rint for f128.36declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata)37define void @f3(ptr %ptr) #0 {38; CHECK-LABEL: f3:39; CHECK: fixbr %f0, 0, %f040; CHECK: br %r1441  %src = load fp128, ptr %ptr42  %res = call fp128 @llvm.experimental.constrained.rint.f128(43                        fp128 %src,44                        metadata !"round.dynamic",45                        metadata !"fpexcept.strict") #046  store fp128 %res, ptr %ptr47  ret void48}49 50; Test nearbyint for f32.51declare float @llvm.experimental.constrained.nearbyint.f32(float, metadata, metadata)52define float @f4(float %f) #0 {53; CHECK-LABEL: f4:54; CHECK: fiebra %f0, 0, %f0, 455; CHECK: br %r1456  %res = call float @llvm.experimental.constrained.nearbyint.f32(57                        float %f,58                        metadata !"round.dynamic",59                        metadata !"fpexcept.strict") #060  ret float %res61}62 63; Test nearbyint for f64.64declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)65define double @f5(double %f) #0 {66; CHECK-LABEL: f5:67; CHECK: fidbra %f0, 0, %f0, 468; CHECK: br %r1469  %res = call double @llvm.experimental.constrained.nearbyint.f64(70                        double %f,71                        metadata !"round.dynamic",72                        metadata !"fpexcept.strict") #073  ret double %res74}75 76; Test nearbyint for f128.77declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata)78define void @f6(ptr %ptr) #0 {79; CHECK-LABEL: f6:80; CHECK: fixbra %f0, 0, %f0, 481; CHECK: br %r1482  %src = load fp128, ptr %ptr83  %res = call fp128 @llvm.experimental.constrained.nearbyint.f128(84                        fp128 %src,85                        metadata !"round.dynamic",86                        metadata !"fpexcept.strict") #087  store fp128 %res, ptr %ptr88  ret void89}90 91; Test floor for f32.92declare float @llvm.experimental.constrained.floor.f32(float, metadata)93define float @f7(float %f) #0 {94; CHECK-LABEL: f7:95; CHECK: fiebra %f0, 7, %f0, 496; CHECK: br %r1497  %res = call float @llvm.experimental.constrained.floor.f32(98                        float %f,99                        metadata !"fpexcept.strict") #0100  ret float %res101}102 103; Test floor for f64.104declare double @llvm.experimental.constrained.floor.f64(double, metadata)105define double @f8(double %f) #0 {106; CHECK-LABEL: f8:107; CHECK: fidbra %f0, 7, %f0, 4108; CHECK: br %r14109  %res = call double @llvm.experimental.constrained.floor.f64(110                        double %f,111                        metadata !"fpexcept.strict") #0112  ret double %res113}114 115; Test floor for f128.116declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata)117define void @f9(ptr %ptr) #0 {118; CHECK-LABEL: f9:119; CHECK: fixbra %f0, 7, %f0, 4120; CHECK: br %r14121  %src = load fp128, ptr %ptr122  %res = call fp128 @llvm.experimental.constrained.floor.f128(123                        fp128 %src,124                        metadata !"fpexcept.strict") #0125  store fp128 %res, ptr %ptr126  ret void127}128 129; Test ceil for f32.130declare float @llvm.experimental.constrained.ceil.f32(float, metadata)131define float @f10(float %f) #0 {132; CHECK-LABEL: f10:133; CHECK: fiebra %f0, 6, %f0, 4134; CHECK: br %r14135  %res = call float @llvm.experimental.constrained.ceil.f32(136                        float %f,137                        metadata !"fpexcept.strict") #0138  ret float %res139}140 141; Test ceil for f64.142declare double @llvm.experimental.constrained.ceil.f64(double, metadata)143define double @f11(double %f) #0 {144; CHECK-LABEL: f11:145; CHECK: fidbra %f0, 6, %f0, 4146; CHECK: br %r14147  %res = call double @llvm.experimental.constrained.ceil.f64(148                        double %f,149                        metadata !"fpexcept.strict") #0150  ret double %res151}152 153; Test ceil for f128.154declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata)155define void @f12(ptr %ptr) #0 {156; CHECK-LABEL: f12:157; CHECK: fixbra %f0, 6, %f0, 4158; CHECK: br %r14159  %src = load fp128, ptr %ptr160  %res = call fp128 @llvm.experimental.constrained.ceil.f128(161                        fp128 %src,162                        metadata !"fpexcept.strict") #0163  store fp128 %res, ptr %ptr164  ret void165}166 167; Test trunc for f16.168declare half @llvm.experimental.constrained.trunc.f16(half, metadata)169define half @f13_half(half %f) #0 {170; CHECK-LABEL: f13_half:171; CHECK: brasl %r14, __extendhfsf2@PLT172; CHECK: fiebra %f0, 5, %f0, 4173; CHECK: brasl %r14, __truncsfhf2@PLT174; CHECK: br %r14175  %res = call half @llvm.experimental.constrained.trunc.f16(176                        half %f,177                        metadata !"fpexcept.strict") #0178  ret half %res179}180 181; Test trunc for f32.182declare float @llvm.experimental.constrained.trunc.f32(float, metadata)183define float @f13(float %f) #0 {184; CHECK-LABEL: f13:185; CHECK: fiebra %f0, 5, %f0, 4186; CHECK: br %r14187  %res = call float @llvm.experimental.constrained.trunc.f32(188                        float %f,189                        metadata !"fpexcept.strict") #0190  ret float %res191}192 193; Test trunc for f64.194declare double @llvm.experimental.constrained.trunc.f64(double, metadata)195define double @f14(double %f) #0 {196; CHECK-LABEL: f14:197; CHECK: fidbra %f0, 5, %f0, 4198; CHECK: br %r14199  %res = call double @llvm.experimental.constrained.trunc.f64(200                        double %f,201                        metadata !"fpexcept.strict") #0202  ret double %res203}204 205; Test trunc for f128.206declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)207define void @f15(ptr %ptr) #0 {208; CHECK-LABEL: f15:209; CHECK: fixbra %f0, 5, %f0, 4210; CHECK: br %r14211  %src = load fp128, ptr %ptr212  %res = call fp128 @llvm.experimental.constrained.trunc.f128(213                        fp128 %src,214                        metadata !"fpexcept.strict") #0215  store fp128 %res, ptr %ptr216  ret void217}218 219; Test round for f16.220declare half @llvm.experimental.constrained.round.f16(half, metadata)221define half @f16_half(half %f) #0 {222; CHECK-LABEL: f16_half:223; CHECK: brasl %r14, __extendhfsf2@PLT224; CHECK: fiebra %f0, 1, %f0, 4225; CHECK: brasl %r14, __truncsfhf2@PLT226; CHECK: br %r14227  %res = call half @llvm.experimental.constrained.round.f16(228                        half %f,229                        metadata !"fpexcept.strict") #0230  ret half %res231}232 233; Test round for f32.234declare float @llvm.experimental.constrained.round.f32(float, metadata)235define float @f16(float %f) #0 {236; CHECK-LABEL: f16:237; CHECK: fiebra %f0, 1, %f0, 4238; CHECK: br %r14239  %res = call float @llvm.experimental.constrained.round.f32(240                        float %f,241                        metadata !"fpexcept.strict") #0242  ret float %res243}244 245; Test round for f64.246declare double @llvm.experimental.constrained.round.f64(double, metadata)247define double @f17(double %f) #0 {248; CHECK-LABEL: f17:249; CHECK: fidbra %f0, 1, %f0, 4250; CHECK: br %r14251  %res = call double @llvm.experimental.constrained.round.f64(252                        double %f,253                        metadata !"fpexcept.strict") #0254  ret double %res255}256 257; Test round for f128.258declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)259define void @f18(ptr %ptr) #0 {260; CHECK-LABEL: f18:261; CHECK: fixbra %f0, 1, %f0, 4262; CHECK: br %r14263  %src = load fp128, ptr %ptr264  %res = call fp128 @llvm.experimental.constrained.round.f128(265                        fp128 %src,266                        metadata !"fpexcept.strict") #0267  store fp128 %res, ptr %ptr268  ret void269}270 271; Test roundeven for f16.272declare half @llvm.experimental.constrained.roundeven.f16(half, metadata)273define half @f19_half(half %f) #0 {274; CHECK-LABEL: f19_half:275; CHECK: brasl %r14, __extendhfsf2@PLT276; CHECK: fiebra %f0, 4, %f0, 4277; CHECK: brasl %r14, __truncsfhf2@PLT278; CHECK: br %r14279  %res = call half @llvm.experimental.constrained.roundeven.f16(280                        half %f,281                        metadata !"fpexcept.strict") #0282  ret half %res283}284 285; Test roundeven for f32.286declare float @llvm.experimental.constrained.roundeven.f32(float, metadata)287define float @f19(float %f) #0 {288; CHECK-LABEL: f19:289; CHECK: fiebra %f0, 4, %f0, 4290; CHECK: br %r14291  %res = call float @llvm.experimental.constrained.roundeven.f32(292                        float %f,293                        metadata !"fpexcept.strict") #0294  ret float %res295}296 297; Test roundeven for f64.298declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)299define double @f20(double %f) #0 {300; CHECK-LABEL: f20:301; CHECK: fidbra %f0, 4, %f0, 4302; CHECK: br %r14303  %res = call double @llvm.experimental.constrained.roundeven.f64(304                        double %f,305                        metadata !"fpexcept.strict") #0306  ret double %res307}308 309; Test roundeven for f128.310declare fp128 @llvm.experimental.constrained.roundeven.f128(fp128, metadata)311define void @f21(ptr %ptr) #0 {312; CHECK-LABEL: f21:313; CHECK: fixbra %f0, 4, %f0, 4314; CHECK: br %r14315  %src = load fp128, ptr %ptr316  %res = call fp128 @llvm.experimental.constrained.roundeven.f128(317                        fp128 %src,318                        metadata !"fpexcept.strict") #0319  store fp128 %res, ptr %ptr320  ret void321}322 323attributes #0 = { strictfp }324