diff options
author | Chris Lattner <sabre@nondot.org> | 2003-02-10 18:16:36 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-02-10 18:16:36 +0000 |
commit | 4f2cfc0d746683aaf91801ff93306c51bbfc6e3c (patch) | |
tree | f8a370c3a017aa7f0f989bc75510573b255bc5a2 /lib/Analysis/DataStructure/TopDownClosure.cpp | |
parent | 88c7294b80653f6e74b00acf27c1adb2d7c87de8 (diff) |
Rearrange code
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5527 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DataStructure/TopDownClosure.cpp')
-rw-r--r-- | lib/Analysis/DataStructure/TopDownClosure.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/lib/Analysis/DataStructure/TopDownClosure.cpp b/lib/Analysis/DataStructure/TopDownClosure.cpp index 269a9a4199..de6233d4c8 100644 --- a/lib/Analysis/DataStructure/TopDownClosure.cpp +++ b/lib/Analysis/DataStructure/TopDownClosure.cpp @@ -103,6 +103,15 @@ void TDDataStructures::calculateGraph(Function &F) { // Get the current functions graph... DSGraph &Graph = getOrCreateDSGraph(F); + // Recompute the Incomplete markers and eliminate unreachable nodes. + Graph.maskIncompleteMarkers(); + // FIXME: Need to check if all callers have been found, or rather if a + // funcpointer escapes! + unsigned Flags = F.hasInternalLinkage() ? + DSGraph::IgnoreFormalArgs : DSGraph::MarkFormalArgs; + Graph.markIncompleteNodes(Flags | DSGraph::IgnoreGlobals); + Graph.removeDeadNodes(DSGraph::RemoveUnreachableGlobals); + const std::vector<DSCallSite> &CallSites = Graph.getFunctionCalls(); if (CallSites.empty()) { DEBUG(std::cerr << " [TD] No callees for: " << F.getName() << "\n"); @@ -153,7 +162,8 @@ void TDDataStructures::calculateGraph(Function &F) { hash_map<const DSNode*, DSNodeHandle> OldNodeMap; CG.cloneInto(Graph, OldValMap, OldNodeMap, DSGraph::StripModRefBits | - DSGraph::KeepAllocaBit | DSGraph::DontCloneCallNodes); + DSGraph::KeepAllocaBit | DSGraph::DontCloneCallNodes | + DSGraph::DontCloneAuxCallNodes); OldValMap.clear(); // We don't care about the ValMap // Loop over all of the invocation sites of the callee, resolving @@ -194,8 +204,9 @@ void TDDataStructures::calculateGraph(Function &F) { OldNodeMap.clear(); // Recompute the Incomplete markers and eliminate unreachable nodes. + CG.removeTriviallyDeadNodes(); CG.maskIncompleteMarkers(); - CG.markIncompleteNodes(DSGraph::MarkFormalArgs); + CG.markIncompleteNodes(DSGraph::MarkFormalArgs |DSGraph::IgnoreGlobals); CG.removeDeadNodes(DSGraph::RemoveUnreachableGlobals); } @@ -212,14 +223,5 @@ void TDDataStructures::calculateGraph(Function &F) { calculateGraph(*I->first); } } - - // Recompute the Incomplete markers and eliminate unreachable nodes. - Graph.maskIncompleteMarkers(); - // FIXME: Need to check if all callers have been found, or rather if a - // funcpointer escapes! - unsigned Flags = F.hasInternalLinkage() ? - DSGraph::IgnoreFormalArgs : DSGraph::MarkFormalArgs; - Graph.markIncompleteNodes(Flags | DSGraph::IgnoreGlobals); - Graph.removeDeadNodes(DSGraph::RemoveUnreachableGlobals); } |