<div dir="ltr"><div>Do you run DAGCombiner? And are you overriding TLI.convertSelectOfConstantsToMath(VT) for your target?</div><div><br></div><div>For the stated example (true val and false val constants in the select differ by 1), that should already be converted.<br></div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 3, 2018 at 12:13 PM, Roman Lebedev <span dir="ltr"><<a href="mailto:lebedev.ri@gmail.com" target="_blank">lebedev.ri@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, Jul 3, 2018 at 9:06 PM, Yuan Lin via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
> Hi, Sanjay/all,<br>
><br>
>   I noticed in rL331486 that some compare-select optimizations are disabled<br>
> in favor of providing canonicalized cmp+select to the backend.<br>
><br>
>   I am currently working on a private backend target, and the target has a<br>
> small code size limit.  With this change, some of the apps went over the<br>
> codesize limit.  As an example,<br>
><br>
> C code:<br>
>   b = (a > -1) ? 4 : 5;<br>
><br>
> ll code:<br>
> Before rL331486:<br>
>   %0 = lshr i16 %a.0.a.0., 15<br>
>   %1 = or i16 %0, 4<br>
><br>
> After rL331486:<br>
>   %cmp = icmp sgt i16 %a.0.a.0., -1<br>
>   %cond = select i1 %cmp, i16 4, i16 5<br>
><br>
>   With the various encoding restrictions of my particular target, the<br>
> cmp/select generated slightly larger code size.  However, because the apps<br>
> were very close to the code size limit, this slight change pushed them over<br>
> the limit.<br>
><br>
>   If I still prefer to have this optimization performed, then is my best<br>
> strategy moving forward to implement this optimization as a peephole opt in<br>
> my backend?<br>
</span>I personally think it should probably be a DAGCombine transform,<br>
driven by a Target Transform Info hook (e.g. like hasAndNot()).<br>
<br>
> Thanks,<br>
> --Yuan<br>
Roman.<br>
<br>
> ______________________________<wbr>_________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
><br>
</blockquote></div><br></div>