summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-06-24 21:37:03 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-06-24 21:37:03 +0000
commit80258425999be15db29b18a3aecda7fb3db37ea6 (patch)
tree1957b9d7e84077ff437abaf09e4bfd27d115a600 /llvm/test/Transforms
parent5d82ecd5d952bbd92dc356bd9220be818f64993e (diff)
downloadbcm5719-llvm-80258425999be15db29b18a3aecda7fb3db37ea6.tar.gz
bcm5719-llvm-80258425999be15db29b18a3aecda7fb3db37ea6.zip
InstCombine: Preserve nuw when reassociating nuw ops [3/3]
Alive says this is OK. llvm-svn: 364235
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/InstCombine/reassociate-nuw.ll52
1 files changed, 50 insertions, 2 deletions
diff --git a/llvm/test/Transforms/InstCombine/reassociate-nuw.ll b/llvm/test/Transforms/InstCombine/reassociate-nuw.ll
index 22ad8c259d4..a40d427fd29 100644
--- a/llvm/test/Transforms/InstCombine/reassociate-nuw.ll
+++ b/llvm/test/Transforms/InstCombine/reassociate-nuw.ll
@@ -92,7 +92,7 @@ define i32 @reassoc_x2_sub_nuw(i32 %x, i32 %y) {
define i32 @tryFactorization_add_nuw_mul_nuw(i32 %x) {
; CHECK-LABEL: @tryFactorization_add_nuw_mul_nuw(
-; CHECK-NEXT: [[ADD2:%.*]] = shl i32 [[X:%.*]], 2
+; CHECK-NEXT: [[ADD2:%.*]] = shl nuw i32 [[X:%.*]], 2
; CHECK-NEXT: ret i32 [[ADD2]]
;
%mul1 = mul nuw i32 %x, 3
@@ -102,7 +102,7 @@ define i32 @tryFactorization_add_nuw_mul_nuw(i32 %x) {
define i32 @tryFactorization_add_nuw_mul_nuw_int_max(i32 %x) {
; CHECK-LABEL: @tryFactorization_add_nuw_mul_nuw_int_max(
-; CHECK-NEXT: [[ADD2:%.*]] = shl i32 [[X:%.*]], 31
+; CHECK-NEXT: [[ADD2:%.*]] = shl nuw i32 [[X:%.*]], 31
; CHECK-NEXT: ret i32 [[ADD2]]
;
%mul1 = mul nuw i32 %x, 2147483647
@@ -129,3 +129,51 @@ define i32 @tryFactorization_add_nuw_mul(i32 %x) {
%add2 = add i32 %mul1, %x
ret i32 %add2
}
+
+define i32 @tryFactorization_add_nuw_mul_nuw_mul_nuw_var(i32 %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @tryFactorization_add_nuw_mul_nuw_mul_nuw_var(
+; CHECK-NEXT: [[MUL21:%.*]] = add i32 [[Y:%.*]], [[Z:%.*]]
+; CHECK-NEXT: [[ADD1:%.*]] = mul nuw i32 [[MUL21]], [[X:%.*]]
+; CHECK-NEXT: ret i32 [[ADD1]]
+;
+ %mul1 = mul nuw i32 %x, %y
+ %mul2 = mul nuw i32 %x, %z
+ %add1 = add nuw i32 %mul1, %mul2
+ ret i32 %add1
+}
+
+define i32 @tryFactorization_add_nuw_mul_mul_nuw_var(i32 %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @tryFactorization_add_nuw_mul_mul_nuw_var(
+; CHECK-NEXT: [[MUL21:%.*]] = add i32 [[Y:%.*]], [[Z:%.*]]
+; CHECK-NEXT: [[ADD1:%.*]] = mul i32 [[MUL21]], [[X:%.*]]
+; CHECK-NEXT: ret i32 [[ADD1]]
+;
+ %mul1 = mul i32 %x, %y
+ %mul2 = mul nuw i32 %x, %z
+ %add1 = add nuw i32 %mul1, %mul2
+ ret i32 %add1
+}
+
+define i32 @tryFactorization_add_nuw_mul_nuw_mul_var(i32 %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @tryFactorization_add_nuw_mul_nuw_mul_var(
+; CHECK-NEXT: [[MUL21:%.*]] = add i32 [[Y:%.*]], [[Z:%.*]]
+; CHECK-NEXT: [[ADD1:%.*]] = mul i32 [[MUL21]], [[X:%.*]]
+; CHECK-NEXT: ret i32 [[ADD1]]
+;
+ %mul1 = mul nuw i32 %x, %y
+ %mul2 = mul i32 %x, %z
+ %add1 = add nuw i32 %mul1, %mul2
+ ret i32 %add1
+}
+
+define i32 @tryFactorization_add_mul_nuw_mul_var(i32 %x, i32 %y, i32 %z) {
+; CHECK-LABEL: @tryFactorization_add_mul_nuw_mul_var(
+; CHECK-NEXT: [[MUL21:%.*]] = add i32 [[Y:%.*]], [[Z:%.*]]
+; CHECK-NEXT: [[ADD1:%.*]] = mul i32 [[MUL21]], [[X:%.*]]
+; CHECK-NEXT: ret i32 [[ADD1]]
+;
+ %mul1 = mul nuw i32 %x, %y
+ %mul2 = mul nuw i32 %x, %z
+ %add1 = add i32 %mul1, %mul2
+ ret i32 %add1
+}
OpenPOWER on IntegriCloud