diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-06-24 21:37:03 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-06-24 21:37:03 +0000 |
| commit | 80258425999be15db29b18a3aecda7fb3db37ea6 (patch) | |
| tree | 1957b9d7e84077ff437abaf09e4bfd27d115a600 /llvm/test/Transforms | |
| parent | 5d82ecd5d952bbd92dc356bd9220be818f64993e (diff) | |
| download | bcm5719-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.ll | 52 |
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 +} |

