summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/Transforms/InstCombine/add.ll27
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
+}
OpenPOWER on IntegriCloud