brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.8 KiB · 95a5fa1 Raw
349 lines · plain
1; Test strict 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.experimental.constrained.rint.f32(float, metadata, metadata)7define float @f1(float %f) #0 {8; CHECK-LABEL: f1:9; CHECK: fiebr %f0, 0, %f010; CHECK: br %r1411  %res = call float @llvm.experimental.constrained.rint.f32(12                        float %f,13                        metadata !"round.dynamic",14                        metadata !"fpexcept.strict") #015  ret float %res16}17 18; Test rint for f64.19declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)20define double @f2(double %f) #0 {21; CHECK-LABEL: f2:22; CHECK: fidbr %f0, 0, %f023; CHECK: br %r1424  %res = call double @llvm.experimental.constrained.rint.f64(25                        double %f,26                        metadata !"round.dynamic",27                        metadata !"fpexcept.strict") #028  ret double %res29}30 31; Test rint for f128.32declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata)33define void @f3(ptr %ptr) #0 {34; CHECK-LABEL: f3:35; CHECK: fixbr %f0, 0, %f036; CHECK: br %r1437  %src = load fp128, ptr %ptr38  %res = call fp128 @llvm.experimental.constrained.rint.f128(39                        fp128 %src,40                        metadata !"round.dynamic",41                        metadata !"fpexcept.strict") #042  store fp128 %res, ptr %ptr43  ret void44}45 46; Test nearbyint for f16.47declare half @llvm.experimental.constrained.nearbyint.f16(half, metadata, metadata)48define half @f4_half(half %f) #0 {49; CHECK-LABEL: f4_half:50; CHECK: brasl %r14, __extendhfsf2@PLT51; CHECK: brasl %r14, nearbyintf@PLT52; CHECK: brasl %r14, __truncsfhf2@PLT53; CHECK: br %r1454  %res = call half @llvm.experimental.constrained.nearbyint.f16(55                        half %f,56                        metadata !"round.dynamic",57                        metadata !"fpexcept.strict") #058  ret half %res59}60 61; Test nearbyint for f32.62declare float @llvm.experimental.constrained.nearbyint.f32(float, metadata, metadata)63define float @f4(float %f) #0 {64; CHECK-LABEL: f4:65; CHECK: brasl %r14, nearbyintf@PLT66; CHECK: br %r1467  %res = call float @llvm.experimental.constrained.nearbyint.f32(68                        float %f,69                        metadata !"round.dynamic",70                        metadata !"fpexcept.strict") #071  ret float %res72}73 74; Test nearbyint for f64.75declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)76define double @f5(double %f) #0 {77; CHECK-LABEL: f5:78; CHECK: brasl %r14, nearbyint@PLT79; CHECK: br %r1480  %res = call double @llvm.experimental.constrained.nearbyint.f64(81                        double %f,82                        metadata !"round.dynamic",83                        metadata !"fpexcept.strict") #084  ret double %res85}86 87; Test nearbyint for f128.88declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata)89define void @f6(ptr %ptr) #0 {90; CHECK-LABEL: f6:91; CHECK: brasl %r14, nearbyintl@PLT92; CHECK: br %r1493  %src = load fp128, ptr %ptr94  %res = call fp128 @llvm.experimental.constrained.nearbyint.f128(95                        fp128 %src,96                        metadata !"round.dynamic",97                        metadata !"fpexcept.strict") #098  store fp128 %res, ptr %ptr99  ret void100}101 102; Test floor for f16.103declare half @llvm.experimental.constrained.floor.f16(half, metadata)104define half @f7_half(half %f) #0 {105; CHECK-LABEL: f7_half:106; CHECK: brasl %r14, __extendhfsf2@PLT107; CHECK: brasl %r14, floorf@PLT108; CHECK: brasl %r14, __truncsfhf2@PLT109; CHECK: br %r14110  %res = call half @llvm.experimental.constrained.floor.f16(111                        half %f,112                        metadata !"fpexcept.strict") #0113  ret half %res114}115 116; Test floor for f32.117declare float @llvm.experimental.constrained.floor.f32(float, metadata)118define float @f7(float %f) #0 {119; CHECK-LABEL: f7:120; CHECK: brasl %r14, floorf@PLT121; CHECK: br %r14122  %res = call float @llvm.experimental.constrained.floor.f32(123                        float %f,124                        metadata !"fpexcept.strict") #0125  ret float %res126}127 128; Test floor for f64.129declare double @llvm.experimental.constrained.floor.f64(double, metadata)130define double @f8(double %f) #0 {131; CHECK-LABEL: f8:132; CHECK: brasl %r14, floor@PLT133; CHECK: br %r14134  %res = call double @llvm.experimental.constrained.floor.f64(135                        double %f,136                        metadata !"fpexcept.strict") #0137  ret double %res138}139 140; Test floor for f128.141declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata)142define void @f9(ptr %ptr) #0 {143; CHECK-LABEL: f9:144; CHECK: brasl %r14, floorl@PLT145; CHECK: br %r14146  %src = load fp128, ptr %ptr147  %res = call fp128 @llvm.experimental.constrained.floor.f128(148                        fp128 %src,149                        metadata !"fpexcept.strict") #0150  store fp128 %res, ptr %ptr151  ret void152}153 154; Test ceil for f16.155declare half @llvm.experimental.constrained.ceil.f16(half, metadata)156define half @f10_half(half %f) #0 {157; CHECK-LABEL: f10_half:158; CHECK: brasl %r14, __extendhfsf2@PLT159; CHECK: brasl %r14, ceilf@PLT160; CHECK: brasl %r14, __truncsfhf2@PLT161; CHECK: br %r14162  %res = call half @llvm.experimental.constrained.ceil.f16(163                        half %f,164                        metadata !"fpexcept.strict") #0165  ret half %res166}167 168; Test ceil for f32.169declare float @llvm.experimental.constrained.ceil.f32(float, metadata)170define float @f10(float %f) #0 {171; CHECK-LABEL: f10:172; CHECK: brasl %r14, ceilf@PLT173; CHECK: br %r14174  %res = call float @llvm.experimental.constrained.ceil.f32(175                        float %f,176                        metadata !"fpexcept.strict") #0177  ret float %res178}179 180; Test ceil for f64.181declare double @llvm.experimental.constrained.ceil.f64(double, metadata)182define double @f11(double %f) #0 {183; CHECK-LABEL: f11:184; CHECK: brasl %r14, ceil@PLT185; CHECK: br %r14186  %res = call double @llvm.experimental.constrained.ceil.f64(187                        double %f,188                        metadata !"fpexcept.strict") #0189  ret double %res190}191 192; Test ceil for f128.193declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata)194define void @f12(ptr %ptr) #0 {195; CHECK-LABEL: f12:196; CHECK: brasl %r14, ceill@PLT197; CHECK: br %r14198  %src = load fp128, ptr %ptr199  %res = call fp128 @llvm.experimental.constrained.ceil.f128(200                        fp128 %src,201                        metadata !"fpexcept.strict") #0202  store fp128 %res, ptr %ptr203  ret void204}205 206; Test trunc for f16.207declare half @llvm.experimental.constrained.trunc.f16(half, metadata)208define half @f13_half(half %f) #0 {209; CHECK-LABEL: f13_half:210; CHECK: brasl %r14, __extendhfsf2@PLT211; CHECK: brasl %r14, truncf@PLT212; CHECK: brasl %r14, __truncsfhf2@PLT213; CHECK: br %r14214  %res = call half @llvm.experimental.constrained.trunc.f16(215                        half %f,216                        metadata !"fpexcept.strict") #0217  ret half %res218}219 220; Test trunc for f32.221declare float @llvm.experimental.constrained.trunc.f32(float, metadata)222define float @f13(float %f) #0 {223; CHECK-LABEL: f13:224; CHECK: brasl %r14, truncf@PLT225; CHECK: br %r14226  %res = call float @llvm.experimental.constrained.trunc.f32(227                        float %f,228                        metadata !"fpexcept.strict") #0229  ret float %res230}231 232; Test trunc for f64.233declare double @llvm.experimental.constrained.trunc.f64(double, metadata)234define double @f14(double %f) #0 {235; CHECK-LABEL: f14:236; CHECK: brasl %r14, trunc@PLT237; CHECK: br %r14238  %res = call double @llvm.experimental.constrained.trunc.f64(239                        double %f,240                        metadata !"fpexcept.strict") #0241  ret double %res242}243 244; Test trunc for f128.245declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)246define void @f15(ptr %ptr) #0 {247; CHECK-LABEL: f15:248; CHECK: brasl %r14, truncl@PLT249; CHECK: br %r14250  %src = load fp128, ptr %ptr251  %res = call fp128 @llvm.experimental.constrained.trunc.f128(252                        fp128 %src,253                        metadata !"fpexcept.strict") #0254  store fp128 %res, ptr %ptr255  ret void256}257 258; Test round for f16.259declare half @llvm.experimental.constrained.round.f16(half, metadata)260define half @f16_half(half %f) #0 {261; CHECK-LABEL: f16_half:262; CHECK: brasl %r14, __extendhfsf2@PLT263; CHECK: brasl %r14, roundf@PLT264; CHECK: brasl %r14, __truncsfhf2@PLT265; CHECK: br %r14266  %res = call half @llvm.experimental.constrained.round.f16(267                        half %f,268                        metadata !"fpexcept.strict") #0269  ret half %res270}271 272; Test round for f32.273declare float @llvm.experimental.constrained.round.f32(float, metadata)274define float @f16(float %f) #0 {275; CHECK-LABEL: f16:276; CHECK: brasl %r14, roundf@PLT277; CHECK: br %r14278  %res = call float @llvm.experimental.constrained.round.f32(279                        float %f,280                        metadata !"fpexcept.strict") #0281  ret float %res282}283 284; Test round for f64.285declare double @llvm.experimental.constrained.round.f64(double, metadata)286define double @f17(double %f) #0 {287; CHECK-LABEL: f17:288; CHECK: brasl %r14, round@PLT289; CHECK: br %r14290  %res = call double @llvm.experimental.constrained.round.f64(291                        double %f,292                        metadata !"fpexcept.strict") #0293  ret double %res294}295 296; Test round for f128.297declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)298define void @f18(ptr %ptr) #0 {299; CHECK-LABEL: f18:300; CHECK: brasl %r14, roundl@PLT301; CHECK: br %r14302  %src = load fp128, ptr %ptr303  %res = call fp128 @llvm.experimental.constrained.round.f128(304                        fp128 %src,305                        metadata !"fpexcept.strict") #0306  store fp128 %res, ptr %ptr307  ret void308}309 310; Test roundeven for f32.311declare float @llvm.experimental.constrained.roundeven.f32(float, metadata)312define float @f19(float %f) #0 {313; CHECK-LABEL: f19:314; CHECK: brasl %r14, roundevenf@PLT315; CHECK: br %r14316  %res = call float @llvm.experimental.constrained.roundeven.f32(317                        float %f,318                        metadata !"fpexcept.strict") #0319  ret float %res320}321 322; Test roundeven for f64.323declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)324define double @f20(double %f) #0 {325; CHECK-LABEL: f20:326; CHECK: brasl %r14, roundeven@PLT327; CHECK: br %r14328  %res = call double @llvm.experimental.constrained.roundeven.f64(329                        double %f,330                        metadata !"fpexcept.strict") #0331  ret double %res332}333 334; Test roundeven for f128.335declare fp128 @llvm.experimental.constrained.roundeven.f128(fp128, metadata)336define void @f21(ptr %ptr) #0 {337; CHECK-LABEL: f21:338; CHECK: brasl %r14, roundevenl@PLT339; CHECK: br %r14340  %src = load fp128, ptr %ptr341  %res = call fp128 @llvm.experimental.constrained.roundeven.f128(342                        fp128 %src,343                        metadata !"fpexcept.strict") #0344  store fp128 %res, ptr %ptr345  ret void346}347 348attributes #0 = { strictfp }349