diff options
-rw-r--r-- | llvm/test/Transforms/InstCombine/add.ll | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/add.ll b/llvm/test/Transforms/InstCombine/add.ll index abf81a58c30..a6a305bd41b 100644 --- a/llvm/test/Transforms/InstCombine/add.ll +++ b/llvm/test/Transforms/InstCombine/add.ll @@ -947,3 +947,30 @@ define i32 @add_not_increment_commuted(i32 %A, i32 %B) { ret i32 %E } +; E = (A + ~B) + 1 = A - B +define i32 @add_to_sub(i32 %A, i32 %B) { +; CHECK-LABEL: @add_to_sub( +; CHECK-NEXT: [[C:%.*]] = xor i32 [[B:%.*]], -1 +; CHECK-NEXT: [[D:%.*]] = add i32 [[C]], [[A:%.*]] +; CHECK-NEXT: [[E:%.*]] = add i32 [[D]], 1 +; CHECK-NEXT: ret i32 [[E]] +; + %C = xor i32 %B, -1 + %D = add i32 %A, %C + %E = add i32 %D, 1 + ret i32 %E +} + +; E = (~B + A) + 1 = A - B +define i32 @add_to_sub2(i32 %A, i32 %B) { +; CHECK-LABEL: @add_to_sub2( +; CHECK-NEXT: [[C:%.*]] = xor i32 [[B:%.*]], -1 +; CHECK-NEXT: [[D:%.*]] = add i32 [[C]], [[A:%.*]] +; CHECK-NEXT: [[E:%.*]] = add i32 [[D]], 1 +; CHECK-NEXT: ret i32 [[E]] +; + %C = xor i32 %B, -1 + %D = add i32 %C, %A + %E = add i32 %D, 1 + ret i32 %E +} |