[X86][SSE] Improve CTTZ lowering when CTLZ is legal
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 13 Oct 2018 13:05:19 +0000 (13:05 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 13 Oct 2018 13:05:19 +0000 (13:05 +0000)
commitf64e654d62e64ac4a74a49ac78b5609a8bb548a1
tree9b0150191ff1c7b3eed0426c5316648be0d14fd9
parentafead139cfcf85c5ebf7e440a7b3105538af87a2
[X86][SSE] Improve CTTZ lowering when CTLZ is legal

If we have better CTLZ support than CTPOP, then use cttz(x) = width - ctlz(~x & (x - 1)) - and remove the CTTZ_ZERO_UNDEF handling as it no longer gives better codegen.

Similar to rL344447, this is also closer to LegalizeDAG's approach

llvm-svn: 344448
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/vector-tzcnt-128.ll
llvm/test/CodeGen/X86/vector-tzcnt-256.ll
llvm/test/CodeGen/X86/vector-tzcnt-512.ll