[llvm] r341336 - [InstCombine] simplify xor/not folds; NFCI
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 3 11:40:57 PDT 2018
Author: spatel
Date: Mon Sep 3 11:40:56 2018
New Revision: 341336
URL: http://llvm.org/viewvc/llvm-project?rev=341336&view=rev
Log:
[InstCombine] simplify xor/not folds; NFCI
Modified:
llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp?rev=341336&r1=341335&r2=341336&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp Mon Sep 3 11:40:56 2018
@@ -2685,20 +2685,17 @@ Instruction *InstCombiner::visitXor(Bina
// the 'not' by inverting the constant and using the opposite shift type.
// Canonicalization rules ensure that only a negative constant uses 'ashr',
// but we must check that in case that transform has not fired yet.
+
+ // ~(C >>s Y) --> ~C >>u Y (when inverting the replicated sign bits)
Constant *C;
if (match(NotVal, m_AShr(m_Constant(C), m_Value(Y))) &&
- match(C, m_Negative())) {
- // ~(C >>s Y) --> ~C >>u Y (when inverting the replicated sign bits)
- Constant *NotC = ConstantExpr::getNot(C);
- return BinaryOperator::CreateLShr(NotC, Y);
- }
+ match(C, m_Negative()))
+ return BinaryOperator::CreateLShr(ConstantExpr::getNot(C), Y);
+ // ~(C >>u Y) --> ~C >>s Y (when inverting the replicated sign bits)
if (match(NotVal, m_LShr(m_Constant(C), m_Value(Y))) &&
- match(C, m_NonNegative())) {
- // ~(C >>u Y) --> ~C >>s Y (when inverting the replicated sign bits)
- Constant *NotC = ConstantExpr::getNot(C);
- return BinaryOperator::CreateAShr(NotC, Y);
- }
+ match(C, m_NonNegative()))
+ return BinaryOperator::CreateAShr(ConstantExpr::getNot(C), Y);
// ~(X + C) --> -(C + 1) - X
if (match(Op0, m_Add(m_Value(X), m_Constant(C))))
@@ -2717,18 +2714,15 @@ Instruction *InstCombiner::visitXor(Bina
if (match(Op1, m_APInt(RHSC))) {
Value *X;
const APInt *C;
- if (match(Op0, m_Sub(m_APInt(C), m_Value(X)))) {
- if (RHSC->isSignMask()) {
- // (C - X) ^ signmask -> (C + signmask - X)
- Constant *NewC = ConstantInt::get(I.getType(), *C + *RHSC);
- return BinaryOperator::CreateSub(NewC, X);
- }
- } else if (match(Op0, m_Add(m_Value(X), m_APInt(C)))) {
- if (RHSC->isSignMask()) {
- // (X + C) ^ signmask -> (X + C + signmask)
- Constant *NewC = ConstantInt::get(I.getType(), *C + *RHSC);
- return BinaryOperator::CreateAdd(X, NewC);
- }
+ if (RHSC->isSignMask() && match(Op0, m_Sub(m_APInt(C), m_Value(X)))) {
+ // (C - X) ^ signmask -> (C + signmask - X)
+ Constant *NewC = ConstantInt::get(I.getType(), *C + *RHSC);
+ return BinaryOperator::CreateSub(NewC, X);
+ }
+ if (RHSC->isSignMask() && match(Op0, m_Add(m_Value(X), m_APInt(C)))) {
+ // (X + C) ^ signmask -> (X + C + signmask)
+ Constant *NewC = ConstantInt::get(I.getType(), *C + *RHSC);
+ return BinaryOperator::CreateAdd(X, NewC);
}
// (X|C1)^C2 -> X^(C1^C2) iff X&~C1 == 0
More information about the llvm-commits
mailing list