[X86] Fold AND(SRL(X,Y),1) -> SETCC(BT(X,Y))
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 1 Apr 2022 14:57:29 +0000 (15:57 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 1 Apr 2022 15:07:56 +0000 (16:07 +0100)
commita5f637bcbb7d1e08ce637f113fc117c3f4b2b110
treefcc14a735c763eaea26db444032c2d2af8cc4ab3
parent36d4e84427a704599bfd8bd72edf46ecd27ff5e5
[X86] Fold AND(SRL(X,Y),1) -> SETCC(BT(X,Y))

As noticed on PR39174, if we're extracting a single non-constant bit index, then try to use BT+SETCC instead to avoid messing around moving the shift amount to the ECX register, using slow x86 shift ops etc.

Differential Revision: https://reviews.llvm.org/D122891
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/setcc.ll