summaryrefslogtreecommitdiff
path: root/unittests
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-05-04 09:38:23 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-05-04 09:38:23 +0000
commit57a38b856ee453772c6b2b98a1470b051565f41b (patch)
treea2204b0f36649d2c02e8c6a20bee9dde28d8ad3f /unittests
parent98ff665d9ee5bebbe72a0dab35dc7c5c1a81ce9c (diff)
downloadllvm-57a38b856ee453772c6b2b98a1470b051565f41b.tar.gz
llvm-57a38b856ee453772c6b2b98a1470b051565f41b.tar.bz2
llvm-57a38b856ee453772c6b2b98a1470b051565f41b.tar.xz
[LCG] Reorder the tests to be a bit more logical: inter-SCC mutation
before intra-SCC mutation, insertion before removal. No functionality changed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207934 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r--unittests/Analysis/LazyCallGraphTest.cpp106
1 files changed, 53 insertions, 53 deletions
diff --git a/unittests/Analysis/LazyCallGraphTest.cpp b/unittests/Analysis/LazyCallGraphTest.cpp
index 039206a1d7..40bccd217d 100644
--- a/unittests/Analysis/LazyCallGraphTest.cpp
+++ b/unittests/Analysis/LazyCallGraphTest.cpp
@@ -373,6 +373,59 @@ TEST(LazyCallGraphTest, MultiArmSCC) {
EXPECT_EQ(&SCC, CG.lookupSCC(E));
}
+TEST(LazyCallGraphTest, OutgoingSCCEdgeInsertion) {
+ std::unique_ptr<Module> M = parseAssembly(
+ "define void @a() {\n"
+ "entry:\n"
+ " call void @b()\n"
+ " call void @c()\n"
+ " ret void\n"
+ "}\n"
+ "define void @b() {\n"
+ "entry:\n"
+ " call void @d()\n"
+ " ret void\n"
+ "}\n"
+ "define void @c() {\n"
+ "entry:\n"
+ " call void @d()\n"
+ " ret void\n"
+ "}\n"
+ "define void @d() {\n"
+ "entry:\n"
+ " ret void\n"
+ "}\n");
+ LazyCallGraph CG(*M);
+
+ // Force the graph to be fully expanded.
+ for (LazyCallGraph::SCC &C : CG.postorder_sccs())
+ (void)C;
+
+ LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
+ LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
+ LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
+ LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
+ LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
+ LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
+ LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
+ LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
+ EXPECT_TRUE(AC.isAncestorOf(BC));
+ EXPECT_TRUE(AC.isAncestorOf(CC));
+ EXPECT_TRUE(AC.isAncestorOf(DC));
+ EXPECT_TRUE(DC.isDescendantOf(AC));
+ EXPECT_TRUE(DC.isDescendantOf(BC));
+ EXPECT_TRUE(DC.isDescendantOf(CC));
+
+ EXPECT_EQ(2, std::distance(A.begin(), A.end()));
+ AC.insertOutgoingEdge(A, D);
+ EXPECT_EQ(3, std::distance(A.begin(), A.end()));
+ EXPECT_TRUE(AC.isParentOf(DC));
+ EXPECT_EQ(&AC, CG.lookupSCC(A));
+ EXPECT_EQ(&BC, CG.lookupSCC(B));
+ EXPECT_EQ(&CC, CG.lookupSCC(C));
+ EXPECT_EQ(&DC, CG.lookupSCC(D));
+}
+
TEST(LazyCallGraphTest, InterSCCEdgeRemoval) {
std::unique_ptr<Module> M = parseAssembly(
"define void @a() {\n"
@@ -452,59 +505,6 @@ TEST(LazyCallGraphTest, IntraSCCEdgeInsertion) {
EXPECT_EQ(&SCC, CG1.lookupSCC(C));
}
-TEST(LazyCallGraphTest, OutgoingSCCEdgeInsertion) {
- std::unique_ptr<Module> M = parseAssembly(
- "define void @a() {\n"
- "entry:\n"
- " call void @b()\n"
- " call void @c()\n"
- " ret void\n"
- "}\n"
- "define void @b() {\n"
- "entry:\n"
- " call void @d()\n"
- " ret void\n"
- "}\n"
- "define void @c() {\n"
- "entry:\n"
- " call void @d()\n"
- " ret void\n"
- "}\n"
- "define void @d() {\n"
- "entry:\n"
- " ret void\n"
- "}\n");
- LazyCallGraph CG(*M);
-
- // Force the graph to be fully expanded.
- for (LazyCallGraph::SCC &C : CG.postorder_sccs())
- (void)C;
-
- LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a"));
- LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b"));
- LazyCallGraph::Node &C = *CG.lookup(lookupFunction(*M, "c"));
- LazyCallGraph::Node &D = *CG.lookup(lookupFunction(*M, "d"));
- LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
- LazyCallGraph::SCC &BC = *CG.lookupSCC(B);
- LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
- LazyCallGraph::SCC &DC = *CG.lookupSCC(D);
- EXPECT_TRUE(AC.isAncestorOf(BC));
- EXPECT_TRUE(AC.isAncestorOf(CC));
- EXPECT_TRUE(AC.isAncestorOf(DC));
- EXPECT_TRUE(DC.isDescendantOf(AC));
- EXPECT_TRUE(DC.isDescendantOf(BC));
- EXPECT_TRUE(DC.isDescendantOf(CC));
-
- EXPECT_EQ(2, std::distance(A.begin(), A.end()));
- AC.insertOutgoingEdge(A, D);
- EXPECT_EQ(3, std::distance(A.begin(), A.end()));
- EXPECT_TRUE(AC.isParentOf(DC));
- EXPECT_EQ(&AC, CG.lookupSCC(A));
- EXPECT_EQ(&BC, CG.lookupSCC(B));
- EXPECT_EQ(&CC, CG.lookupSCC(C));
- EXPECT_EQ(&DC, CG.lookupSCC(D));
-}
-
TEST(LazyCallGraphTest, IntraSCCEdgeRemoval) {
// A nice fully connected (including self-edges) SCC.
std::unique_ptr<Module> M1 = parseAssembly(