[llvm-dev] Question about canonicalizing cmp+select
Roman Lebedev via llvm-dev
llvm-dev at lists.llvm.org
Tue Jul 3 11:13:58 PDT 2018
On Tue, Jul 3, 2018 at 9:06 PM, Yuan Lin via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> Hi, Sanjay/all,
>
> I noticed in rL331486 that some compare-select optimizations are disabled
> in favor of providing canonicalized cmp+select to the backend.
>
> I am currently working on a private backend target, and the target has a
> small code size limit. With this change, some of the apps went over the
> codesize limit. As an example,
>
> C code:
> b = (a > -1) ? 4 : 5;
>
> ll code:
> Before rL331486:
> %0 = lshr i16 %a.0.a.0., 15
> %1 = or i16 %0, 4
>
> After rL331486:
> %cmp = icmp sgt i16 %a.0.a.0., -1
> %cond = select i1 %cmp, i16 4, i16 5
>
> With the various encoding restrictions of my particular target, the
> cmp/select generated slightly larger code size. However, because the apps
> were very close to the code size limit, this slight change pushed them over
> the limit.
>
> If I still prefer to have this optimization performed, then is my best
> strategy moving forward to implement this optimization as a peephole opt in
> my backend?
I personally think it should probably be a DAGCombine transform,
driven by a Target Transform Info hook (e.g. like hasAndNot()).
> Thanks,
> --Yuan
Roman.
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
More information about the llvm-dev
mailing list