diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-04-12 18:18:17 +0000 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-04-12 18:18:17 +0000 |
commit | 00a0d5d1de58da3651f7efe74d9f17ebfd2cbb01 (patch) | |
tree | bc31809bc634f3ba854637d4ca8047df6f2a590e /llvm/lib | |
parent | 7671fc71f62a7387c06742c569fe17608796e8f2 (diff) | |
download | bcm5719-llvm-00a0d5d1de58da3651f7efe74d9f17ebfd2cbb01.tar.gz bcm5719-llvm-00a0d5d1de58da3651f7efe74d9f17ebfd2cbb01.zip |
[CVP] Set NSW/NUW flags when simplifying with.overflow
When CVP determines that a with.overflow intrinsic cannot overflow,
it currently inserts a simple add/sub. As we already determined that
there can be no overflow, we should add the appropriate NUW/NSW flag.
Differential Revision: https://reviews.llvm.org/D60585
llvm-svn: 358298
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp index e6dd42d893f..e9af934fbb6 100644 --- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp +++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp @@ -435,12 +435,16 @@ static void processOverflowIntrinsic(IntrinsicInst *II) { default: llvm_unreachable("Unexpected instruction."); case Intrinsic::uadd_with_overflow: + NewOp = B.CreateNUWAdd(II->getOperand(0), II->getOperand(1), II->getName()); + break; case Intrinsic::sadd_with_overflow: - NewOp = B.CreateAdd(II->getOperand(0), II->getOperand(1), II->getName()); + NewOp = B.CreateNSWAdd(II->getOperand(0), II->getOperand(1), II->getName()); break; case Intrinsic::usub_with_overflow: + NewOp = B.CreateNUWSub(II->getOperand(0), II->getOperand(1), II->getName()); + break; case Intrinsic::ssub_with_overflow: - NewOp = B.CreateSub(II->getOperand(0), II->getOperand(1), II->getName()); + NewOp = B.CreateNSWSub(II->getOperand(0), II->getOperand(1), II->getName()); break; } ++NumOverflows; |