diff options
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 +} |

