diff options
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp | 5 | 
1 files changed, 5 insertions, 0 deletions
| diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp index 1aa51d06cb0..166f8dfdb4a 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp @@ -974,6 +974,11 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) {            return BinaryOperator::CreateSub(ConstantExpr::getAdd(XorRHS, CI),                                             XorLHS);        } +      // (X + signbit) + C could have gotten canonicalized to (X ^ signbit) + C, +      // transform them into (X + (signbit ^ C)) +      if (XorRHS->getValue().isSignBit()) +          return BinaryOperator::CreateAdd(XorLHS, +                                           ConstantExpr::getXor(XorRHS, CI));      }    } | 

