diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-07-02 06:07:09 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-07-02 06:07:09 +0000 |
| commit | bdeef602e9916ed0b3da64646b91a199adef01e2 (patch) | |
| tree | 93214298bb15484298ea6d955989e7a9dd6c1cee /llvm/test/Transforms | |
| parent | 92e87349e0a14e00458b2c1199dbad156d56703a (diff) | |
| download | bcm5719-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.ll | 19 |
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]] +} |

