[llvm-dev] BranchProbability/BlockFrequency for a chain of ifs
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Fri Aug 11 11:31:58 PDT 2017
Slightly OT for the original question, but do we manage to factor out
the common factor here and actually form the switch?
This could be rewritten as:
int tmp = a/10;
switch(tmp) {
case 1: ...
case 3: ...
case 5: ...
case 7: ...
}
Do we do so?
Philip
On 08/04/2017 04:10 PM, Craig Topper via llvm-dev wrote:
> I'm look at some code that does something roughly like this
>
> if (a >= 10 && a < 20) {
> // do calculation
> } else if (a >= 30 && a < 40) {
> // do calculation
> } else if (a >= 50 && a < 60) {
> // do something
> } else if (a >= 70 && a < 80) {
> // do something
> }
>
> // some other code that got split based on whether we entered any of
> the 'if' bodies. So each if body merges to a slightly different spot
> than the not taken side of the final if.
>
> In my specific case there are really 8 specific range checks.
>
> Without profile data it seems branch probability assumes the branch of
> each 'if' has 50% probability. Due to the way the ifs are cascaded
> this causes block frequency to think the final 'if' body can only
> execute some really small percentage of the time. Similarly it thinks
> that less than %1 of the time will we enter the code path that occurs
> if none of the ifs are taken.
>
> In reality in my specific case we end up executing none of the ifs
> most often. But I think i'd settle for all bodies and the no ifs taken
> path having equal weighting
>
> The bad block frequency and the fact that we have a split path for
> merging the ifs versus not going into any ifs at all seems to be
> causing block placement to create a layout that pessimizes the real
> common case.
>
> Since all the compares are on the same variable, the originally code
> is kinda like a switch and as such we should maybe give each possible
> path equal weighting.
>
> Is there somewhere we can apply a heuristic to the branch probability
> so that it can provide a better answer here?
>
> ~Craig
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170811/aa191caa/attachment.html>
More information about the llvm-dev
mailing list