summaryrefslogtreecommitdiff
path: root/test/Transforms
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2011-05-21 09:22:06 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2011-05-21 09:22:06 +0000
commitc21b205f93fa7bc135928ff9f4981f9062e2fd53 (patch)
treea31226f2764d92e5252370b829603901aff5cba4 /test/Transforms
parent37fed38ec155705803250273467d5bec66e0dcd5 (diff)
downloadllvm-c21b205f93fa7bc135928ff9f4981f9062e2fd53.tar.gz
llvm-c21b205f93fa7bc135928ff9f4981f9062e2fd53.tar.bz2
llvm-c21b205f93fa7bc135928ff9f4981f9062e2fd53.tar.xz
InstCombine: Turn mul.with.overflow(X, 2) into the cheaper add.with.overflow(X, X)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131789 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
-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 107f313b01..3a0b312a2a 100644
--- a/test/Transforms/InstCombine/intrinsics.ll
+++ b/test/Transforms/InstCombine/intrinsics.ll
@@ -114,6 +114,7 @@ define i8 @umultest2(i8 %A, i1* %overflowPtr) {
%ov.result.32 = type { i32, i1 }
declare %ov.result.32 @llvm.umul.with.overflow.i32(i32, i32) nounwind readnone
+declare %ov.result.32 @llvm.smul.with.overflow.i32(i32, i32) nounwind readnone
define i32 @umultest3(i32 %n) nounwind {
%shr = lshr i32 %n, 2
@@ -139,6 +140,26 @@ define i32 @umultest4(i32 %n) nounwind {
; CHECK: umul.with.overflow
}
+define i32 @umultest5(i32 %n) nounwind {
+ %mul = call %ov.result.32 @llvm.umul.with.overflow.i32(i32 %n, i32 2)
+ %ov = extractvalue %ov.result.32 %mul, 1
+ %res = extractvalue %ov.result.32 %mul, 0
+ %ret = select i1 %ov, i32 -1, i32 %res
+ ret i32 %ret
+; CHECK: @umultest5
+; CHECK: llvm.uadd.with.overflow.i32(i32 %n, i32 %n)
+}
+
+define i32 @smultest1(i32 %n) nounwind {
+ %mul = call %ov.result.32 @llvm.smul.with.overflow.i32(i32 %n, i32 2)
+ %ov = extractvalue %ov.result.32 %mul, 1
+ %res = extractvalue %ov.result.32 %mul, 0
+ %ret = select i1 %ov, i32 -1, i32 %res
+ ret i32 %ret
+; CHECK: @smultest1
+; CHECK: llvm.sadd.with.overflow.i32(i32 %n, i32 %n)
+}
+
define void @powi(double %V, double *%P) {
entry:
%A = tail call double @llvm.powi.f64(double %V, i32 -1) nounwind