[NFC] Add API for edge domination check in dom tree
diff --git a/llvm/unittests/IR/DominatorTreeTest.cpp b/llvm/unittests/IR/DominatorTreeTest.cpp
index 22d2003..66e1227 100644
--- a/llvm/unittests/IR/DominatorTreeTest.cpp
+++ b/llvm/unittests/IR/DominatorTreeTest.cpp
@@ -1020,3 +1020,54 @@
EXPECT_TRUE(DT.verify());
}
+TEST(DominatorTree, EdgeDomination) {
+ StringRef ModuleString = "define i32 @f(i1 %cond) {\n"
+ " bb0:\n"
+ " br i1 %cond, label %bb1, label %bb2\n"
+ " bb1:\n"
+ " br label %bb3\n"
+ " bb2:\n"
+ " br label %bb3\n"
+ " bb3:\n"
+ " ret i32 4"
+ "}\n";
+
+ // Parse the module.
+ LLVMContext Context;
+ std::unique_ptr<Module> M = makeLLVMModule(Context, ModuleString);
+
+ runWithDomTree(*M, "f",
+ [&](Function &F, DominatorTree *DT, PostDominatorTree *PDT) {
+ Function::iterator FI = F.begin();
+
+ BasicBlock *BB0 = &*FI++;
+ BasicBlock *BB1 = &*FI++;
+ BasicBlock *BB2 = &*FI++;
+ BasicBlock *BB3 = &*FI++;
+
+ BasicBlockEdge E01(BB0, BB1);
+ BasicBlockEdge E02(BB0, BB2);
+ BasicBlockEdge E13(BB1, BB3);
+ BasicBlockEdge E23(BB2, BB3);
+
+ EXPECT_TRUE(DT->dominates(E01, E01));
+ EXPECT_FALSE(DT->dominates(E01, E02));
+ EXPECT_TRUE(DT->dominates(E01, E13));
+ EXPECT_FALSE(DT->dominates(E01, E23));
+
+ EXPECT_FALSE(DT->dominates(E02, E01));
+ EXPECT_TRUE(DT->dominates(E02, E02));
+ EXPECT_FALSE(DT->dominates(E02, E13));
+ EXPECT_TRUE(DT->dominates(E02, E23));
+
+ EXPECT_FALSE(DT->dominates(E13, E01));
+ EXPECT_FALSE(DT->dominates(E13, E02));
+ EXPECT_TRUE(DT->dominates(E13, E13));
+ EXPECT_FALSE(DT->dominates(E13, E23));
+
+ EXPECT_FALSE(DT->dominates(E23, E01));
+ EXPECT_FALSE(DT->dominates(E23, E02));
+ EXPECT_FALSE(DT->dominates(E23, E13));
+ EXPECT_TRUE(DT->dominates(E23, E23));
+ });
+}