diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2014-04-23 23:12:06 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2014-04-23 23:12:06 +0000 |
commit | 31d2477c683f3c411195a896b852af286d49cfcb (patch) | |
tree | 4e15b9351fcaff55a38ff5c90c5906d4fb950d3d /unittests/Analysis | |
parent | e69ea7d8ae951f115511580a913c5802a9843659 (diff) | |
download | llvm-31d2477c683f3c411195a896b852af286d49cfcb.tar.gz llvm-31d2477c683f3c411195a896b852af286d49cfcb.tar.bz2 llvm-31d2477c683f3c411195a896b852af286d49cfcb.tar.xz |
[LCG] Switch the SCC lookup to be in terms of call graph nodes rather
than functions. So far, this access pattern is *much* more common. It
seems likely that any user of this interface is going to have nodes at
the point that they are querying the SCCs.
No functionality changed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207045 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/Analysis')
-rw-r--r-- | unittests/Analysis/LazyCallGraphTest.cpp | 70 |
1 files changed, 35 insertions, 35 deletions
diff --git a/unittests/Analysis/LazyCallGraphTest.cpp b/unittests/Analysis/LazyCallGraphTest.cpp index b08a3c51ec..a880c64d50 100644 --- a/unittests/Analysis/LazyCallGraphTest.cpp +++ b/unittests/Analysis/LazyCallGraphTest.cpp @@ -293,16 +293,16 @@ TEST(LazyCallGraphTest, MultiArmSCC) { LazyCallGraph::SCC *SCC = *SCCI++; EXPECT_EQ(CG.postorder_scc_end(), SCCI); - 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::Node *E = CG.lookup(lookupFunction(*M, "e")); - EXPECT_EQ(SCC, CG.lookupSCC(A->getFunction())); - EXPECT_EQ(SCC, CG.lookupSCC(B->getFunction())); - EXPECT_EQ(SCC, CG.lookupSCC(C->getFunction())); - EXPECT_EQ(SCC, CG.lookupSCC(D->getFunction())); - EXPECT_EQ(SCC, CG.lookupSCC(E->getFunction())); + 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::Node &E = *CG.lookup(lookupFunction(*M, "e")); + EXPECT_EQ(SCC, CG.lookupSCC(A)); + EXPECT_EQ(SCC, CG.lookupSCC(B)); + EXPECT_EQ(SCC, CG.lookupSCC(C)); + EXPECT_EQ(SCC, CG.lookupSCC(D)); + EXPECT_EQ(SCC, CG.lookupSCC(E)); } TEST(LazyCallGraphTest, InterSCCEdgeRemoval) { @@ -322,20 +322,20 @@ TEST(LazyCallGraphTest, InterSCCEdgeRemoval) { 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::SCC *AC = CG.lookupSCC(lookupFunction(*M, "a")); - LazyCallGraph::SCC *BC = CG.lookupSCC(lookupFunction(*M, "b")); + LazyCallGraph::Node &A = *CG.lookup(lookupFunction(*M, "a")); + LazyCallGraph::Node &B = *CG.lookup(lookupFunction(*M, "b")); + LazyCallGraph::SCC &AC = *CG.lookupSCC(A); + LazyCallGraph::SCC &BC = *CG.lookupSCC(B); - EXPECT_EQ("b", A->begin()->getFunction().getName()); - EXPECT_EQ(B->end(), B->begin()); - EXPECT_EQ(AC, *BC->parent_begin()); + EXPECT_EQ("b", A.begin()->getFunction().getName()); + EXPECT_EQ(B.end(), B.begin()); + EXPECT_EQ(&AC, *BC.parent_begin()); - CG.removeEdge(*A, lookupFunction(*M, "b")); + CG.removeEdge(A, lookupFunction(*M, "b")); - EXPECT_EQ(A->end(), A->begin()); - EXPECT_EQ(B->end(), B->begin()); - EXPECT_EQ(BC->parent_end(), BC->parent_begin()); + EXPECT_EQ(A.end(), A.begin()); + EXPECT_EQ(B.end(), B.begin()); + EXPECT_EQ(BC.parent_end(), BC.parent_begin()); } TEST(LazyCallGraphTest, IntraSCCEdgeRemoval) { @@ -369,27 +369,27 @@ TEST(LazyCallGraphTest, IntraSCCEdgeRemoval) { LazyCallGraph::SCC *SCC = *SCCI++; EXPECT_EQ(CG1.postorder_scc_end(), SCCI); - LazyCallGraph::Node *A = CG1.lookup(lookupFunction(*M1, "a")); - LazyCallGraph::Node *B = CG1.lookup(lookupFunction(*M1, "b")); - LazyCallGraph::Node *C = CG1.lookup(lookupFunction(*M1, "c")); - EXPECT_EQ(SCC, CG1.lookupSCC(A->getFunction())); - EXPECT_EQ(SCC, CG1.lookupSCC(B->getFunction())); - EXPECT_EQ(SCC, CG1.lookupSCC(C->getFunction())); + LazyCallGraph::Node &A = *CG1.lookup(lookupFunction(*M1, "a")); + LazyCallGraph::Node &B = *CG1.lookup(lookupFunction(*M1, "b")); + LazyCallGraph::Node &C = *CG1.lookup(lookupFunction(*M1, "c")); + EXPECT_EQ(SCC, CG1.lookupSCC(A)); + EXPECT_EQ(SCC, CG1.lookupSCC(B)); + EXPECT_EQ(SCC, CG1.lookupSCC(C)); // Remove the edge from b -> a, which should leave the 3 functions still in // a single connected component because of a -> b -> c -> a. - CG1.removeEdge(*B, A->getFunction()); - EXPECT_EQ(SCC, CG1.lookupSCC(A->getFunction())); - EXPECT_EQ(SCC, CG1.lookupSCC(B->getFunction())); - EXPECT_EQ(SCC, CG1.lookupSCC(C->getFunction())); + CG1.removeEdge(B, A.getFunction()); + EXPECT_EQ(SCC, CG1.lookupSCC(A)); + EXPECT_EQ(SCC, CG1.lookupSCC(B)); + EXPECT_EQ(SCC, CG1.lookupSCC(C)); // Remove the edge from c -> a, which should leave 'a' in the original SCC // and form a new SCC for 'b' and 'c'. - CG1.removeEdge(*C, A->getFunction()); - EXPECT_EQ(SCC, CG1.lookupSCC(A->getFunction())); + CG1.removeEdge(C, A.getFunction()); + EXPECT_EQ(SCC, CG1.lookupSCC(A)); EXPECT_EQ(1, std::distance(SCC->begin(), SCC->end())); - LazyCallGraph::SCC *SCC2 = CG1.lookupSCC(B->getFunction()); - EXPECT_EQ(SCC2, CG1.lookupSCC(C->getFunction())); + LazyCallGraph::SCC *SCC2 = CG1.lookupSCC(B); + EXPECT_EQ(SCC2, CG1.lookupSCC(C)); } } |