[InstCombine] Prefer `-(x & 1)` as the low bit splatting pattern (PR51305)
authorRoman Lebedev <lebedev.ri@gmail.com>
Sat, 7 Aug 2021 12:20:35 +0000 (15:20 +0300)
committerRoman Lebedev <lebedev.ri@gmail.com>
Sat, 7 Aug 2021 14:25:28 +0000 (17:25 +0300)
commite71870512fd896bf6cf34e8ae650f4cf20923258
tree51a4835c3e56cd6d5229589cd9068074f09e886e
parentd88d279e765c31f2dcbf81256e75642ba3ad51f1
[InstCombine] Prefer `-(x & 1)` as the low bit splatting pattern (PR51305)

Both patterns are equivalent (https://alive2.llvm.org/ce/z/jfCViF),
so we should have a preference. It seems like mask+negation is better
than two shifts.
llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp
llvm/test/Transforms/InstCombine/exact.ll
llvm/test/Transforms/InstCombine/low-bit-splat.ll
llvm/test/Transforms/InstCombine/sext.ll