summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-06-24 21:27:36 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-06-24 21:27:36 +0000
commitf6e500a0dca4c16799deca466481b4a1e9cbcdbd (patch)
tree92c40becdd5cf20f04f316dcce952247b2bde5d7 /llvm/test/Transforms
parent64ea207027a7dee2b7fb1bfb85df8e4ac46f3a67 (diff)
downloadbcm5719-llvm-f6e500a0dca4c16799deca466481b4a1e9cbcdbd.tar.gz
bcm5719-llvm-f6e500a0dca4c16799deca466481b4a1e9cbcdbd.zip
[Reassociate] Don't propogate flags when creating negations
Reassociate mutated existing instructions in order to form negations which would create additional reassociate opportunities. This fixes PR23926. llvm-svn: 240593
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/Reassociate/basictest.ll8
-rw-r--r--llvm/test/Transforms/Reassociate/wrap-flags.ll11
2 files changed, 17 insertions, 2 deletions
diff --git a/llvm/test/Transforms/Reassociate/basictest.ll b/llvm/test/Transforms/Reassociate/basictest.ll
index caaf7726514..c557017b4c6 100644
--- a/llvm/test/Transforms/Reassociate/basictest.ll
+++ b/llvm/test/Transforms/Reassociate/basictest.ll
@@ -169,7 +169,11 @@ define i32 @test11(i32 %W) {
; CHECK-NEXT: ret i32
}
+declare void @mumble(i32)
+
define i32 @test12(i32 %X) {
+ %X.neg = sub nsw nuw i32 0, %X
+ call void @mumble(i32 %X.neg)
%A = sub i32 1, %X
%B = sub i32 2, %X
%C = sub i32 3, %X
@@ -177,8 +181,8 @@ define i32 @test12(i32 %X) {
%Z = add i32 %Y, %C
ret i32 %Z
; CHECK-LABEL: @test12
-; CHECK-NEXT: mul i32 %X, -3
-; CHECK-NEXT: add i32{{.*}}, 6
+; CHECK: %[[mul:.*]] = mul i32 %X, -3
+; CHECK-NEXT: add i32 %[[mul]], 6
; CHECK-NEXT: ret i32
}
diff --git a/llvm/test/Transforms/Reassociate/wrap-flags.ll b/llvm/test/Transforms/Reassociate/wrap-flags.ll
index e3304b6a7bb..f56719d32c2 100644
--- a/llvm/test/Transforms/Reassociate/wrap-flags.ll
+++ b/llvm/test/Transforms/Reassociate/wrap-flags.ll
@@ -32,3 +32,14 @@ entry:
%mul2 = add i32 %mul, 1
ret i32 %mul2
}
+
+; CHECK-LABEL: @pr23926(
+; CHECK: %[[X1_neg:.*]] = sub i2 0, %X1
+; CHECK-NEXT: %[[sub_one:.*]] = add i2 %[[X1_neg]], -1
+; CHECK-NEXT: %[[add:.*]] = add i2 %[[sub_one]], %X2
+; CHECK-NEXT: ret i2 %[[add]]
+define i2 @pr23926(i2 %X1, i2 %X2) {
+ %add = add nuw i2 %X1, 1
+ %sub = sub nuw nsw i2 %X2, %add
+ ret i2 %sub
+}
OpenPOWER on IntegriCloud