1*9880d681SAndroid Build Coastguard Worker; Test rounding functions for z10. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Test rint for f32. 6*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.rint.f32(float %f) 7*9880d681SAndroid Build Coastguard Workerdefine float @f1(float %f) { 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 9*9880d681SAndroid Build Coastguard Worker; CHECK: fiebr %f0, 0, %f0 10*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 11*9880d681SAndroid Build Coastguard Worker %res = call float @llvm.rint.f32(float %f) 12*9880d681SAndroid Build Coastguard Worker ret float %res 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; Test rint for f64. 16*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.rint.f64(double %f) 17*9880d681SAndroid Build Coastguard Workerdefine double @f2(double %f) { 18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 19*9880d681SAndroid Build Coastguard Worker; CHECK: fidbr %f0, 0, %f0 20*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 21*9880d681SAndroid Build Coastguard Worker %res = call double @llvm.rint.f64(double %f) 22*9880d681SAndroid Build Coastguard Worker ret double %res 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; Test rint for f128. 26*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.rint.f128(fp128 %f) 27*9880d681SAndroid Build Coastguard Workerdefine void @f3(fp128 *%ptr) { 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 29*9880d681SAndroid Build Coastguard Worker; CHECK: fixbr %f0, 0, %f0 30*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 31*9880d681SAndroid Build Coastguard Worker %src = load fp128 , fp128 *%ptr 32*9880d681SAndroid Build Coastguard Worker %res = call fp128 @llvm.rint.f128(fp128 %src) 33*9880d681SAndroid Build Coastguard Worker store fp128 %res, fp128 *%ptr 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; Test nearbyint for f32. 38*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.nearbyint.f32(float %f) 39*9880d681SAndroid Build Coastguard Workerdefine float @f4(float %f) { 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 41*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, nearbyintf@PLT 42*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 43*9880d681SAndroid Build Coastguard Worker %res = call float @llvm.nearbyint.f32(float %f) 44*9880d681SAndroid Build Coastguard Worker ret float %res 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker; Test nearbyint for f64. 48*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.nearbyint.f64(double %f) 49*9880d681SAndroid Build Coastguard Workerdefine double @f5(double %f) { 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 51*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, nearbyint@PLT 52*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 53*9880d681SAndroid Build Coastguard Worker %res = call double @llvm.nearbyint.f64(double %f) 54*9880d681SAndroid Build Coastguard Worker ret double %res 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; Test nearbyint for f128: omitted for now because we cannot handle 58*9880d681SAndroid Build Coastguard Worker; indirect arguments. 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; Test floor for f32. 61*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.floor.f32(float %f) 62*9880d681SAndroid Build Coastguard Workerdefine float @f7(float %f) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 64*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, floorf@PLT 65*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 66*9880d681SAndroid Build Coastguard Worker %res = call float @llvm.floor.f32(float %f) 67*9880d681SAndroid Build Coastguard Worker ret float %res 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; Test floor for f64. 71*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.floor.f64(double %f) 72*9880d681SAndroid Build Coastguard Workerdefine double @f8(double %f) { 73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 74*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, floor@PLT 75*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 76*9880d681SAndroid Build Coastguard Worker %res = call double @llvm.floor.f64(double %f) 77*9880d681SAndroid Build Coastguard Worker ret double %res 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker; Test floor for f128: omitted for now because we cannot handle 81*9880d681SAndroid Build Coastguard Worker; indirect arguments. 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker; Test ceil for f32. 84*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.ceil.f32(float %f) 85*9880d681SAndroid Build Coastguard Workerdefine float @f10(float %f) { 86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10: 87*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, ceilf@PLT 88*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 89*9880d681SAndroid Build Coastguard Worker %res = call float @llvm.ceil.f32(float %f) 90*9880d681SAndroid Build Coastguard Worker ret float %res 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker; Test ceil for f64. 94*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.ceil.f64(double %f) 95*9880d681SAndroid Build Coastguard Workerdefine double @f11(double %f) { 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 97*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, ceil@PLT 98*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 99*9880d681SAndroid Build Coastguard Worker %res = call double @llvm.ceil.f64(double %f) 100*9880d681SAndroid Build Coastguard Worker ret double %res 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker; Test ceil for f128: omitted for now because we cannot handle 104*9880d681SAndroid Build Coastguard Worker; indirect arguments. 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Worker; Test trunc for f32. 107*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.trunc.f32(float %f) 108*9880d681SAndroid Build Coastguard Workerdefine float @f13(float %f) { 109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13: 110*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, truncf@PLT 111*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 112*9880d681SAndroid Build Coastguard Worker %res = call float @llvm.trunc.f32(float %f) 113*9880d681SAndroid Build Coastguard Worker ret float %res 114*9880d681SAndroid Build Coastguard Worker} 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Worker; Test trunc for f64. 117*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.trunc.f64(double %f) 118*9880d681SAndroid Build Coastguard Workerdefine double @f14(double %f) { 119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14: 120*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, trunc@PLT 121*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 122*9880d681SAndroid Build Coastguard Worker %res = call double @llvm.trunc.f64(double %f) 123*9880d681SAndroid Build Coastguard Worker ret double %res 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker; Test trunc for f128: omitted for now because we cannot handle 127*9880d681SAndroid Build Coastguard Worker; indirect arguments. 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker; Test round for f32. 130*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.round.f32(float %f) 131*9880d681SAndroid Build Coastguard Workerdefine float @f16(float %f) { 132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16: 133*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, roundf@PLT 134*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 135*9880d681SAndroid Build Coastguard Worker %res = call float @llvm.round.f32(float %f) 136*9880d681SAndroid Build Coastguard Worker ret float %res 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker; Test round for f64. 140*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.round.f64(double %f) 141*9880d681SAndroid Build Coastguard Workerdefine double @f17(double %f) { 142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17: 143*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, round@PLT 144*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 145*9880d681SAndroid Build Coastguard Worker %res = call double @llvm.round.f64(double %f) 146*9880d681SAndroid Build Coastguard Worker ret double %res 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker; Test round for f128: omitted for now because we cannot handle 150*9880d681SAndroid Build Coastguard Worker; indirect arguments. 151