[PATCH] D21663: [MBP] Enhance cost based branch prob threshold computation to handle general control flows

David Li via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 23 20:38:41 PDT 2016


davidxl added inline comments.

================
Comment at: lib/CodeGen/MachineBlockPlacement.cpp:610
@@ +609,3 @@
+    //         (C)                 (D)
+    //  (D) is a degenerated case of (C) where Pred1 does not exist. In (D),
+    //  Let
----------------
danielcdh wrote:
> You mean in (C), right?
yes.

================
Comment at: lib/CodeGen/MachineBlockPlacement.cpp:624
@@ +623,3 @@
+    //  order for BB->Succ to be selected, we must have F1 > F2 + F3. So the
+    //  backward probability threshold is (backward checking igores other
+    //  predecessors other than Pred2):
----------------
danielcdh wrote:
> This is a little confusing, I think the condition should be:
> 
> F1 > max(2*F3, F2)
> 
> So when checking Pred1, the backward threhold should be 0.66, when checking Pred2, the backward threshold should be 0.5?
> 
> But for the current implementation, I tried all testcase, and some other testcases with different triangle-diamond combination, and it always gives me optimal solution.
It is F1 > F2 + F3.

Basically, we are comparing selecting BB->Succ as fall through vs selecting BB->Pred1 and Pred2->Succ as fall throughs. In order for BB->Succ to succeed, the minimal min(F1) = F2 + F3.

When computing backward probability, only BB->Succ and Pred2->Succ edges are considered, so the probability threshold 
  T = min(F1) /(min(F1) + F2) = (F2 + F3 )/(2*F2 + F3).

I will update the comments.


http://reviews.llvm.org/D21663





More information about the llvm-commits mailing list