brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · e0c0596 Raw
255 lines · plain
1; Test rounding functions for z14 and above.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 -verify-machineinstrs \4; RUN:   | FileCheck %s5 6; Test that an f16 intrinsic can be lowered with promotion to float.7declare half @llvm.rint.f16(half %f)8define half @f0(half %f) {9; CHECK-LABEL: f0:10; CHECK: brasl %r14, __extendhfsf2@PLT11; CHECK: fiebra %f0, 0, %f0, 012; CHECK: brasl %r14, __truncsfhf2@PLT13; CHECK: br %r1414  %res = call half @llvm.rint.f16(half %f)15  ret half %res16}17 18; Test rint for f32.19declare float @llvm.rint.f32(float %f)20define float @f1(float %f) {21; CHECK-LABEL: f1:22; CHECK: fiebra %f0, 0, %f0, 023; CHECK: br %r1424  %res = call float @llvm.rint.f32(float %f)25  ret float %res26}27 28; Test rint for f64.29declare double @llvm.rint.f64(double %f)30define double @f2(double %f) {31; CHECK-LABEL: f2:32; CHECK: fidbra %f0, 0, %f0, 033; CHECK: br %r1434  %res = call double @llvm.rint.f64(double %f)35  ret double %res36}37 38; Test rint for f128.39declare fp128 @llvm.rint.f128(fp128 %f)40define void @f3(ptr %ptr) {41; CHECK-LABEL: f3:42; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)43; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 0, 044; CHECK: vst [[RES]], 0(%r2)45; CHECK: br %r1446  %src = load fp128, ptr %ptr47  %res = call fp128 @llvm.rint.f128(fp128 %src)48  store fp128 %res, ptr %ptr49  ret void50}51 52; Test nearbyint for f32.53declare float @llvm.nearbyint.f32(float %f)54define float @f4(float %f) {55; CHECK-LABEL: f4:56; CHECK: fiebra %f0, 0, %f0, 457; CHECK: br %r1458  %res = call float @llvm.nearbyint.f32(float %f)59  ret float %res60}61 62; Test nearbyint for f64.63declare double @llvm.nearbyint.f64(double %f)64define double @f5(double %f) {65; CHECK-LABEL: f5:66; CHECK: fidbra %f0, 0, %f0, 467; CHECK: br %r1468  %res = call double @llvm.nearbyint.f64(double %f)69  ret double %res70}71 72; Test nearbyint for f128.73declare fp128 @llvm.nearbyint.f128(fp128 %f)74define void @f6(ptr %ptr) {75; CHECK-LABEL: f6:76; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)77; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 078; CHECK: vst [[RES]], 0(%r2)79; CHECK: br %r1480  %src = load fp128, ptr %ptr81  %res = call fp128 @llvm.nearbyint.f128(fp128 %src)82  store fp128 %res, ptr %ptr83  ret void84}85 86; Test floor for f32.87declare float @llvm.floor.f32(float %f)88define float @f7(float %f) {89; CHECK-LABEL: f7:90; CHECK: fiebra %f0, 7, %f0, 491; CHECK: br %r1492  %res = call float @llvm.floor.f32(float %f)93  ret float %res94}95 96; Test floor for f64.97declare double @llvm.floor.f64(double %f)98define double @f8(double %f) {99; CHECK-LABEL: f8:100; CHECK: fidbra %f0, 7, %f0, 4101; CHECK: br %r14102  %res = call double @llvm.floor.f64(double %f)103  ret double %res104}105 106; Test floor for f128.107declare fp128 @llvm.floor.f128(fp128 %f)108define void @f9(ptr %ptr) {109; CHECK-LABEL: f9:110; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)111; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 7112; CHECK: vst [[RES]], 0(%r2)113; CHECK: br %r14114  %src = load fp128, ptr %ptr115  %res = call fp128 @llvm.floor.f128(fp128 %src)116  store fp128 %res, ptr %ptr117  ret void118}119 120; Test ceil for f32.121declare float @llvm.ceil.f32(float %f)122define float @f10(float %f) {123; CHECK-LABEL: f10:124; CHECK: fiebra %f0, 6, %f0, 4125; CHECK: br %r14126  %res = call float @llvm.ceil.f32(float %f)127  ret float %res128}129 130; Test ceil for f64.131declare double @llvm.ceil.f64(double %f)132define double @f11(double %f) {133; CHECK-LABEL: f11:134; CHECK: fidbra %f0, 6, %f0, 4135; CHECK: br %r14136  %res = call double @llvm.ceil.f64(double %f)137  ret double %res138}139 140; Test ceil for f128.141declare fp128 @llvm.ceil.f128(fp128 %f)142define void @f12(ptr %ptr) {143; CHECK-LABEL: f12:144; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)145; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 6146; CHECK: vst [[RES]], 0(%r2)147; CHECK: br %r14148  %src = load fp128, ptr %ptr149  %res = call fp128 @llvm.ceil.f128(fp128 %src)150  store fp128 %res, ptr %ptr151  ret void152}153 154; Test trunc for f32.155declare float @llvm.trunc.f32(float %f)156define float @f13(float %f) {157; CHECK-LABEL: f13:158; CHECK: fiebra %f0, 5, %f0, 4159; CHECK: br %r14160  %res = call float @llvm.trunc.f32(float %f)161  ret float %res162}163 164; Test trunc for f64.165declare double @llvm.trunc.f64(double %f)166define double @f14(double %f) {167; CHECK-LABEL: f14:168; CHECK: fidbra %f0, 5, %f0, 4169; CHECK: br %r14170  %res = call double @llvm.trunc.f64(double %f)171  ret double %res172}173 174; Test trunc for f128.175declare fp128 @llvm.trunc.f128(fp128 %f)176define void @f15(ptr %ptr) {177; CHECK-LABEL: f15:178; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)179; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 5180; CHECK: vst [[RES]], 0(%r2)181; CHECK: br %r14182  %src = load fp128, ptr %ptr183  %res = call fp128 @llvm.trunc.f128(fp128 %src)184  store fp128 %res, ptr %ptr185  ret void186}187 188; Test round for f32.189declare float @llvm.round.f32(float %f)190define float @f16(float %f) {191; CHECK-LABEL: f16:192; CHECK: fiebra %f0, 1, %f0, 4193; CHECK: br %r14194  %res = call float @llvm.round.f32(float %f)195  ret float %res196}197 198; Test round for f64.199declare double @llvm.round.f64(double %f)200define double @f17(double %f) {201; CHECK-LABEL: f17:202; CHECK: fidbra %f0, 1, %f0, 4203; CHECK: br %r14204  %res = call double @llvm.round.f64(double %f)205  ret double %res206}207 208; Test round for f128.209declare fp128 @llvm.round.f128(fp128 %f)210define void @f18(ptr %ptr) {211; CHECK-LABEL: f18:212; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)213; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 1214; CHECK: vst [[RES]], 0(%r2)215; CHECK: br %r14216  %src = load fp128, ptr %ptr217  %res = call fp128 @llvm.round.f128(fp128 %src)218  store fp128 %res, ptr %ptr219  ret void220}221 222; Test roundeven for f32.223declare float @llvm.roundeven.f32(float %f)224define float @f19(float %f) {225; CHECK-LABEL: f19:226; CHECK: fiebra %f0, 4, %f0, 4227; CHECK: br %r14228  %res = call float @llvm.roundeven.f32(float %f)229  ret float %res230}231 232; Test roundeven for f64.233declare double @llvm.roundeven.f64(double %f)234define double @f20(double %f) {235; CHECK-LABEL: f20:236; CHECK: fidbra %f0, 4, %f0, 4237; CHECK: br %r14238  %res = call double @llvm.roundeven.f64(double %f)239  ret double %res240}241 242; Test roundeven for f128.243declare fp128 @llvm.roundeven.f128(fp128 %f)244define void @f21(ptr %ptr) {245; CHECK-LABEL: f21:246; CHECK: vl [[REG:%v[0-9]+]], 0(%r2)247; CHECK: wfixb [[RES:%v[0-9]+]], [[REG]], 4, 4248; CHECK: vst [[RES]], 0(%r2)249; CHECK: br %r14250  %src = load fp128, ptr %ptr251  %res = call fp128 @llvm.roundeven.f128(fp128 %src)252  store fp128 %res, ptr %ptr253  ret void254}255