1*9880d681SAndroid Build Coastguard Worker; Test conditional sibling calls. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@var = global i32 1; 7*9880d681SAndroid Build Coastguard Worker@fun_a = global void()* null; 8*9880d681SAndroid Build Coastguard Worker@fun_b = global void()* null; 9*9880d681SAndroid Build Coastguard Worker@fun_c = global void(i32)* null; 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call. 12*9880d681SAndroid Build Coastguard Workerdefine void @f1(i32 %val1, i32 %val2) { 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 14*9880d681SAndroid Build Coastguard Worker; CHECK: crbl %r2, %r3, 0(%r1) 15*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 16*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 17*9880d681SAndroid Build Coastguard Worker %cond = icmp slt i32 %val1, %val2; 18*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workera: 21*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 22*9880d681SAndroid Build Coastguard Worker ret void 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerb: 25*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 26*9880d681SAndroid Build Coastguard Worker ret void 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call when there are two possibilities. 30*9880d681SAndroid Build Coastguard Workerdefine void @f2(i32 %val1, i32 %val2) { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 32*9880d681SAndroid Build Coastguard Worker; CHECK: crbl %r2, %r3, 0(%r1) 33*9880d681SAndroid Build Coastguard Worker; CHECK: br %r1 34*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 35*9880d681SAndroid Build Coastguard Worker %fun_b = load volatile void() *, void()** @fun_b; 36*9880d681SAndroid Build Coastguard Worker %cond = icmp slt i32 %val1, %val2; 37*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workera: 40*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerb: 44*9880d681SAndroid Build Coastguard Worker tail call void %fun_b() 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call with an argument - not supported. 49*9880d681SAndroid Build Coastguard Workerdefine void @f3(i32 %val1, i32 %val2) { 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 51*9880d681SAndroid Build Coastguard Worker; CHECK: crjhe %r2, %r3 52*9880d681SAndroid Build Coastguard Worker; CHECK: br %r1 53*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 54*9880d681SAndroid Build Coastguard Worker %fun_c = load volatile void(i32) *, void(i32)** @fun_c; 55*9880d681SAndroid Build Coastguard Worker %cond = icmp slt i32 %val1, %val2; 56*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workera: 59*9880d681SAndroid Build Coastguard Worker tail call void %fun_c(i32 1) 60*9880d681SAndroid Build Coastguard Worker ret void 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerb: 63*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - unsigned compare. 68*9880d681SAndroid Build Coastguard Workerdefine void @f4(i32 %val1, i32 %val2) { 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 70*9880d681SAndroid Build Coastguard Worker; CHECK: clrbl %r2, %r3, 0(%r1) 71*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 72*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 73*9880d681SAndroid Build Coastguard Worker %cond = icmp ult i32 %val1, %val2; 74*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workera: 77*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 78*9880d681SAndroid Build Coastguard Worker ret void 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerb: 81*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 82*9880d681SAndroid Build Coastguard Worker ret void 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - 64-bit compare. 86*9880d681SAndroid Build Coastguard Workerdefine void @f5(i64 %val1, i64 %val2) { 87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 88*9880d681SAndroid Build Coastguard Worker; CHECK: cgrbl %r2, %r3, 0(%r1) 89*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 90*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 91*9880d681SAndroid Build Coastguard Worker %cond = icmp slt i64 %val1, %val2; 92*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workera: 95*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 96*9880d681SAndroid Build Coastguard Worker ret void 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerb: 99*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 100*9880d681SAndroid Build Coastguard Worker ret void 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - unsigned 64-bit compare. 104*9880d681SAndroid Build Coastguard Workerdefine void @f6(i64 %val1, i64 %val2) { 105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 106*9880d681SAndroid Build Coastguard Worker; CHECK: clgrbl %r2, %r3, 0(%r1) 107*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 108*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 109*9880d681SAndroid Build Coastguard Worker %cond = icmp ult i64 %val1, %val2; 110*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workera: 113*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 114*9880d681SAndroid Build Coastguard Worker ret void 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Workerb: 117*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 118*9880d681SAndroid Build Coastguard Worker ret void 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - less-equal compare. 122*9880d681SAndroid Build Coastguard Workerdefine void @f7(i32 %val1, i32 %val2) { 123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 124*9880d681SAndroid Build Coastguard Worker; CHECK: crble %r2, %r3, 0(%r1) 125*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 126*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 127*9880d681SAndroid Build Coastguard Worker %cond = icmp sle i32 %val1, %val2; 128*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Workera: 131*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 132*9880d681SAndroid Build Coastguard Worker ret void 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerb: 135*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 136*9880d681SAndroid Build Coastguard Worker ret void 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - high compare. 140*9880d681SAndroid Build Coastguard Workerdefine void @f8(i32 %val1, i32 %val2) { 141*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 142*9880d681SAndroid Build Coastguard Worker; CHECK: crbh %r2, %r3, 0(%r1) 143*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 144*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 145*9880d681SAndroid Build Coastguard Worker %cond = icmp sgt i32 %val1, %val2; 146*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workera: 149*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 150*9880d681SAndroid Build Coastguard Worker ret void 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Workerb: 153*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 154*9880d681SAndroid Build Coastguard Worker ret void 155*9880d681SAndroid Build Coastguard Worker} 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - high-equal compare. 158*9880d681SAndroid Build Coastguard Workerdefine void @f9(i32 %val1, i32 %val2) { 159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9: 160*9880d681SAndroid Build Coastguard Worker; CHECK: crbhe %r2, %r3, 0(%r1) 161*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 162*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 163*9880d681SAndroid Build Coastguard Worker %cond = icmp sge i32 %val1, %val2; 164*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Workera: 167*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 168*9880d681SAndroid Build Coastguard Worker ret void 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Workerb: 171*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 172*9880d681SAndroid Build Coastguard Worker ret void 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - equal compare. 176*9880d681SAndroid Build Coastguard Workerdefine void @f10(i32 %val1, i32 %val2) { 177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10: 178*9880d681SAndroid Build Coastguard Worker; CHECK: crbe %r2, %r3, 0(%r1) 179*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 180*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 181*9880d681SAndroid Build Coastguard Worker %cond = icmp eq i32 %val1, %val2; 182*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workera: 185*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 186*9880d681SAndroid Build Coastguard Worker ret void 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Workerb: 189*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 190*9880d681SAndroid Build Coastguard Worker ret void 191*9880d681SAndroid Build Coastguard Worker} 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - unequal compare. 194*9880d681SAndroid Build Coastguard Workerdefine void @f11(i32 %val1, i32 %val2) { 195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 196*9880d681SAndroid Build Coastguard Worker; CHECK: crblh %r2, %r3, 0(%r1) 197*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 198*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 199*9880d681SAndroid Build Coastguard Worker %cond = icmp ne i32 %val1, %val2; 200*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workera: 203*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 204*9880d681SAndroid Build Coastguard Worker ret void 205*9880d681SAndroid Build Coastguard Worker 206*9880d681SAndroid Build Coastguard Workerb: 207*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 208*9880d681SAndroid Build Coastguard Worker ret void 209*9880d681SAndroid Build Coastguard Worker} 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate slt. 212*9880d681SAndroid Build Coastguard Workerdefine void @f12(i32 %val1) { 213*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12: 214*9880d681SAndroid Build Coastguard Worker; CHECK: cible %r2, 4, 0(%r1) 215*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 216*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 217*9880d681SAndroid Build Coastguard Worker %cond = icmp slt i32 %val1, 5; 218*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workera: 221*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 222*9880d681SAndroid Build Coastguard Worker ret void 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Workerb: 225*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 226*9880d681SAndroid Build Coastguard Worker ret void 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate sle. 230*9880d681SAndroid Build Coastguard Workerdefine void @f13(i32 %val1) { 231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13: 232*9880d681SAndroid Build Coastguard Worker; CHECK: cible %r2, 5, 0(%r1) 233*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 234*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 235*9880d681SAndroid Build Coastguard Worker %cond = icmp sle i32 %val1, 5; 236*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Workera: 239*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 240*9880d681SAndroid Build Coastguard Worker ret void 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerb: 243*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 244*9880d681SAndroid Build Coastguard Worker ret void 245*9880d681SAndroid Build Coastguard Worker} 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate sgt. 248*9880d681SAndroid Build Coastguard Workerdefine void @f14(i32 %val1) { 249*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14: 250*9880d681SAndroid Build Coastguard Worker; CHECK: cibhe %r2, 6, 0(%r1) 251*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 252*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 253*9880d681SAndroid Build Coastguard Worker %cond = icmp sgt i32 %val1, 5; 254*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Workera: 257*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 258*9880d681SAndroid Build Coastguard Worker ret void 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Workerb: 261*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 262*9880d681SAndroid Build Coastguard Worker ret void 263*9880d681SAndroid Build Coastguard Worker} 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate sge. 266*9880d681SAndroid Build Coastguard Workerdefine void @f15(i32 %val1) { 267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15: 268*9880d681SAndroid Build Coastguard Worker; CHECK: cibhe %r2, 5, 0(%r1) 269*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 270*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 271*9880d681SAndroid Build Coastguard Worker %cond = icmp sge i32 %val1, 5; 272*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 273*9880d681SAndroid Build Coastguard Worker 274*9880d681SAndroid Build Coastguard Workera: 275*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 276*9880d681SAndroid Build Coastguard Worker ret void 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Workerb: 279*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 280*9880d681SAndroid Build Coastguard Worker ret void 281*9880d681SAndroid Build Coastguard Worker} 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate eq. 284*9880d681SAndroid Build Coastguard Workerdefine void @f16(i32 %val1) { 285*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16: 286*9880d681SAndroid Build Coastguard Worker; CHECK: cibe %r2, 5, 0(%r1) 287*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 288*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 289*9880d681SAndroid Build Coastguard Worker %cond = icmp eq i32 %val1, 5; 290*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workera: 293*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 294*9880d681SAndroid Build Coastguard Worker ret void 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Workerb: 297*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 298*9880d681SAndroid Build Coastguard Worker ret void 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate ne. 302*9880d681SAndroid Build Coastguard Workerdefine void @f17(i32 %val1) { 303*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17: 304*9880d681SAndroid Build Coastguard Worker; CHECK: ciblh %r2, 5, 0(%r1) 305*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 306*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 307*9880d681SAndroid Build Coastguard Worker %cond = icmp ne i32 %val1, 5; 308*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 309*9880d681SAndroid Build Coastguard Worker 310*9880d681SAndroid Build Coastguard Workera: 311*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 312*9880d681SAndroid Build Coastguard Worker ret void 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerb: 315*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 316*9880d681SAndroid Build Coastguard Worker ret void 317*9880d681SAndroid Build Coastguard Worker} 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate ult. 320*9880d681SAndroid Build Coastguard Workerdefine void @f18(i32 %val1) { 321*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f18: 322*9880d681SAndroid Build Coastguard Worker; CHECK: clible %r2, 4, 0(%r1) 323*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 324*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 325*9880d681SAndroid Build Coastguard Worker %cond = icmp ult i32 %val1, 5; 326*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Workera: 329*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 330*9880d681SAndroid Build Coastguard Worker ret void 331*9880d681SAndroid Build Coastguard Worker 332*9880d681SAndroid Build Coastguard Workerb: 333*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 334*9880d681SAndroid Build Coastguard Worker ret void 335*9880d681SAndroid Build Coastguard Worker} 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate 64-bit slt. 338*9880d681SAndroid Build Coastguard Workerdefine void @f19(i64 %val1) { 339*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f19: 340*9880d681SAndroid Build Coastguard Worker; CHECK: cgible %r2, 4, 0(%r1) 341*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 342*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 343*9880d681SAndroid Build Coastguard Worker %cond = icmp slt i64 %val1, 5; 344*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 345*9880d681SAndroid Build Coastguard Worker 346*9880d681SAndroid Build Coastguard Workera: 347*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 348*9880d681SAndroid Build Coastguard Worker ret void 349*9880d681SAndroid Build Coastguard Worker 350*9880d681SAndroid Build Coastguard Workerb: 351*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 352*9880d681SAndroid Build Coastguard Worker ret void 353*9880d681SAndroid Build Coastguard Worker} 354*9880d681SAndroid Build Coastguard Worker 355*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - immediate 64-bit ult. 356*9880d681SAndroid Build Coastguard Workerdefine void @f20(i64 %val1) { 357*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f20: 358*9880d681SAndroid Build Coastguard Worker; CHECK: clgible %r2, 4, 0(%r1) 359*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 360*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 361*9880d681SAndroid Build Coastguard Worker %cond = icmp ult i64 %val1, 5; 362*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Workera: 365*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 366*9880d681SAndroid Build Coastguard Worker ret void 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Workerb: 369*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 370*9880d681SAndroid Build Coastguard Worker ret void 371*9880d681SAndroid Build Coastguard Worker} 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call to an argument - will fail due to 374*9880d681SAndroid Build Coastguard Worker; intervening lgr. 375*9880d681SAndroid Build Coastguard Workerdefine void @f21(i32 %val1, i32 %val2, void()* %fun) { 376*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f21: 377*9880d681SAndroid Build Coastguard Worker; CHECK: crjhe %r2, %r3 378*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r1, %r4 379*9880d681SAndroid Build Coastguard Worker; CHECK: br %r1 380*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 381*9880d681SAndroid Build Coastguard Worker %cond = icmp slt i32 %val1, %val2; 382*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 383*9880d681SAndroid Build Coastguard Worker 384*9880d681SAndroid Build Coastguard Workera: 385*9880d681SAndroid Build Coastguard Worker tail call void %fun() 386*9880d681SAndroid Build Coastguard Worker ret void 387*9880d681SAndroid Build Coastguard Worker 388*9880d681SAndroid Build Coastguard Workerb: 389*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 390*9880d681SAndroid Build Coastguard Worker ret void 391*9880d681SAndroid Build Coastguard Worker} 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - float olt compare. 394*9880d681SAndroid Build Coastguard Workerdefine void @f22(float %val1, float %val2) { 395*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f22: 396*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2 397*9880d681SAndroid Build Coastguard Worker; CHECK: blr %r1 398*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 399*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 400*9880d681SAndroid Build Coastguard Worker %cond = fcmp olt float %val1, %val2; 401*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 402*9880d681SAndroid Build Coastguard Worker 403*9880d681SAndroid Build Coastguard Workera: 404*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 405*9880d681SAndroid Build Coastguard Worker ret void 406*9880d681SAndroid Build Coastguard Worker 407*9880d681SAndroid Build Coastguard Workerb: 408*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 409*9880d681SAndroid Build Coastguard Worker ret void 410*9880d681SAndroid Build Coastguard Worker} 411*9880d681SAndroid Build Coastguard Worker 412*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - float ult compare. 413*9880d681SAndroid Build Coastguard Workerdefine void @f23(float %val1, float %val2) { 414*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f23: 415*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2 416*9880d681SAndroid Build Coastguard Worker; CHECK: bnher %r1 417*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 418*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 419*9880d681SAndroid Build Coastguard Worker %cond = fcmp ult float %val1, %val2; 420*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 421*9880d681SAndroid Build Coastguard Worker 422*9880d681SAndroid Build Coastguard Workera: 423*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 424*9880d681SAndroid Build Coastguard Worker ret void 425*9880d681SAndroid Build Coastguard Worker 426*9880d681SAndroid Build Coastguard Workerb: 427*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 428*9880d681SAndroid Build Coastguard Worker ret void 429*9880d681SAndroid Build Coastguard Worker} 430*9880d681SAndroid Build Coastguard Worker 431*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - float ord compare. 432*9880d681SAndroid Build Coastguard Workerdefine void @f24(float %val1, float %val2) { 433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f24: 434*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2 435*9880d681SAndroid Build Coastguard Worker; CHECK: bnor %r1 436*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 437*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 438*9880d681SAndroid Build Coastguard Worker %cond = fcmp ord float %val1, %val2; 439*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 440*9880d681SAndroid Build Coastguard Worker 441*9880d681SAndroid Build Coastguard Workera: 442*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 443*9880d681SAndroid Build Coastguard Worker ret void 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Workerb: 446*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 447*9880d681SAndroid Build Coastguard Worker ret void 448*9880d681SAndroid Build Coastguard Worker} 449*9880d681SAndroid Build Coastguard Worker 450*9880d681SAndroid Build Coastguard Worker; Check a conditional sibling call - float uno compare. 451*9880d681SAndroid Build Coastguard Workerdefine void @f25(float %val1, float %val2) { 452*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f25: 453*9880d681SAndroid Build Coastguard Worker; CHECK: cebr %f0, %f2 454*9880d681SAndroid Build Coastguard Worker; CHECK: bor %r1 455*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 456*9880d681SAndroid Build Coastguard Worker %fun_a = load volatile void() *, void()** @fun_a; 457*9880d681SAndroid Build Coastguard Worker %cond = fcmp uno float %val1, %val2; 458*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %a, label %b; 459*9880d681SAndroid Build Coastguard Worker 460*9880d681SAndroid Build Coastguard Workera: 461*9880d681SAndroid Build Coastguard Worker tail call void %fun_a() 462*9880d681SAndroid Build Coastguard Worker ret void 463*9880d681SAndroid Build Coastguard Worker 464*9880d681SAndroid Build Coastguard Workerb: 465*9880d681SAndroid Build Coastguard Worker store i32 1, i32 *@var; 466*9880d681SAndroid Build Coastguard Worker ret void 467*9880d681SAndroid Build Coastguard Worker} 468