diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 4 | 
1 files changed, 4 insertions, 0 deletions
| diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index d1922ccd81d..372bc41f780 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -2545,6 +2545,10 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) {        }      } +    // ~(X - Y) --> ~X + Y +    if (match(NotVal, m_OneUse(m_Sub(m_Value(X), m_Value(Y))))) +      return BinaryOperator::CreateAdd(Builder.CreateNot(X), Y); +      // ~(~X >>s Y) --> (X >>s Y)      if (match(NotVal, m_AShr(m_Not(m_Value(X)), m_Value(Y))))        return BinaryOperator::CreateAShr(X, Y); | 

