1*9880d681SAndroid Build Coastguard Worker; Test 32-bit floating-point comparison. The tests assume a z10 implementation 2*9880d681SAndroid Build Coastguard Worker; of select, using conditional branches rather than LOCGR. 3*9880d681SAndroid Build Coastguard Worker; 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdeclare float @foo() 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; Check comparison with registers. 9*9880d681SAndroid Build Coastguard Workerdefine i64 @f1(i64 %a, i64 %b, float %f1, float %f2) { 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 11*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ber %r14 13*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 14*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 15*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq float %f1, %f2 16*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 17*9880d681SAndroid Build Coastguard Worker ret i64 %res 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; Check the low end of the CEB range. 21*9880d681SAndroid Build Coastguard Workerdefine i64 @f2(i64 %a, i64 %b, float %f1, float *%ptr) { 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 23*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ber %r14 25*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 26*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 27*9880d681SAndroid Build Coastguard Worker %f2 = load float , float *%ptr 28*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq float %f1, %f2 29*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 30*9880d681SAndroid Build Coastguard Worker ret i64 %res 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; Check the high end of the aligned CEB range. 34*9880d681SAndroid Build Coastguard Workerdefine i64 @f3(i64 %a, i64 %b, float %f1, float *%base) { 35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 36*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 4092(%r4) 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ber %r14 38*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 39*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 40*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr float, float *%base, i64 1023 41*9880d681SAndroid Build Coastguard Worker %f2 = load float , float *%ptr 42*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq float %f1, %f2 43*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 44*9880d681SAndroid Build Coastguard Worker ret i64 %res 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker; Check the next word up, which needs separate address logic. 48*9880d681SAndroid Build Coastguard Worker; Other sequences besides this one would be OK. 49*9880d681SAndroid Build Coastguard Workerdefine i64 @f4(i64 %a, i64 %b, float %f1, float *%base) { 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 51*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r4, 4096 52*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ber %r14 54*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 55*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 56*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr float, float *%base, i64 1024 57*9880d681SAndroid Build Coastguard Worker %f2 = load float , float *%ptr 58*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq float %f1, %f2 59*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 60*9880d681SAndroid Build Coastguard Worker ret i64 %res 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; Check negative displacements, which also need separate address logic. 64*9880d681SAndroid Build Coastguard Workerdefine i64 @f5(i64 %a, i64 %b, float %f1, float *%base) { 65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 66*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r4, -4 67*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ber %r14 69*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 70*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 71*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr float, float *%base, i64 -1 72*9880d681SAndroid Build Coastguard Worker %f2 = load float , float *%ptr 73*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq float %f1, %f2 74*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 75*9880d681SAndroid Build Coastguard Worker ret i64 %res 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker; Check that CEB allows indices. 79*9880d681SAndroid Build Coastguard Workerdefine i64 @f6(i64 %a, i64 %b, float %f1, float *%base, i64 %index) { 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 81*9880d681SAndroid Build Coastguard Worker; CHECK: sllg %r1, %r5, 2 82*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 400(%r1,%r4) 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ber %r14 84*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 85*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 86*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr float, float *%base, i64 %index 87*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr float, float *%ptr1, i64 100 88*9880d681SAndroid Build Coastguard Worker %f2 = load float , float *%ptr2 89*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq float %f1, %f2 90*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 91*9880d681SAndroid Build Coastguard Worker ret i64 %res 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker; Check that comparisons of spilled values can use CEB rather than CEBR. 95*9880d681SAndroid Build Coastguard Workerdefine float @f7(float *%ptr0) { 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 97*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT 98*9880d681SAndroid Build Coastguard Worker; CHECK: ceb {{%f[0-9]+}}, 16{{[04]}}(%r15) 99*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 100*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr float, float *%ptr0, i64 2 101*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr float, float *%ptr0, i64 4 102*9880d681SAndroid Build Coastguard Worker %ptr3 = getelementptr float, float *%ptr0, i64 6 103*9880d681SAndroid Build Coastguard Worker %ptr4 = getelementptr float, float *%ptr0, i64 8 104*9880d681SAndroid Build Coastguard Worker %ptr5 = getelementptr float, float *%ptr0, i64 10 105*9880d681SAndroid Build Coastguard Worker %ptr6 = getelementptr float, float *%ptr0, i64 12 106*9880d681SAndroid Build Coastguard Worker %ptr7 = getelementptr float, float *%ptr0, i64 14 107*9880d681SAndroid Build Coastguard Worker %ptr8 = getelementptr float, float *%ptr0, i64 16 108*9880d681SAndroid Build Coastguard Worker %ptr9 = getelementptr float, float *%ptr0, i64 18 109*9880d681SAndroid Build Coastguard Worker %ptr10 = getelementptr float, float *%ptr0, i64 20 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker %val0 = load float , float *%ptr0 112*9880d681SAndroid Build Coastguard Worker %val1 = load float , float *%ptr1 113*9880d681SAndroid Build Coastguard Worker %val2 = load float , float *%ptr2 114*9880d681SAndroid Build Coastguard Worker %val3 = load float , float *%ptr3 115*9880d681SAndroid Build Coastguard Worker %val4 = load float , float *%ptr4 116*9880d681SAndroid Build Coastguard Worker %val5 = load float , float *%ptr5 117*9880d681SAndroid Build Coastguard Worker %val6 = load float , float *%ptr6 118*9880d681SAndroid Build Coastguard Worker %val7 = load float , float *%ptr7 119*9880d681SAndroid Build Coastguard Worker %val8 = load float , float *%ptr8 120*9880d681SAndroid Build Coastguard Worker %val9 = load float , float *%ptr9 121*9880d681SAndroid Build Coastguard Worker %val10 = load float , float *%ptr10 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker %ret = call float @foo() 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker %cmp0 = fcmp olt float %ret, %val0 126*9880d681SAndroid Build Coastguard Worker %cmp1 = fcmp olt float %ret, %val1 127*9880d681SAndroid Build Coastguard Worker %cmp2 = fcmp olt float %ret, %val2 128*9880d681SAndroid Build Coastguard Worker %cmp3 = fcmp olt float %ret, %val3 129*9880d681SAndroid Build Coastguard Worker %cmp4 = fcmp olt float %ret, %val4 130*9880d681SAndroid Build Coastguard Worker %cmp5 = fcmp olt float %ret, %val5 131*9880d681SAndroid Build Coastguard Worker %cmp6 = fcmp olt float %ret, %val6 132*9880d681SAndroid Build Coastguard Worker %cmp7 = fcmp olt float %ret, %val7 133*9880d681SAndroid Build Coastguard Worker %cmp8 = fcmp olt float %ret, %val8 134*9880d681SAndroid Build Coastguard Worker %cmp9 = fcmp olt float %ret, %val9 135*9880d681SAndroid Build Coastguard Worker %cmp10 = fcmp olt float %ret, %val10 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker %sel0 = select i1 %cmp0, float %ret, float 0.0 138*9880d681SAndroid Build Coastguard Worker %sel1 = select i1 %cmp1, float %sel0, float 1.0 139*9880d681SAndroid Build Coastguard Worker %sel2 = select i1 %cmp2, float %sel1, float 2.0 140*9880d681SAndroid Build Coastguard Worker %sel3 = select i1 %cmp3, float %sel2, float 3.0 141*9880d681SAndroid Build Coastguard Worker %sel4 = select i1 %cmp4, float %sel3, float 4.0 142*9880d681SAndroid Build Coastguard Worker %sel5 = select i1 %cmp5, float %sel4, float 5.0 143*9880d681SAndroid Build Coastguard Worker %sel6 = select i1 %cmp6, float %sel5, float 6.0 144*9880d681SAndroid Build Coastguard Worker %sel7 = select i1 %cmp7, float %sel6, float 7.0 145*9880d681SAndroid Build Coastguard Worker %sel8 = select i1 %cmp8, float %sel7, float 8.0 146*9880d681SAndroid Build Coastguard Worker %sel9 = select i1 %cmp9, float %sel8, float 9.0 147*9880d681SAndroid Build Coastguard Worker %sel10 = select i1 %cmp10, float %sel9, float 10.0 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker ret float %sel10 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Worker; Check comparison with zero. 153*9880d681SAndroid Build Coastguard Workerdefine i64 @f8(i64 %a, i64 %b, float %f) { 154*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 155*9880d681SAndroid Build Coastguard Worker; CHECK: ltebr %f0, %f0 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ber %r14 157*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 158*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 159*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq float %f, 0.0 160*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 161*9880d681SAndroid Build Coastguard Worker ret i64 %res 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Worker; Check the comparison can be reversed if that allows CEB to be used, 165*9880d681SAndroid Build Coastguard Worker; first with oeq. 166*9880d681SAndroid Build Coastguard Workerdefine i64 @f9(i64 %a, i64 %b, float %f2, float *%ptr) { 167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9: 168*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ber %r14 170*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 171*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 172*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 173*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq float %f1, %f2 174*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 175*9880d681SAndroid Build Coastguard Worker ret i64 %res 176*9880d681SAndroid Build Coastguard Worker} 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker; ...then one. 179*9880d681SAndroid Build Coastguard Workerdefine i64 @f10(i64 %a, i64 %b, float %f2, float *%ptr) { 180*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10: 181*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: blhr %r14 183*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 184*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 185*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 186*9880d681SAndroid Build Coastguard Worker %cond = fcmp one float %f1, %f2 187*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 188*9880d681SAndroid Build Coastguard Worker ret i64 %res 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker; ...then olt. 192*9880d681SAndroid Build Coastguard Workerdefine i64 @f11(i64 %a, i64 %b, float %f2, float *%ptr) { 193*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 194*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bhr %r14 196*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 197*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 198*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 199*9880d681SAndroid Build Coastguard Worker %cond = fcmp olt float %f1, %f2 200*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 201*9880d681SAndroid Build Coastguard Worker ret i64 %res 202*9880d681SAndroid Build Coastguard Worker} 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker; ...then ole. 205*9880d681SAndroid Build Coastguard Workerdefine i64 @f12(i64 %a, i64 %b, float %f2, float *%ptr) { 206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12: 207*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bher %r14 209*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 210*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 211*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 212*9880d681SAndroid Build Coastguard Worker %cond = fcmp ole float %f1, %f2 213*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 214*9880d681SAndroid Build Coastguard Worker ret i64 %res 215*9880d681SAndroid Build Coastguard Worker} 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker; ...then oge. 218*9880d681SAndroid Build Coastguard Workerdefine i64 @f13(i64 %a, i64 %b, float %f2, float *%ptr) { 219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13: 220*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bler %r14 222*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 223*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 224*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 225*9880d681SAndroid Build Coastguard Worker %cond = fcmp oge float %f1, %f2 226*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 227*9880d681SAndroid Build Coastguard Worker ret i64 %res 228*9880d681SAndroid Build Coastguard Worker} 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Worker; ...then ogt. 231*9880d681SAndroid Build Coastguard Workerdefine i64 @f14(i64 %a, i64 %b, float %f2, float *%ptr) { 232*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14: 233*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: blr %r14 235*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 236*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 237*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 238*9880d681SAndroid Build Coastguard Worker %cond = fcmp ogt float %f1, %f2 239*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 240*9880d681SAndroid Build Coastguard Worker ret i64 %res 241*9880d681SAndroid Build Coastguard Worker} 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Worker; ...then ueq. 244*9880d681SAndroid Build Coastguard Workerdefine i64 @f15(i64 %a, i64 %b, float %f2, float *%ptr) { 245*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15: 246*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bnlhr %r14 248*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 249*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 250*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 251*9880d681SAndroid Build Coastguard Worker %cond = fcmp ueq float %f1, %f2 252*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 253*9880d681SAndroid Build Coastguard Worker ret i64 %res 254*9880d681SAndroid Build Coastguard Worker} 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Worker; ...then une. 257*9880d681SAndroid Build Coastguard Workerdefine i64 @f16(i64 %a, i64 %b, float %f2, float *%ptr) { 258*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16: 259*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bner %r14 261*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 262*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 263*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 264*9880d681SAndroid Build Coastguard Worker %cond = fcmp une float %f1, %f2 265*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 266*9880d681SAndroid Build Coastguard Worker ret i64 %res 267*9880d681SAndroid Build Coastguard Worker} 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Worker; ...then ult. 270*9880d681SAndroid Build Coastguard Workerdefine i64 @f17(i64 %a, i64 %b, float %f2, float *%ptr) { 271*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17: 272*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bnler %r14 274*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 275*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 276*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 277*9880d681SAndroid Build Coastguard Worker %cond = fcmp ult float %f1, %f2 278*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 279*9880d681SAndroid Build Coastguard Worker ret i64 %res 280*9880d681SAndroid Build Coastguard Worker} 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Worker; ...then ule. 283*9880d681SAndroid Build Coastguard Workerdefine i64 @f18(i64 %a, i64 %b, float %f2, float *%ptr) { 284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f18: 285*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bnlr %r14 287*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 288*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 289*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 290*9880d681SAndroid Build Coastguard Worker %cond = fcmp ule float %f1, %f2 291*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 292*9880d681SAndroid Build Coastguard Worker ret i64 %res 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Worker; ...then uge. 296*9880d681SAndroid Build Coastguard Workerdefine i64 @f19(i64 %a, i64 %b, float %f2, float *%ptr) { 297*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f19: 298*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 299*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bnhr %r14 300*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 301*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 302*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 303*9880d681SAndroid Build Coastguard Worker %cond = fcmp uge float %f1, %f2 304*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 305*9880d681SAndroid Build Coastguard Worker ret i64 %res 306*9880d681SAndroid Build Coastguard Worker} 307*9880d681SAndroid Build Coastguard Worker 308*9880d681SAndroid Build Coastguard Worker; ...then ugt. 309*9880d681SAndroid Build Coastguard Workerdefine i64 @f20(i64 %a, i64 %b, float %f2, float *%ptr) { 310*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f20: 311*9880d681SAndroid Build Coastguard Worker; CHECK: ceb %f0, 0(%r4) 312*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bnher %r14 313*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r2, %r3 314*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 315*9880d681SAndroid Build Coastguard Worker %f1 = load float , float *%ptr 316*9880d681SAndroid Build Coastguard Worker %cond = fcmp ugt float %f1, %f2 317*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 318*9880d681SAndroid Build Coastguard Worker ret i64 %res 319*9880d681SAndroid Build Coastguard Worker} 320