brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · f1a0a28 Raw
268 lines · plain
1; Test 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.rint.f32(float %f)10define float @f1(float %f) {11; CHECK-LABEL: f1:12; CHECK: fiebr %f0, 0, %f013; CHECK: br %r1414  %res = call float @llvm.rint.f32(float %f)15  ret float %res16}17 18; Test rint for f64.19declare double @llvm.rint.f64(double %f)20define double @f2(double %f) {21; CHECK-LABEL: f2:22; CHECK-SCALAR: fidbr %f0, 0, %f023; CHECK-VECTOR: fidbra %f0, 0, %f0, 024; CHECK: br %r1425  %res = call double @llvm.rint.f64(double %f)26  ret double %res27}28 29; Test rint for f128.30declare fp128 @llvm.rint.f128(fp128 %f)31define void @f3(ptr %ptr) {32; CHECK-LABEL: f3:33; CHECK: fixbr %f0, 0, %f034; CHECK: br %r1435  %src = load fp128, ptr %ptr36  %res = call fp128 @llvm.rint.f128(fp128 %src)37  store fp128 %res, ptr %ptr38  ret void39}40 41; Test nearbyint for f32.42declare float @llvm.nearbyint.f32(float %f)43define float @f4(float %f) {44; CHECK-LABEL: f4:45; CHECK: fiebra %f0, 0, %f0, 446; CHECK: br %r1447  %res = call float @llvm.nearbyint.f32(float %f)48  ret float %res49}50 51; Test nearbyint for f64.52declare double @llvm.nearbyint.f64(double %f)53define double @f5(double %f) {54; CHECK-LABEL: f5:55; CHECK: fidbra %f0, 0, %f0, 456; CHECK: br %r1457  %res = call double @llvm.nearbyint.f64(double %f)58  ret double %res59}60 61; Test nearbyint for f128.62declare fp128 @llvm.nearbyint.f128(fp128 %f)63define void @f6(ptr %ptr) {64; CHECK-LABEL: f6:65; CHECK: fixbra %f0, 0, %f0, 466; CHECK: br %r1467  %src = load fp128, ptr %ptr68  %res = call fp128 @llvm.nearbyint.f128(fp128 %src)69  store fp128 %res, ptr %ptr70  ret void71}72 73; Test floor for f32.74declare float @llvm.floor.f32(float %f)75define float @f7(float %f) {76; CHECK-LABEL: f7:77; CHECK: fiebra %f0, 7, %f0, 478; CHECK: br %r1479  %res = call float @llvm.floor.f32(float %f)80  ret float %res81}82 83; Test floor for f64.84declare double @llvm.floor.f64(double %f)85define double @f8(double %f) {86; CHECK-LABEL: f8:87; CHECK: fidbra %f0, 7, %f0, 488; CHECK: br %r1489  %res = call double @llvm.floor.f64(double %f)90  ret double %res91}92 93; Test floor for f128.94declare fp128 @llvm.floor.f128(fp128 %f)95define void @f9(ptr %ptr) {96; CHECK-LABEL: f9:97; CHECK: fixbra %f0, 7, %f0, 498; CHECK: br %r1499  %src = load fp128, ptr %ptr100  %res = call fp128 @llvm.floor.f128(fp128 %src)101  store fp128 %res, ptr %ptr102  ret void103}104 105; Test ceil for f32.106declare float @llvm.ceil.f32(float %f)107define float @f10(float %f) {108; CHECK-LABEL: f10:109; CHECK: fiebra %f0, 6, %f0, 4110; CHECK: br %r14111  %res = call float @llvm.ceil.f32(float %f)112  ret float %res113}114 115; Test ceil for f64.116declare double @llvm.ceil.f64(double %f)117define double @f11(double %f) {118; CHECK-LABEL: f11:119; CHECK: fidbra %f0, 6, %f0, 4120; CHECK: br %r14121  %res = call double @llvm.ceil.f64(double %f)122  ret double %res123}124 125; Test ceil for f128.126declare fp128 @llvm.ceil.f128(fp128 %f)127define void @f12(ptr %ptr) {128; CHECK-LABEL: f12:129; CHECK: fixbra %f0, 6, %f0, 4130; CHECK: br %r14131  %src = load fp128, ptr %ptr132  %res = call fp128 @llvm.ceil.f128(fp128 %src)133  store fp128 %res, ptr %ptr134  ret void135}136 137; Test trunc for f16.138declare half @llvm.trunc.f16(half %f)139define half @f13_half(half %f) {140; CHECK-LABEL: f13_half:141; CHECK: brasl %r14, __extendhfsf2@PLT142; CHECK: fiebra %f0, 5, %f0, 4143; CHECK: brasl %r14, __truncsfhf2@PLT144; CHECK: br %r14145  %res = call half @llvm.trunc.f16(half %f)146  ret half %res147}148 149; Test trunc for f32.150declare float @llvm.trunc.f32(float %f)151define float @f13(float %f) {152; CHECK-LABEL: f13:153; CHECK: fiebra %f0, 5, %f0, 4154; CHECK: br %r14155  %res = call float @llvm.trunc.f32(float %f)156  ret float %res157}158 159; Test trunc for f64.160declare double @llvm.trunc.f64(double %f)161define double @f14(double %f) {162; CHECK-LABEL: f14:163; CHECK: fidbra %f0, 5, %f0, 4164; CHECK: br %r14165  %res = call double @llvm.trunc.f64(double %f)166  ret double %res167}168 169; Test trunc for f128.170declare fp128 @llvm.trunc.f128(fp128 %f)171define void @f15(ptr %ptr) {172; CHECK-LABEL: f15:173; CHECK: fixbra %f0, 5, %f0, 4174; CHECK: br %r14175  %src = load fp128, ptr %ptr176  %res = call fp128 @llvm.trunc.f128(fp128 %src)177  store fp128 %res, ptr %ptr178  ret void179}180 181; Test round for f16.182declare half @llvm.round.f16(half %f)183define half @f16_half(half %f) {184; CHECK-LABEL: f16_half:185; CHECK: brasl %r14, __extendhfsf2@PLT186; CHECK: fiebra %f0, 1, %f0, 4187; CHECK: brasl %r14, __truncsfhf2@PLT188; CHECK: br %r14189  %res = call half @llvm.round.f16(half %f)190  ret half %res191}192 193; Test round for f32.194declare float @llvm.round.f32(float %f)195define float @f16(float %f) {196; CHECK-LABEL: f16:197; CHECK: fiebra %f0, 1, %f0, 4198; CHECK: br %r14199  %res = call float @llvm.round.f32(float %f)200  ret float %res201}202 203; Test round for f64.204declare double @llvm.round.f64(double %f)205define double @f17(double %f) {206; CHECK-LABEL: f17:207; CHECK: fidbra %f0, 1, %f0, 4208; CHECK: br %r14209  %res = call double @llvm.round.f64(double %f)210  ret double %res211}212 213; Test round for f128.214declare fp128 @llvm.round.f128(fp128 %f)215define void @f18(ptr %ptr) {216; CHECK-LABEL: f18:217; CHECK: fixbra %f0, 1, %f0, 4218; CHECK: br %r14219  %src = load fp128, ptr %ptr220  %res = call fp128 @llvm.round.f128(fp128 %src)221  store fp128 %res, ptr %ptr222  ret void223}224 225; Test roundeven for f16.226declare half @llvm.roundeven.f16(half %f)227define half @f19_half(half %f) {228; CHECK-LABEL: f19_half:229; CHECK: brasl %r14, __extendhfsf2@PLT230; CHECK: fiebra %f0, 4, %f0, 4231; CHECK: brasl %r14, __truncsfhf2@PLT232; CHECK: br %r14233  %res = call half @llvm.roundeven.f16(half %f)234  ret half %res235}236 237; Test roundeven for f32.238declare float @llvm.roundeven.f32(float %f)239define float @f19(float %f) {240; CHECK-LABEL: f19:241; CHECK: fiebra %f0, 4, %f0, 4242; CHECK: br %r14243  %res = call float @llvm.roundeven.f32(float %f)244  ret float %res245}246 247; Test roundeven for f64.248declare double @llvm.roundeven.f64(double %f)249define double @f20(double %f) {250; CHECK-LABEL: f20:251; CHECK: fidbra %f0, 4, %f0, 4252; CHECK: br %r14253  %res = call double @llvm.roundeven.f64(double %f)254  ret double %res255}256 257; Test roundeven for f128.258declare fp128 @llvm.roundeven.f128(fp128 %f)259define void @f21(ptr %ptr) {260; CHECK-LABEL: f21:261; CHECK: fixbra %f0, 4, %f0, 4262; CHECK: br %r14263  %src = load fp128, ptr %ptr264  %res = call fp128 @llvm.roundeven.f128(fp128 %src)265  store fp128 %res, ptr %ptr266  ret void267}268