aboutsummaryrefslogtreecommitdiff
path: root/test/Transforms/InstCombine/intrinsics.ll
diff options
context:
space:
mode:
authorNadav Rotem <nrotem@apple.com>2015-03-06 00:23:58 +0000
committerNadav Rotem <nrotem@apple.com>2015-03-06 00:23:58 +0000
commit368d2e9976a000e9e73f8c4b8115d08fcf5a7523 (patch)
tree4815bc58ae2c5e6d7e6e23621bc3298b04381419 /test/Transforms/InstCombine/intrinsics.ll
parentb0b6966c1d1100072a63ca1535492c3ff2cfc508 (diff)
Teach ComputeNumSignBits about signed reminder.
This optimization a continuation of r231140 that reasoned about signed div. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231433 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/InstCombine/intrinsics.ll')
-rw-r--r--test/Transforms/InstCombine/intrinsics.ll21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/intrinsics.ll b/test/Transforms/InstCombine/intrinsics.ll
index cfdda9405a8..539628a31be 100644
--- a/test/Transforms/InstCombine/intrinsics.ll
+++ b/test/Transforms/InstCombine/intrinsics.ll
@@ -386,3 +386,24 @@ entry:
ret i1 %obit
}
+; CHECK-LABEL: @overflow_mod_mul(
+; CHECK: ret i1 false
+define i1 @overflow_mod_mul(i32 %v1, i32 %v2) nounwind {
+entry:
+ %rem = srem i32 %v1, 1000
+ %t = call %ov.result.32 @llvm.smul.with.overflow.i32(i32 %rem, i32 %rem)
+ %obit = extractvalue %ov.result.32 %t, 1
+ ret i1 %obit
+}
+
+; CHECK-LABEL: @overflow_mod_overflow_mul(
+; CHECK-NOT: ret i1 false
+define i1 @overflow_mod_overflow_mul(i32 %v1, i32 %v2) nounwind {
+entry:
+ %rem = srem i32 %v1, 65537
+ ; This may overflow because the result of the mul operands may be greater than 16bits
+ ; and the result greater than 32.
+ %t = call %ov.result.32 @llvm.smul.with.overflow.i32(i32 %rem, i32 %rem)
+ %obit = extractvalue %ov.result.32 %t, 1
+ ret i1 %obit
+}