[PATCH] D133919: [InstCombine] Fold ((x?1:4)&(y?1:4))==0 to x^y
Marc Auberer via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 16 12:49:26 PDT 2022
marcauberer updated this revision to Diff 460858.
marcauberer added a comment.
Rebase
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D133919/new/
https://reviews.llvm.org/D133919
Files:
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
Index: llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
===================================================================
--- llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -6472,6 +6472,22 @@
if (Instruction *Res = foldReductionIdiom(I, Builder, DL))
return Res;
+ {
+ Value *A, *B;
+ const APInt *C, *D;
+ // Find hidden xor optimization (only works if `and C, D` equals `0`)
+ // (icmp (and (select A, C, D), (select B, C, D)), 0) --> (xor A, B)
+ if (I.getPredicate() == ICmpInst::ICMP_EQ && match(Op0,
+ m_OneUse(m_c_And(
+ m_OneUse(m_Select(m_Value(A), m_APInt(C), m_APInt(D))),
+ m_OneUse(m_Select(m_Value(B), m_APInt(C), m_APInt(D)))
+ ))
+ ) && match(Op1, m_Zero())) {
+ if ((*C & *D) == 0)
+ return BinaryOperator::CreateXor(A, B);
+ }
+ }
+
return Changed ? &I : nullptr;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133919.460858.patch
Type: text/x-patch
Size: 941 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220916/d235d883/attachment.bin>
More information about the llvm-commits
mailing list