OSDN Git Service

Add test case for add to sub transformation. NFC
authorAmaury Sechet <deadalnix@gmail.com>
Sat, 2 Mar 2019 20:12:25 +0000 (20:12 +0000)
committerAmaury Sechet <deadalnix@gmail.com>
Sat, 2 Mar 2019 20:12:25 +0000 (20:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355277 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/add.ll

index abf81a5..a6a305b 100644 (file)
@@ -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
+}