summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/InstCombine
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-12-26 09:50:35 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-12-26 09:50:35 +0000
commitb1296ec0fdb7ca009443b8e488b2f568ebefc3df (patch)
treed9e034ee95f57360dce360fb9dc43ffddd9cfa85 /llvm/test/Transforms/InstCombine
parenta55027f68a3b47236bcc9a7a30940a54517a0200 (diff)
downloadbcm5719-llvm-b1296ec0fdb7ca009443b8e488b2f568ebefc3df.tar.gz
bcm5719-llvm-b1296ec0fdb7ca009443b8e488b2f568ebefc3df.zip
InstCombine: Infer nuw for multiplies
A multiply cannot unsigned wrap if there are bitwidth, or more, leading zero bits between the two operands. llvm-svn: 224849
Diffstat (limited to 'llvm/test/Transforms/InstCombine')
-rw-r--r--llvm/test/Transforms/InstCombine/intrinsics.ll2
-rw-r--r--llvm/test/Transforms/InstCombine/mul.ll22
2 files changed, 18 insertions, 6 deletions
diff --git a/llvm/test/Transforms/InstCombine/intrinsics.ll b/llvm/test/Transforms/InstCombine/intrinsics.ll
index c745ea8a59b..eae14de6a31 100644
--- a/llvm/test/Transforms/InstCombine/intrinsics.ll
+++ b/llvm/test/Transforms/InstCombine/intrinsics.ll
@@ -148,7 +148,7 @@ define %ov.result.32 @smultest1_nsw(i32 %a, i32 %b) {
%x = call %ov.result.32 @llvm.smul.with.overflow.i32(i32 %A, i32 %B)
ret %ov.result.32 %x
; CHECK-LABEL: @smultest1_nsw
-; CHECK: %x = mul nsw i32 %A, %B
+; CHECK: %x = mul nuw nsw i32 %A, %B
; CHECK-NEXT: %1 = insertvalue %ov.result.32 { i32 undef, i1 false }, i32 %x, 0
; CHECK-NEXT: ret %ov.result.32 %1
}
diff --git a/llvm/test/Transforms/InstCombine/mul.ll b/llvm/test/Transforms/InstCombine/mul.ll
index d19338a3c8f..a81ba726387 100644
--- a/llvm/test/Transforms/InstCombine/mul.ll
+++ b/llvm/test/Transforms/InstCombine/mul.ll
@@ -258,12 +258,24 @@ define i32 @test28(i32 %A) {
define i64 @test29(i31 %A, i31 %B) {
; CHECK-LABEL: @test29(
- %C = zext i31 %A to i64
- %D = zext i31 %B to i64
+ %C = sext i31 %A to i64
+ %D = sext i31 %B to i64
%E = mul i64 %C, %D
ret i64 %E
-; CHECK: %[[zext1:.*]] = zext i31 %A to i64
-; CHECK-NEXT: %[[zext2:.*]] = zext i31 %B to i64
-; CHECK-NEXT: %[[mul:.*]] = mul nsw i64 %[[zext1]], %[[zext2]]
+; CHECK: %[[sext1:.*]] = sext i31 %A to i64
+; CHECK-NEXT: %[[sext2:.*]] = sext i31 %B to i64
+; CHECK-NEXT: %[[mul:.*]] = mul nsw i64 %[[sext1]], %[[sext2]]
+; CHECK-NEXT: ret i64 %[[mul]]
+}
+
+define i64 @test30(i32 %A, i32 %B) {
+; CHECK-LABEL: @test30(
+ %C = zext i32 %A to i64
+ %D = zext i32 %B to i64
+ %E = mul i64 %C, %D
+ ret i64 %E
+; CHECK: %[[zext1:.*]] = zext i32 %A to i64
+; CHECK-NEXT: %[[zext2:.*]] = zext i32 %B to i64
+; CHECK-NEXT: %[[mul:.*]] = mul nuw i64 %[[zext1]], %[[zext2]]
; CHECK-NEXT: ret i64 %[[mul]]
}
OpenPOWER on IntegriCloud