[llvm] a968bee - [InstCombine] Add more tests for phi to cond fold (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 1 06:48:03 PST 2022
Author: Nikita Popov
Date: 2022-03-01T15:47:55+01:00
New Revision: a968bee093ecb11c556167b6d72256516222f33f
URL: https://github.com/llvm/llvm-project/commit/a968bee093ecb11c556167b6d72256516222f33f
DIFF: https://github.com/llvm/llvm-project/commit/a968bee093ecb11c556167b6d72256516222f33f.diff
LOG: [InstCombine] Add more tests for phi to cond fold (NFC)
These have more than two predecessors.
Added:
Modified:
llvm/test/Transforms/InstCombine/simple_phi_condition.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/simple_phi_condition.ll b/llvm/test/Transforms/InstCombine/simple_phi_condition.ll
index 3760ea1410429..8a3ea4ca4c277 100644
--- a/llvm/test/Transforms/InstCombine/simple_phi_condition.ll
+++ b/llvm/test/Transforms/InstCombine/simple_phi_condition.ll
@@ -134,3 +134,111 @@ merge:
%ret = phi i1 [false, %if.true.end], [true, %if.false]
ret i1 %ret
}
+
+define i1 @test_multiple_predecessors(i1 %cond, i1 %cond2) {
+; CHECK-LABEL: @test_multiple_predecessors(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
+; CHECK: if.true:
+; CHECK-NEXT: br label [[MERGE:%.*]]
+; CHECK: if.false:
+; CHECK-NEXT: br i1 [[COND2:%.*]], label [[IF2_TRUE:%.*]], label [[IF2_FALSE:%.*]]
+; CHECK: if2.true:
+; CHECK-NEXT: br label [[MERGE]]
+; CHECK: if2.false:
+; CHECK-NEXT: br label [[MERGE]]
+; CHECK: merge:
+; CHECK-NEXT: [[RET:%.*]] = phi i1 [ true, [[IF_TRUE]] ], [ false, [[IF2_TRUE]] ], [ false, [[IF2_FALSE]] ]
+; CHECK-NEXT: ret i1 [[RET]]
+;
+entry:
+ br i1 %cond, label %if.true, label %if.false
+
+if.true:
+ br label %merge
+
+if.false:
+ br i1 %cond2, label %if2.true, label %if2.false
+
+if2.true:
+ br label %merge
+
+if2.false:
+ br label %merge
+
+merge:
+ %ret = phi i1 [ true, %if.true ], [ false, %if2.true ], [ false, %if2.false ]
+ ret i1 %ret
+}
+
+define i1 @test_multiple_predecessors_wrong_value(i1 %cond, i1 %cond2) {
+; CHECK-LABEL: @test_multiple_predecessors_wrong_value(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
+; CHECK: if.true:
+; CHECK-NEXT: br label [[MERGE:%.*]]
+; CHECK: if.false:
+; CHECK-NEXT: br i1 [[COND2:%.*]], label [[IF2_TRUE:%.*]], label [[IF2_FALSE:%.*]]
+; CHECK: if2.true:
+; CHECK-NEXT: br label [[MERGE]]
+; CHECK: if2.false:
+; CHECK-NEXT: br label [[MERGE]]
+; CHECK: merge:
+; CHECK-NEXT: [[RET:%.*]] = phi i1 [ true, [[IF_TRUE]] ], [ true, [[IF2_TRUE]] ], [ false, [[IF2_FALSE]] ]
+; CHECK-NEXT: ret i1 [[RET]]
+;
+entry:
+ br i1 %cond, label %if.true, label %if.false
+
+if.true:
+ br label %merge
+
+if.false:
+ br i1 %cond2, label %if2.true, label %if2.false
+
+if2.true:
+ br label %merge
+
+if2.false:
+ br label %merge
+
+merge:
+ %ret = phi i1 [ true, %if.true ], [ true, %if2.true ], [ false, %if2.false ]
+ ret i1 %ret
+}
+
+define i1 @test_multiple_predecessors_no_edge_domination(i1 %cond, i1 %cond2) {
+; CHECK-LABEL: @test_multiple_predecessors_no_edge_domination(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
+; CHECK: if.true:
+; CHECK-NEXT: br i1 [[COND2:%.*]], label [[MERGE:%.*]], label [[IF_FALSE]]
+; CHECK: if.false:
+; CHECK-NEXT: br i1 [[COND2]], label [[IF2_TRUE:%.*]], label [[IF2_FALSE:%.*]]
+; CHECK: if2.true:
+; CHECK-NEXT: br label [[MERGE]]
+; CHECK: if2.false:
+; CHECK-NEXT: br label [[MERGE]]
+; CHECK: merge:
+; CHECK-NEXT: [[RET:%.*]] = phi i1 [ true, [[IF_TRUE]] ], [ false, [[IF2_TRUE]] ], [ false, [[IF2_FALSE]] ]
+; CHECK-NEXT: ret i1 [[RET]]
+;
+entry:
+ br i1 %cond, label %if.true, label %if.false
+
+if.true:
+ br i1 %cond2, label %merge, label %if.false
+
+if.false:
+ br i1 %cond2, label %if2.true, label %if2.false
+
+if2.true:
+ br label %merge
+
+if2.false:
+ br label %merge
+
+merge:
+ %ret = phi i1 [ true, %if.true ], [ false, %if2.true ], [ false, %if2.false ]
+ ret i1 %ret
+}
More information about the llvm-commits
mailing list