[X86] Refactor movmsk(icmp_eq(and(x,c1),0)) -> movmsk(not(shl(x,c2))) fold to use...
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 23 Mar 2023 17:49:39 +0000 (17:49 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 23 Mar 2023 17:49:46 +0000 (17:49 +0000)
commitcc8a34b11b0cff9c28780401a61d1cfb9a0f8b36
tree0a3021a8535907b96282f27acc392dec3cd69490
parent8088f5bf2dc051dc0828990b3df2a3299c9f0433
[X86] Refactor movmsk(icmp_eq(and(x,c1),0)) -> movmsk(not(shl(x,c2))) fold to use KnownBits

We don't need an explicit AND mask, we can use KnownBits to determine if each element has (the same) single non-zero bit and shift that into the msb/signbit for MOVMSK to access directly.
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/vector-reduce-or-cmp.ll