From e34ed833e50c279e2f25ce944404d3091ade5190 Mon Sep 17 00:00:00 2001 From: Xinliang David Li Date: Wed, 15 Jun 2016 03:03:30 +0000 Subject: [MBP] add comments and bug fix Document the new parameter and threshod computation model. Also fix a bug when the threshold parameter is set to be different from the default. llvm-svn: 272749 --- llvm/lib/CodeGen/MachineBlockPlacement.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'llvm/lib/CodeGen/MachineBlockPlacement.cpp') diff --git a/llvm/lib/CodeGen/MachineBlockPlacement.cpp b/llvm/lib/CodeGen/MachineBlockPlacement.cpp index 7379a3099b1..332755d0ff4 100644 --- a/llvm/lib/CodeGen/MachineBlockPlacement.cpp +++ b/llvm/lib/CodeGen/MachineBlockPlacement.cpp @@ -530,9 +530,19 @@ static BranchProbability getLayoutSuccessorProbThreshold( if (BB->succ_size() == 2) { const MachineBasicBlock *Succ1 = *BB->succ_begin(); const MachineBasicBlock *Succ2 = *(BB->succ_begin() + 1); - if (Succ1->isSuccessor(Succ2) || Succ2->isSuccessor(Succ1)) - return BranchProbability( - 200 - 2 * ProfileLikelyProb, 200 - ProfileLikelyProb); + if (Succ1->isSuccessor(Succ2) || Succ2->isSuccessor(Succ1)) { + /* See case 1 below for the cost analysis. For BB->Succ to + * be taken with smaller cost, the following needs to hold: + * Prob(BB->Succ) > 2* Prob(BB->Pred) + * So the threshold T + * T = 2 * (1-Prob(BB->Pred). Since T + Prob(BB->Pred) == 1, + * We have T + T/2 = 1, i.e. T = 2/3. Also adding user specified + * branch bias, we have + * T = (2/3)*(ProfileLikelyProb/50) + * = (2*ProfileLikelyProb)/150) + */ + return BranchProbability(2 * ProfileLikelyProb, 150); + } } return BranchProbability(ProfileLikelyProb, 100); } -- cgit v1.2.3