[llvm] [InstCombine] Canonicalize `icmp eq/ne (A ^ C), B` to `icmp eq/ne (A ^ B), C` (PR #67273)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 25 12:27:52 PDT 2023
================
@@ -5437,6 +5437,15 @@ Instruction *InstCombinerImpl::foldICmpEquality(ICmpInst &I) {
Pred, A,
Builder.CreateIntrinsic(Op0->getType(), Intrinsic::fshl, {A, A, B}));
+ // Canonicalize:
+ // icmp eq/ne OneUse(A ^ Cst), B --> icmp eq/ne (A ^ B), Cst
+ Constant *Cst;
+ if (match(&I, m_c_ICmp(PredUnused,
+ m_OneUse(m_Xor(m_Value(A), m_ImmConstant(Cst))),
+ m_Value(B))))
+ return ICmpInst::Create(Instruction::ICmp, Pred, Builder.CreateXor(A, B),
+ Cst);
----------------
nikic wrote:
Use `new ICmpInst` instead.
https://github.com/llvm/llvm-project/pull/67273
More information about the llvm-commits
mailing list