[PATCH] D19435: [LowerExpectIntrinsic] pin default likely/unlikely weights to min/max values

David Li via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 26 09:22:38 PDT 2016


davidxl added inline comments.

================
Comment at: lib/Transforms/Scalar/LowerExpectIntrinsic.cpp:42
@@ -43,1 +41,3 @@
+    "unlikely-branch-weight", cl::Hidden, cl::init(0),
+    cl::desc("Weight of the branch unlikely to be taken (default = 0)"));
 
----------------
spatel wrote:
> davidxl wrote:
> > I suggest not using 0 weight which BFI can not handle well.  1 should be better.
> I thought this over, and I really don't want to compromise on either value here. The meaning of builtin_expect() is clear, and we should honor that programmer directive. Picking semi-random values from the air can only lead to unseen problems down the road.
> 
> Can you explain why/where BFI has a problem with a '0' weight? If it's a simple bug, I will try to fix that before this patch.
I am not sure what problem you can foresee down the road with 99.95% probability proposed.  2000 is actually not something coming out of thin air -- GCC also uses this -- not that it is perfect, but I would guess lots of apps are tuned based on that setting. 

The BFI with 0 weight problem is not a simple bug -- it is due to the limitation of the propagation algorithm. See BlockFrequencyInfoImplBase::adddToDist.

Due to that, when computing BFI, 0 weight is changed to 1 anyway, so it might be better to make it an explicit 1.


http://reviews.llvm.org/D19435





More information about the llvm-commits mailing list