[llvm-dev] Question about canonicalizing cmp+select

Yuan Lin via llvm-dev llvm-dev at lists.llvm.org
Tue Jul 3 11:06:55 PDT 2018


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?

Thanks,
--Yuan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180703/02716f3d/attachment.html>


More information about the llvm-dev mailing list