diff options
author | Evan Phoenix <evan@fallingsnow.net> | 2009-10-05 22:53:52 +0000 |
---|---|---|
committer | Evan Phoenix <evan@fallingsnow.net> | 2009-10-05 22:53:52 +0000 |
commit | 1614e50d9f6d48a38e4dafb4b1a51fd4b37614f3 (patch) | |
tree | ef6179ab52f9523c7bc8760e4091a54ae11fb07d /test | |
parent | 540b05d227a79443b2a7b07d5152a35cb6392abf (diff) | |
download | external_llvm-1614e50d9f6d48a38e4dafb4b1a51fd4b37614f3.zip external_llvm-1614e50d9f6d48a38e4dafb4b1a51fd4b37614f3.tar.gz external_llvm-1614e50d9f6d48a38e4dafb4b1a51fd4b37614f3.tar.bz2 |
Extend ConstantFolding to understand signed overflow variants
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83338 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/Transforms/ConstProp/overflow-ops.ll | 121 |
1 files changed, 120 insertions, 1 deletions
diff --git a/test/Transforms/ConstProp/overflow-ops.ll b/test/Transforms/ConstProp/overflow-ops.ll index 52d5921..1547a4d 100644 --- a/test/Transforms/ConstProp/overflow-ops.ll +++ b/test/Transforms/ConstProp/overflow-ops.ll @@ -24,7 +24,6 @@ entry: ; CHECK: ret %i8i1 { i8 6, i1 true } } - ;;----------------------------- ;; usub ;;----------------------------- @@ -47,7 +46,127 @@ entry: ; CHECK: ret %i8i1 { i8 -2, i1 true } } +;;----------------------------- +;; sadd +;;----------------------------- + +define {i8, i1} @sadd_1() nounwind { +entry: + %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 42, i8 2) + ret {i8, i1} %t + +; CHECK: @sadd_1 +; CHECK: ret %i8i1 { i8 44, i1 false } +} + +define {i8, i1} @sadd_2() nounwind { +entry: + %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 120, i8 10) + ret {i8, i1} %t + +; CHECK: @sadd_2 +; CHECK: ret %i8i1 { i8 -126, i1 true } +} + +define {i8, i1} @sadd_3() nounwind { +entry: + %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 10) + ret {i8, i1} %t + +; CHECK: @sadd_3 +; CHECK: ret %i8i1 { i8 -110, i1 false } +} + +define {i8, i1} @sadd_4() nounwind { +entry: + %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 -10) + ret {i8, i1} %t + +; CHECK: @sadd_4 +; CHECK: ret %i8i1 { i8 126, i1 true } +} + +define {i8, i1} @sadd_5() nounwind { +entry: + %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 2, i8 -10) + ret {i8, i1} %t + +; CHECK: @sadd_5 +; CHECK: ret %i8i1 { i8 -8, i1 false } +} + + +;;----------------------------- +;; ssub +;;----------------------------- + +define {i8, i1} @ssub_1() nounwind { +entry: + %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 2) + ret {i8, i1} %t + +; CHECK: @ssub_1 +; CHECK: ret %i8i1 { i8 2, i1 false } +} + +define {i8, i1} @ssub_2() nounwind { +entry: + %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 6) + ret {i8, i1} %t + +; CHECK: @ssub_2 +; CHECK: ret %i8i1 { i8 -2, i1 false } +} + +define {i8, i1} @ssub_3() nounwind { +entry: + %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 120) + ret {i8, i1} %t + +; CHECK: @ssub_3 +; CHECK: ret %i8i1 { i8 126, i1 true } +} + +define {i8, i1} @ssub_3b() nounwind { +entry: + %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 10) + ret {i8, i1} %t + +; CHECK: @ssub_3b +; CHECK: ret %i8i1 { i8 -20, i1 false } +} + +define {i8, i1} @ssub_4() nounwind { +entry: + %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 120, i8 -10) + ret {i8, i1} %t + +; CHECK: @ssub_4 +; CHECK: ret %i8i1 { i8 -126, i1 true } +} + +define {i8, i1} @ssub_4b() nounwind { +entry: + %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 20, i8 -10) + ret {i8, i1} %t + +; CHECK: @ssub_4b +; CHECK: ret %i8i1 { i8 30, i1 false } +} + +define {i8, i1} @ssub_5() nounwind { +entry: + %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -20, i8 -10) + ret {i8, i1} %t + +; CHECK: @ssub_5 +; CHECK: ret %i8i1 { i8 -10, i1 false } +} + declare {i8, i1} @llvm.uadd.with.overflow.i8(i8, i8) declare {i8, i1} @llvm.usub.with.overflow.i8(i8, i8) + +declare {i8, i1} @llvm.sadd.with.overflow.i8(i8, i8) +declare {i8, i1} @llvm.ssub.with.overflow.i8(i8, i8) |