diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2019-05-31 16:46:05 +0000 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-05-31 16:46:05 +0000 |
| commit | 1e692d1777ae34dcb93524b5798651a29defae09 (patch) | |
| tree | 27257ebfdc3339114ae43f21a6eb863efcb897b4 /llvm/test/Transforms | |
| parent | ac79007205ef96f81acef54c9ded34b6e6a8dcb4 (diff) | |
| download | bcm5719-llvm-1e692d1777ae34dcb93524b5798651a29defae09.tar.gz bcm5719-llvm-1e692d1777ae34dcb93524b5798651a29defae09.zip | |
[CVP] Simplify non-overflowing saturating add/sub
If we can determine that a saturating add/sub will not overflow
based on range analysis, convert it into a simple binary operation.
This is a sibling transform to the existing with.overflow handling.
Differential Revision: https://reviews.llvm.org/D62703
llvm-svn: 362242
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/CorrelatedValuePropagation/overflows.ll | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/overflows.ll b/llvm/test/Transforms/CorrelatedValuePropagation/overflows.ll index 860ebafd074..b692e0d1ac3 100644 --- a/llvm/test/Transforms/CorrelatedValuePropagation/overflows.ll +++ b/llvm/test/Transforms/CorrelatedValuePropagation/overflows.ll @@ -739,8 +739,8 @@ define i8 @uadd_sat_no_overflow(i8 %x) { ; CHECK-NEXT: call void @llvm.trap() ; CHECK-NEXT: unreachable ; CHECK: cont: -; CHECK-NEXT: [[RES:%.*]] = call i8 @llvm.uadd.sat.i8(i8 [[X]], i8 100) -; CHECK-NEXT: ret i8 [[RES]] +; CHECK-NEXT: [[RES1:%.*]] = add nuw i8 [[X]], 100 +; CHECK-NEXT: ret i8 [[RES1]] ; %cmp = icmp ugt i8 %x, 100 br i1 %cmp, label %trap, label %cont @@ -762,8 +762,8 @@ define i8 @sadd_sat_no_overflow(i8 %x) { ; CHECK-NEXT: call void @llvm.trap() ; CHECK-NEXT: unreachable ; CHECK: cont: -; CHECK-NEXT: [[RES:%.*]] = call i8 @llvm.sadd.sat.i8(i8 [[X]], i8 20) -; CHECK-NEXT: ret i8 [[RES]] +; CHECK-NEXT: [[RES1:%.*]] = add nsw i8 [[X]], 20 +; CHECK-NEXT: ret i8 [[RES1]] ; %cmp = icmp sgt i8 %x, 100 br i1 %cmp, label %trap, label %cont @@ -785,8 +785,8 @@ define i8 @usub_sat_no_overflow(i8 %x) { ; CHECK-NEXT: call void @llvm.trap() ; CHECK-NEXT: unreachable ; CHECK: cont: -; CHECK-NEXT: [[RES:%.*]] = call i8 @llvm.usub.sat.i8(i8 [[X]], i8 100) -; CHECK-NEXT: ret i8 [[RES]] +; CHECK-NEXT: [[RES1:%.*]] = sub nuw i8 [[X]], 100 +; CHECK-NEXT: ret i8 [[RES1]] ; %cmp = icmp ult i8 %x, 100 br i1 %cmp, label %trap, label %cont @@ -808,8 +808,8 @@ define i8 @ssub_sat_no_overflow(i8 %x) { ; CHECK-NEXT: call void @llvm.trap() ; CHECK-NEXT: unreachable ; CHECK: cont: -; CHECK-NEXT: [[RES:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X]], i8 20) -; CHECK-NEXT: ret i8 [[RES]] +; CHECK-NEXT: [[RES1:%.*]] = sub nsw i8 [[X]], 20 +; CHECK-NEXT: ret i8 [[RES1]] ; %cmp = icmp slt i8 %x, -100 br i1 %cmp, label %trap, label %cont |

