aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/DataStructure/TopDownClosure.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-02-10 18:16:36 +0000
committerChris Lattner <sabre@nondot.org>2003-02-10 18:16:36 +0000
commit4f2cfc0d746683aaf91801ff93306c51bbfc6e3c (patch)
treef8a370c3a017aa7f0f989bc75510573b255bc5a2 /lib/Analysis/DataStructure/TopDownClosure.cpp
parent88c7294b80653f6e74b00acf27c1adb2d7c87de8 (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.cpp24
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);
}