<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 15, 2017 at 3:56 PM, Hans <span class="" id=":1xd.11" tabindex="-1" style="">Wennborg</span> via <span class="" id=":1xd.12" tabindex="-1" style="">Phabricator</span> <span dir="ltr"><<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.<span class="" id=":1xd.13" tabindex="-1" style="">llvm</span>.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">hans added inline comments.<br>
<br>
<br>
================<br>
Comment at: lib/Transforms/Utils/<wbr>SimplifyCFG.cpp:5680<br>
<br>
+  if (PeelDominantCase(SI, Builder))<br>
+    return SimplifyCFG(BB, TTI, BonusInstThreshold, AC) | true;<br>
----------------<br>
I don't think we should do this if SwitchToLookupTable (the call below) can turn the swich into a lookup instead.<br></blockquote><div>If there is a dominant case, I think it should be peeled to branch rather using a  <span class="" id=":1xd.14" tabindex="-1" style="">lookup</span> table. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
In fact, I don't think this should be done at the IR level at all, since it's more of a switch lowering issue. SelectionDAGBuilder::<wbr>visitSwitch() would be a better place.<br>
<br>
That code already takes case weights into account, and when lowering to a binary search tree, it will balance it based on weight, favoring cases that are hot. Do you find that that's not sufficient? (I'm willing to believe that's the case, but I'd like to see it argued.)</blockquote><div>The snippet I included in the description shows <span class="" id=":1xd.15" tabindex="-1" style="">BST</span> kind of branch does not generate the optimal code because of extra branchs.</div><div><span class="" id=":1xd.16" tabindex="-1" style="">BST</span> will generate code that improves the worst case scenarios and good for evenly distributed targets.</div><div><br></div><div>This code snippet is from extracted from real application (a network packet parser). Extra compares bring excessive retired instruction and cause significant performance penalty. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
<a href="https://reviews.llvm.org/D37940" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D37940</a><br>
<br>
<br>
<br>
</blockquote></div><br></div></div>