summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-07-02 06:07:09 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-07-02 06:07:09 +0000
commitbdeef602e9916ed0b3da64646b91a199adef01e2 (patch)
tree93214298bb15484298ea6d955989e7a9dd6c1cee /llvm/test/Transforms
parent92e87349e0a14e00458b2c1199dbad156d56703a (diff)
downloadbcm5719-llvm-bdeef602e9916ed0b3da64646b91a199adef01e2.tar.gz
bcm5719-llvm-bdeef602e9916ed0b3da64646b91a199adef01e2.zip
InstCombine: Don't turn -(x/INT_MIN) -> x/INT_MIN
It is not safe to negate the smallest signed integer, doing so yields the same number back. This fixes PR20186. llvm-svn: 212164
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/InstCombine/sub.ll19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/sub.ll b/llvm/test/Transforms/InstCombine/sub.ll
index 41d803c8bdd..a9dffe793a1 100644
--- a/llvm/test/Transforms/InstCombine/sub.ll
+++ b/llvm/test/Transforms/InstCombine/sub.ll
@@ -444,3 +444,22 @@ define <2 x i64> @test36(<2 x i64> %A) {
; CHECK-NEXT: %sub = mul <2 x i64> %A, <i64 7, i64 15>
; CHECK-NEXT: ret <2 x i64> %sub
}
+
+define <2 x i64> @test37(<2 x i64> %A) {
+ %shl = shl <2 x i64> %A, <i64 3, i64 4>
+ %sub = sub <2 x i64> %shl, %A
+ ret <2 x i64> %sub
+; CHECK-LABEL: @test37(
+; CHECK-NEXT: %sub = mul <2 x i64> %A, <i64 7, i64 15>
+; CHECK-NEXT: ret <2 x i64> %sub
+}
+
+define i32 @test38(i32 %A) {
+ %div = sdiv i32 %A, -2147483648
+ %sub = sub nsw i32 0, %div
+ ret i32 %sub
+; CHECK-LABEL: @test38(
+; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 %A, -2147483648
+; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[DIV]]
+; CHECK-NEXT: ret i32 [[SUB]]
+}
OpenPOWER on IntegriCloud