summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorLuqman Aden <me@luqman.ca>2019-04-20 13:14:18 +0000
committerLuqman Aden <me@luqman.ca>2019-04-20 13:14:18 +0000
commit2993661cc0e5d7f6d15e071bfcd047592aef6675 (patch)
treea03c0526995394a5e62b94507cfbdec5a2599069 /llvm/test
parentd3b2682351184c8a2aacb40ae0b62888ff847478 (diff)
downloadbcm5719-llvm-2993661cc0e5d7f6d15e071bfcd047592aef6675.tar.gz
bcm5719-llvm-2993661cc0e5d7f6d15e071bfcd047592aef6675.zip
[CorrelatedValuePropagation] Mark subs that we know not to wrap with nuw/nsw.
Summary: Teach CorrelatedValuePropagation to also handle sub instructions in addition to add. Relatively simple since makeGuaranteedNoWrapRegion already understood sub instructions. Only subtle change is which range is passed as "Other" to that function, since sub isn't commutative. Note that CorrelatedValuePropagation::processAddSub is still hidden behind a default-off flag as IndVarSimplify hasn't yet been fixed to strip the added nsw/nuw flags and causes a miscompile. (PR31181) Reviewers: sanjoy, apilipenko, nikic Reviewed By: nikic Subscribers: hiraditya, jfb, jdoerfert, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D60036 llvm-svn: 358816
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/CorrelatedValuePropagation/add.ll2
-rw-r--r--llvm/test/Transforms/CorrelatedValuePropagation/sub.ll36
2 files changed, 19 insertions, 19 deletions
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/add.ll b/llvm/test/Transforms/CorrelatedValuePropagation/add.ll
index 4001f511f94..026af75220d 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/add.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/add.ll
@@ -1,4 +1,4 @@
-; RUN: opt < %s -correlated-propagation -cvp-dont-process-adds=false -S | FileCheck %s
+; RUN: opt < %s -correlated-propagation -cvp-dont-add-nowrap-flags=false -S | FileCheck %s
; CHECK-LABEL: @test0(
define void @test0(i32 %a) {
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/sub.ll b/llvm/test/Transforms/CorrelatedValuePropagation/sub.ll
index 83f6ff15d1a..6e954e8ff67 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/sub.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/sub.ll
@@ -1,5 +1,5 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt < %s -correlated-propagation -cvp-dont-process-adds=false -S | FileCheck %s
+; RUN: opt < %s -correlated-propagation -cvp-dont-add-nowrap-flags=false -S | FileCheck %s
define void @test0(i32 %a) {
; CHECK-LABEL: @test0(
@@ -7,7 +7,7 @@ define void @test0(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A:%.*]], 100
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -30,7 +30,7 @@ define void @test1(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[A:%.*]], 100
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -76,7 +76,7 @@ define void @test3(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A:%.*]], -1
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -99,7 +99,7 @@ define void @test4(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[A:%.*]], 2147483647
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -163,7 +163,7 @@ define void @test7(i32 %a, i1 %flag) {
; CHECK-NEXT: [[CMP:%.*]] = and i1 [[CMP_1]], [[FLAG:%.*]]
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -191,7 +191,7 @@ define void @test8(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = and i1 [[CMP_1]], [[CMP_2]]
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -250,7 +250,7 @@ define void @test9(i32 %a, i1 %flag) {
; CHECK-NEXT: [[CMP:%.*]] = and i1 [[CMP_1]], [[CMP_3]]
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -279,7 +279,7 @@ define void @test10(i32 %a, i32 %b, i1 %flag) {
; CHECK-NEXT: [[CMP:%.*]] = and i1 [[CMP_1]], [[FLAG:%.*]]
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -307,7 +307,7 @@ define i32 @test11(i32* %p, i32 %i) {
; CHECK-NEXT: [[WITHIN:%.*]] = and i1 [[WITHIN_1]], [[WITHIN_2]]
; CHECK-NEXT: br i1 [[WITHIN]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
-; CHECK-NEXT: [[I_MINUS_6:%.*]] = sub i32 [[I]], 6
+; CHECK-NEXT: [[I_MINUS_6:%.*]] = sub nuw nsw i32 [[I]], 6
; CHECK-NEXT: ret i32 [[I_MINUS_6]]
; CHECK: else:
; CHECK-NEXT: ret i32 0
@@ -336,7 +336,7 @@ define void @test12(i32 %a, i1 %flag) {
; CHECK-NEXT: [[CMP:%.*]] = or i1 [[CMP_1]], [[FLAG:%.*]]
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[BB:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -364,7 +364,7 @@ define void @test13(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = or i1 [[CMP_1]], [[CMP_2]]
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[BB:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -423,7 +423,7 @@ define void @test14(i32 %a, i1 %flag) {
; CHECK-NEXT: [[CMP:%.*]] = or i1 [[CMP_1]], [[CMP_3]]
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[BB:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -452,7 +452,7 @@ define void @test15(i32 %a, i32 %b, i1 %flag) {
; CHECK-NEXT: [[CMP:%.*]] = or i1 [[CMP_1]], [[FLAG:%.*]]
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[BB:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 [[A]], 1
+; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 [[A]], 1
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -483,7 +483,7 @@ define i32 @test16(i32* %n, i32* %a) {
; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[A:%.*]] unordered, align 8
; CHECK-NEXT: fence acquire
; CHECK-NEXT: [[ACC_CURR]] = sub i32 [[ACC]], [[X]]
-; CHECK-NEXT: [[IV_NEXT]] = sub i32 [[IV]], -1
+; CHECK-NEXT: [[IV_NEXT]] = sub nsw i32 [[IV]], -1
; CHECK-NEXT: [[NVAL:%.*]] = load atomic i32, i32* [[N:%.*]] unordered, align 8
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[IV_NEXT]], [[NVAL]]
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
@@ -514,7 +514,7 @@ define void @test17(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A:%.*]], 100
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 1, [[A]]
+; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 1, [[A]]
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -537,7 +537,7 @@ define void @test18(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A:%.*]], 10000
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 -2, [[A]]
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw i32 -2, [[A]]
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -560,7 +560,7 @@ define void @test19(i32 %a) {
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 100
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
-; CHECK-NEXT: [[SUB:%.*]] = sub i32 -1, [[A]]
+; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 -1, [[A]]
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
OpenPOWER on IntegriCloud