1*9880d681SAndroid Build Coastguard Worker; Test the static branch probability heuristics for no-return functions. 2*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -analyze -branch-prob | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -passes='print<branch-prob>' --disable-output 2>&1 | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare void @g1() 6*9880d681SAndroid Build Coastguard Workerdeclare void @g2() 7*9880d681SAndroid Build Coastguard Workerdeclare void @g3() 8*9880d681SAndroid Build Coastguard Workerdeclare void @g4() 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine void @test1(i32 %a, i32 %b) { 11*9880d681SAndroid Build Coastguard Workerentry: 12*9880d681SAndroid Build Coastguard Worker br label %do.body 13*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> do.body probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdo.body: 16*9880d681SAndroid Build Coastguard Worker %i.0 = phi i32 [ 0, %entry ], [ %inc3, %do.end ] 17*9880d681SAndroid Build Coastguard Worker call void @g1() 18*9880d681SAndroid Build Coastguard Worker br label %do.body1 19*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body -> do.body1 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdo.body1: 22*9880d681SAndroid Build Coastguard Worker %j.0 = phi i32 [ 0, %do.body ], [ %inc, %do.body1 ] 23*9880d681SAndroid Build Coastguard Worker call void @g2() 24*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %j.0, 1 25*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %inc, %b 26*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %do.body1, label %do.end 27*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> do.body1 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 28*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> do.end probability is 0x04000000 / 0x80000000 = 3.12% 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdo.end: 31*9880d681SAndroid Build Coastguard Worker call void @g3() 32*9880d681SAndroid Build Coastguard Worker %inc3 = add nsw i32 %i.0, 1 33*9880d681SAndroid Build Coastguard Worker %cmp4 = icmp slt i32 %inc3, %a 34*9880d681SAndroid Build Coastguard Worker br i1 %cmp4, label %do.body, label %do.end5 35*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end -> do.body probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 36*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end -> do.end5 probability is 0x04000000 / 0x80000000 = 3.12% 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdo.end5: 39*9880d681SAndroid Build Coastguard Worker call void @g4() 40*9880d681SAndroid Build Coastguard Worker ret void 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine void @test2(i32 %a, i32 %b) { 44*9880d681SAndroid Build Coastguard Workerentry: 45*9880d681SAndroid Build Coastguard Worker %cmp9 = icmp sgt i32 %a, 0 46*9880d681SAndroid Build Coastguard Worker br i1 %cmp9, label %for.body.lr.ph, label %for.end6 47*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> for.body.lr.ph probability is 0x50000000 / 0x80000000 = 62.50% 48*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> for.end6 probability is 0x30000000 / 0x80000000 = 37.50% 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: 51*9880d681SAndroid Build Coastguard Worker %cmp27 = icmp sgt i32 %b, 0 52*9880d681SAndroid Build Coastguard Worker br label %for.body 53*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body.lr.ph -> for.body probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerfor.body: 56*9880d681SAndroid Build Coastguard Worker %i.010 = phi i32 [ 0, %for.body.lr.ph ], [ %inc5, %for.end ] 57*9880d681SAndroid Build Coastguard Worker call void @g1() 58*9880d681SAndroid Build Coastguard Worker br i1 %cmp27, label %for.body3, label %for.end 59*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body -> for.body3 probability is 0x50000000 / 0x80000000 = 62.50% 60*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body -> for.end probability is 0x30000000 / 0x80000000 = 37.50% 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerfor.body3: 63*9880d681SAndroid Build Coastguard Worker %j.08 = phi i32 [ %inc, %for.body3 ], [ 0, %for.body ] 64*9880d681SAndroid Build Coastguard Worker call void @g2() 65*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %j.08, 1 66*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %inc, %b 67*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body3 68*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body3 -> for.end probability is 0x04000000 / 0x80000000 = 3.12% 69*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body3 -> for.body3 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerfor.end: 72*9880d681SAndroid Build Coastguard Worker call void @g3() 73*9880d681SAndroid Build Coastguard Worker %inc5 = add nsw i32 %i.010, 1 74*9880d681SAndroid Build Coastguard Worker %exitcond11 = icmp eq i32 %inc5, %a 75*9880d681SAndroid Build Coastguard Worker br i1 %exitcond11, label %for.end6, label %for.body 76*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.end -> for.end6 probability is 0x04000000 / 0x80000000 = 3.12% 77*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.end -> for.body probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerfor.end6: 80*9880d681SAndroid Build Coastguard Worker call void @g4() 81*9880d681SAndroid Build Coastguard Worker ret void 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine void @test3(i32 %a, i32 %b, i32* %c) { 85*9880d681SAndroid Build Coastguard Workerentry: 86*9880d681SAndroid Build Coastguard Worker br label %do.body 87*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> do.body probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdo.body: 90*9880d681SAndroid Build Coastguard Worker %i.0 = phi i32 [ 0, %entry ], [ %inc4, %if.end ] 91*9880d681SAndroid Build Coastguard Worker call void @g1() 92*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %c, align 4 93*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %0, 42 94*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %do.body1, label %if.end 95*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body -> do.body1 probability is 0x40000000 / 0x80000000 = 50.00% 96*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body -> if.end probability is 0x40000000 / 0x80000000 = 50.00% 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerdo.body1: 99*9880d681SAndroid Build Coastguard Worker %j.0 = phi i32 [ %inc, %do.body1 ], [ 0, %do.body ] 100*9880d681SAndroid Build Coastguard Worker call void @g2() 101*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %j.0, 1 102*9880d681SAndroid Build Coastguard Worker %cmp2 = icmp slt i32 %inc, %b 103*9880d681SAndroid Build Coastguard Worker br i1 %cmp2, label %do.body1, label %if.end 104*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> do.body1 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 105*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> if.end probability is 0x04000000 / 0x80000000 = 3.12% 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerif.end: 108*9880d681SAndroid Build Coastguard Worker call void @g3() 109*9880d681SAndroid Build Coastguard Worker %inc4 = add nsw i32 %i.0, 1 110*9880d681SAndroid Build Coastguard Worker %cmp5 = icmp slt i32 %inc4, %a 111*9880d681SAndroid Build Coastguard Worker br i1 %cmp5, label %do.body, label %do.end6 112*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end -> do.body probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 113*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end -> do.end6 probability is 0x04000000 / 0x80000000 = 3.12% 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerdo.end6: 116*9880d681SAndroid Build Coastguard Worker call void @g4() 117*9880d681SAndroid Build Coastguard Worker ret void 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Workerdefine void @test4(i32 %a, i32 %b, i32* %c) { 121*9880d681SAndroid Build Coastguard Workerentry: 122*9880d681SAndroid Build Coastguard Worker br label %do.body 123*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> do.body probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdo.body: 126*9880d681SAndroid Build Coastguard Worker %i.0 = phi i32 [ 0, %entry ], [ %inc4, %do.end ] 127*9880d681SAndroid Build Coastguard Worker call void @g1() 128*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %c, align 4 129*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %0, 42 130*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %return, label %do.body1 131*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body -> return probability is 0x04000000 / 0x80000000 = 3.12% 132*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body -> do.body1 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerdo.body1: 135*9880d681SAndroid Build Coastguard Worker %j.0 = phi i32 [ %inc, %do.body1 ], [ 0, %do.body ] 136*9880d681SAndroid Build Coastguard Worker call void @g2() 137*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %j.0, 1 138*9880d681SAndroid Build Coastguard Worker %cmp2 = icmp slt i32 %inc, %b 139*9880d681SAndroid Build Coastguard Worker br i1 %cmp2, label %do.body1, label %do.end 140*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> do.body1 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 141*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> do.end probability is 0x04000000 / 0x80000000 = 3.12% 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdo.end: 144*9880d681SAndroid Build Coastguard Worker call void @g3() 145*9880d681SAndroid Build Coastguard Worker %inc4 = add nsw i32 %i.0, 1 146*9880d681SAndroid Build Coastguard Worker %cmp5 = icmp slt i32 %inc4, %a 147*9880d681SAndroid Build Coastguard Worker br i1 %cmp5, label %do.body, label %do.end6 148*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end -> do.body probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 149*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end -> do.end6 probability is 0x04000000 / 0x80000000 = 3.12% 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerdo.end6: 152*9880d681SAndroid Build Coastguard Worker call void @g4() 153*9880d681SAndroid Build Coastguard Worker br label %return 154*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end6 -> return probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workerreturn: 157*9880d681SAndroid Build Coastguard Worker ret void 158*9880d681SAndroid Build Coastguard Worker} 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerdefine void @test5(i32 %a, i32 %b, i32* %c) { 161*9880d681SAndroid Build Coastguard Workerentry: 162*9880d681SAndroid Build Coastguard Worker br label %do.body 163*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> do.body probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdo.body: 166*9880d681SAndroid Build Coastguard Worker %i.0 = phi i32 [ 0, %entry ], [ %inc4, %do.end ] 167*9880d681SAndroid Build Coastguard Worker call void @g1() 168*9880d681SAndroid Build Coastguard Worker br label %do.body1 169*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body -> do.body1 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Workerdo.body1: 172*9880d681SAndroid Build Coastguard Worker %j.0 = phi i32 [ 0, %do.body ], [ %inc, %if.end ] 173*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %c, align 4 174*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %0, 42 175*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %return, label %if.end 176*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> return probability is 0x04000000 / 0x80000000 = 3.12% 177*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> if.end probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerif.end: 180*9880d681SAndroid Build Coastguard Worker call void @g2() 181*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %j.0, 1 182*9880d681SAndroid Build Coastguard Worker %cmp2 = icmp slt i32 %inc, %b 183*9880d681SAndroid Build Coastguard Worker br i1 %cmp2, label %do.body1, label %do.end 184*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end -> do.body1 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 185*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end -> do.end probability is 0x04000000 / 0x80000000 = 3.12% 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerdo.end: 188*9880d681SAndroid Build Coastguard Worker call void @g3() 189*9880d681SAndroid Build Coastguard Worker %inc4 = add nsw i32 %i.0, 1 190*9880d681SAndroid Build Coastguard Worker %cmp5 = icmp slt i32 %inc4, %a 191*9880d681SAndroid Build Coastguard Worker br i1 %cmp5, label %do.body, label %do.end6 192*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end -> do.body probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 193*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end -> do.end6 probability is 0x04000000 / 0x80000000 = 3.12% 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdo.end6: 196*9880d681SAndroid Build Coastguard Worker call void @g4() 197*9880d681SAndroid Build Coastguard Worker br label %return 198*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end6 -> return probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Workerreturn: 201*9880d681SAndroid Build Coastguard Worker ret void 202*9880d681SAndroid Build Coastguard Worker} 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Workerdefine void @test6(i32 %a, i32 %b, i32* %c) { 205*9880d681SAndroid Build Coastguard Workerentry: 206*9880d681SAndroid Build Coastguard Worker br label %do.body 207*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> do.body probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Workerdo.body: 210*9880d681SAndroid Build Coastguard Worker %i.0 = phi i32 [ 0, %entry ], [ %inc4, %do.end ] 211*9880d681SAndroid Build Coastguard Worker call void @g1() 212*9880d681SAndroid Build Coastguard Worker br label %do.body1 213*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body -> do.body1 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Workerdo.body1: 216*9880d681SAndroid Build Coastguard Worker %j.0 = phi i32 [ 0, %do.body ], [ %inc, %do.cond ] 217*9880d681SAndroid Build Coastguard Worker call void @g2() 218*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %c, align 4 219*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %0, 42 220*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %return, label %do.cond 221*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> return probability is 0x04000000 / 0x80000000 = 3.12% 222*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.body1 -> do.cond probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Workerdo.cond: 225*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %j.0, 1 226*9880d681SAndroid Build Coastguard Worker %cmp2 = icmp slt i32 %inc, %b 227*9880d681SAndroid Build Coastguard Worker br i1 %cmp2, label %do.body1, label %do.end 228*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.cond -> do.body1 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 229*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.cond -> do.end probability is 0x04000000 / 0x80000000 = 3.12% 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Workerdo.end: 232*9880d681SAndroid Build Coastguard Worker call void @g3() 233*9880d681SAndroid Build Coastguard Worker %inc4 = add nsw i32 %i.0, 1 234*9880d681SAndroid Build Coastguard Worker %cmp5 = icmp slt i32 %inc4, %a 235*9880d681SAndroid Build Coastguard Worker br i1 %cmp5, label %do.body, label %do.end6 236*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end -> do.body probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 237*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end -> do.end6 probability is 0x04000000 / 0x80000000 = 3.12% 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Workerdo.end6: 240*9880d681SAndroid Build Coastguard Worker call void @g4() 241*9880d681SAndroid Build Coastguard Worker br label %return 242*9880d681SAndroid Build Coastguard Worker; CHECK: edge do.end6 -> return probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Workerreturn: 245*9880d681SAndroid Build Coastguard Worker ret void 246*9880d681SAndroid Build Coastguard Worker} 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Workerdefine void @test7(i32 %a, i32 %b, i32* %c) { 249*9880d681SAndroid Build Coastguard Workerentry: 250*9880d681SAndroid Build Coastguard Worker %cmp10 = icmp sgt i32 %a, 0 251*9880d681SAndroid Build Coastguard Worker br i1 %cmp10, label %for.body.lr.ph, label %for.end7 252*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> for.body.lr.ph probability is 0x50000000 / 0x80000000 = 62.50% 253*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> for.end7 probability is 0x30000000 / 0x80000000 = 37.50% 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: 256*9880d681SAndroid Build Coastguard Worker %cmp38 = icmp sgt i32 %b, 0 257*9880d681SAndroid Build Coastguard Worker br label %for.body 258*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body.lr.ph -> for.body probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Workerfor.body: 261*9880d681SAndroid Build Coastguard Worker %i.011 = phi i32 [ 0, %for.body.lr.ph ], [ %inc6, %for.inc5 ] 262*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %c, align 4 263*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp eq i32 %0, %i.011 264*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %for.inc5, label %if.end 265*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body -> for.inc5 probability is 0x40000000 / 0x80000000 = 50.00% 266*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body -> if.end probability is 0x40000000 / 0x80000000 = 50.00% 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerif.end: 269*9880d681SAndroid Build Coastguard Worker call void @g1() 270*9880d681SAndroid Build Coastguard Worker br i1 %cmp38, label %for.body4, label %for.end 271*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end -> for.body4 probability is 0x50000000 / 0x80000000 = 62.50% 272*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end -> for.end probability is 0x30000000 / 0x80000000 = 37.50% 273*9880d681SAndroid Build Coastguard Worker 274*9880d681SAndroid Build Coastguard Workerfor.body4: 275*9880d681SAndroid Build Coastguard Worker %j.09 = phi i32 [ %inc, %for.body4 ], [ 0, %if.end ] 276*9880d681SAndroid Build Coastguard Worker call void @g2() 277*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %j.09, 1 278*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %inc, %b 279*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body4 280*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body4 -> for.end probability is 0x04000000 / 0x80000000 = 3.12% 281*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body4 -> for.body4 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Workerfor.end: 284*9880d681SAndroid Build Coastguard Worker call void @g3() 285*9880d681SAndroid Build Coastguard Worker br label %for.inc5 286*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.end -> for.inc5 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Workerfor.inc5: 289*9880d681SAndroid Build Coastguard Worker %inc6 = add nsw i32 %i.011, 1 290*9880d681SAndroid Build Coastguard Worker %exitcond12 = icmp eq i32 %inc6, %a 291*9880d681SAndroid Build Coastguard Worker br i1 %exitcond12, label %for.end7, label %for.body 292*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.inc5 -> for.end7 probability is 0x04000000 / 0x80000000 = 3.12% 293*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.inc5 -> for.body probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerfor.end7: 296*9880d681SAndroid Build Coastguard Worker call void @g4() 297*9880d681SAndroid Build Coastguard Worker ret void 298*9880d681SAndroid Build Coastguard Worker} 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Workerdefine void @test8(i32 %a, i32 %b, i32* %c) { 301*9880d681SAndroid Build Coastguard Workerentry: 302*9880d681SAndroid Build Coastguard Worker %cmp18 = icmp sgt i32 %a, 0 303*9880d681SAndroid Build Coastguard Worker br i1 %cmp18, label %for.body.lr.ph, label %for.end15 304*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> for.body.lr.ph probability is 0x50000000 / 0x80000000 = 62.50% 305*9880d681SAndroid Build Coastguard Worker; CHECK: edge entry -> for.end15 probability is 0x30000000 / 0x80000000 = 37.50% 306*9880d681SAndroid Build Coastguard Worker 307*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: 308*9880d681SAndroid Build Coastguard Worker %cmp216 = icmp sgt i32 %b, 0 309*9880d681SAndroid Build Coastguard Worker %arrayidx5 = getelementptr inbounds i32, i32* %c, i64 1 310*9880d681SAndroid Build Coastguard Worker %arrayidx9 = getelementptr inbounds i32, i32* %c, i64 2 311*9880d681SAndroid Build Coastguard Worker br label %for.body 312*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body.lr.ph -> for.body probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerfor.body: 315*9880d681SAndroid Build Coastguard Worker %i.019 = phi i32 [ 0, %for.body.lr.ph ], [ %inc14, %for.end ] 316*9880d681SAndroid Build Coastguard Worker call void @g1() 317*9880d681SAndroid Build Coastguard Worker br i1 %cmp216, label %for.body3, label %for.end 318*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body -> for.body3 probability is 0x50000000 / 0x80000000 = 62.50% 319*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body -> for.end probability is 0x30000000 / 0x80000000 = 37.50% 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Workerfor.body3: 322*9880d681SAndroid Build Coastguard Worker %j.017 = phi i32 [ 0, %for.body ], [ %inc, %for.inc ] 323*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %c, align 4 324*9880d681SAndroid Build Coastguard Worker %cmp4 = icmp eq i32 %0, %j.017 325*9880d681SAndroid Build Coastguard Worker br i1 %cmp4, label %for.inc, label %if.end 326*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body3 -> for.inc probability is 0x40000000 / 0x80000000 = 50.00% 327*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.body3 -> if.end probability is 0x40000000 / 0x80000000 = 50.00% 328*9880d681SAndroid Build Coastguard Worker 329*9880d681SAndroid Build Coastguard Workerif.end: 330*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx5, align 4 331*9880d681SAndroid Build Coastguard Worker %cmp6 = icmp eq i32 %1, %j.017 332*9880d681SAndroid Build Coastguard Worker br i1 %cmp6, label %for.inc, label %if.end8 333*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end -> for.inc probability is 0x40000000 / 0x80000000 = 50.00% 334*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end -> if.end8 probability is 0x40000000 / 0x80000000 = 50.00% 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Workerif.end8: 337*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %arrayidx9, align 4 338*9880d681SAndroid Build Coastguard Worker %cmp10 = icmp eq i32 %2, %j.017 339*9880d681SAndroid Build Coastguard Worker br i1 %cmp10, label %for.inc, label %if.end12 340*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end8 -> for.inc probability is 0x40000000 / 0x80000000 = 50.00% 341*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end8 -> if.end12 probability is 0x40000000 / 0x80000000 = 50.00% 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Workerif.end12: 344*9880d681SAndroid Build Coastguard Worker call void @g2() 345*9880d681SAndroid Build Coastguard Worker br label %for.inc 346*9880d681SAndroid Build Coastguard Worker; CHECK: edge if.end12 -> for.inc probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Workerfor.inc: 349*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %j.017, 1 350*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %inc, %b 351*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.end, label %for.body3 352*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.inc -> for.end probability is 0x04000000 / 0x80000000 = 3.12% 353*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.inc -> for.body3 probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 354*9880d681SAndroid Build Coastguard Worker 355*9880d681SAndroid Build Coastguard Workerfor.end: 356*9880d681SAndroid Build Coastguard Worker call void @g3() 357*9880d681SAndroid Build Coastguard Worker %inc14 = add nsw i32 %i.019, 1 358*9880d681SAndroid Build Coastguard Worker %exitcond20 = icmp eq i32 %inc14, %a 359*9880d681SAndroid Build Coastguard Worker br i1 %exitcond20, label %for.end15, label %for.body 360*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.end -> for.end15 probability is 0x04000000 / 0x80000000 = 3.12% 361*9880d681SAndroid Build Coastguard Worker; CHECK: edge for.end -> for.body probability is 0x7c000000 / 0x80000000 = 96.88% [HOT edge] 362*9880d681SAndroid Build Coastguard Worker 363*9880d681SAndroid Build Coastguard Workerfor.end15: 364*9880d681SAndroid Build Coastguard Worker call void @g4() 365*9880d681SAndroid Build Coastguard Worker ret void 366*9880d681SAndroid Build Coastguard Worker} 367