summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-01-23 22:05:33 +0000
committerChris Lattner <sabre@nondot.org>2003-01-23 22:05:33 +0000
commita1d9011d6ed1ccf92ba8380bde0bdef65d893ba9 (patch)
tree6649fee192ba9b15169b61f4a15273c359321aa5
parent98034fa4079fecd7e506d3890412158dd7ae5711 (diff)
downloadbcm5719-llvm-a1d9011d6ed1ccf92ba8380bde0bdef65d893ba9.tar.gz
bcm5719-llvm-a1d9011d6ed1ccf92ba8380bde0bdef65d893ba9.zip
* Eliminate boolean arguments in favor of using enums
* T-D pass now eliminates unreachable globals llvm-svn: 5419
-rw-r--r--llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp12
-rw-r--r--llvm/lib/Analysis/DataStructure/DataStructure.cpp13
-rw-r--r--llvm/lib/Analysis/DataStructure/Local.cpp4
-rw-r--r--llvm/lib/Analysis/DataStructure/Steensgaard.cpp4
-rw-r--r--llvm/lib/Analysis/DataStructure/TopDownClosure.cpp5
5 files changed, 20 insertions, 18 deletions
diff --git a/llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp b/llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp
index c7fb42d860e..d1c96261dcc 100644
--- a/llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp
+++ b/llvm/lib/Analysis/DataStructure/BottomUpClosure.cpp
@@ -364,8 +364,8 @@ DSGraph &BUDataStructures::calculateGraph(Function &F) {
// Recompute the Incomplete markers. If there are any function calls left
// now that are complete, we must loop!
Graph.maskIncompleteMarkers();
- Graph.markIncompleteNodes();
- Graph.removeDeadNodes();
+ Graph.markIncompleteNodes(DSGraph::MarkFormalArgs);
+ Graph.removeDeadNodes(DSGraph::KeepUnreachableGlobals);
DEBUG(std::cerr << " [BU] Done inlining: " << F.getName() << " ["
<< Graph.getGraphSize() << "+" << Graph.getAuxFunctionCalls().size()
@@ -440,8 +440,8 @@ DSGraph &BUDataStructures::inlineNonSCCGraphs(Function &F,
// Recompute the Incomplete markers. If there are any function calls left
// now that are complete, we must loop!
Graph.maskIncompleteMarkers();
- Graph.markIncompleteNodes();
- Graph.removeDeadNodes();
+ Graph.markIncompleteNodes(DSGraph::MarkFormalArgs);
+ Graph.removeDeadNodes(DSGraph::KeepUnreachableGlobals);
DEBUG(std::cerr << " [BU] Done Non-SCC inlining: " << F.getName() << " ["
<< Graph.getGraphSize() << "+" << Graph.getAuxFunctionCalls().size()
@@ -535,8 +535,8 @@ DSGraph &BUDataStructures::calculateSCCGraph(Function &F,
// Recompute the Incomplete markers. If there are any function calls left
// now that are complete, we must loop!
Graph.maskIncompleteMarkers();
- Graph.markIncompleteNodes();
- Graph.removeDeadNodes();
+ Graph.markIncompleteNodes(DSGraph::MarkFormalArgs);
+ Graph.removeDeadNodes(DSGraph::KeepUnreachableGlobals);
DEBUG(std::cerr << " [BU] Done inlining: " << F.getName() << " ["
<< Graph.getGraphSize() << "+" << Graph.getAuxFunctionCalls().size()
diff --git a/llvm/lib/Analysis/DataStructure/DataStructure.cpp b/llvm/lib/Analysis/DataStructure/DataStructure.cpp
index 0e61f037813..f15195114a8 100644
--- a/llvm/lib/Analysis/DataStructure/DataStructure.cpp
+++ b/llvm/lib/Analysis/DataStructure/DataStructure.cpp
@@ -785,9 +785,9 @@ static void markIncomplete(DSCallSite &Call) {
// scope of current analysis may have modified it), the 'Incomplete' flag is
// added to the NodeType.
//
-void DSGraph::markIncompleteNodes(bool markFormalArgs) {
+void DSGraph::markIncompleteNodes(unsigned Flags) {
// Mark any incoming arguments as incomplete...
- if (markFormalArgs && Func)
+ if ((Flags & DSGraph::MarkFormalArgs) && Func)
for (Function::aiterator I = Func->abegin(), E = Func->aend(); I != E; ++I)
if (isPointerType(I->getType()) && ScalarMap.find(I) != ScalarMap.end())
markIncompleteNode(ScalarMap[I].getNode());
@@ -1010,7 +1010,7 @@ static void markAlive(DSCallSite &CS, std::set<DSNode*> &Alive) {
// from the caller's graph entirely. This is only appropriate to use when
// inlining graphs.
//
-void DSGraph::removeDeadNodes() {
+void DSGraph::removeDeadNodes(unsigned Flags) {
// Reduce the amount of work we have to do...
removeTriviallyDeadNodes();
@@ -1023,10 +1023,11 @@ void DSGraph::removeDeadNodes() {
// Mark all nodes reachable by (non-global) scalar nodes as alive...
for (std::map<Value*, DSNodeHandle>::iterator I = ScalarMap.begin(),
E = ScalarMap.end(); I != E; ++I)
- // if (!isa<GlobalValue>(I->first)) // Don't mark globals!
+ if (!(Flags & DSGraph::RemoveUnreachableGlobals) ||
+ !isa<GlobalValue>(I->first)) // Don't mark globals!
markAlive(I->second.getNode(), Alive);
- // else // Keep track of global nodes
- // GlobalNodes.push_back(std::make_pair(I->first, I->second.getNode()));
+ else // Keep track of global nodes
+ GlobalNodes.push_back(std::make_pair(I->first, I->second.getNode()));
// The return value is alive as well...
markAlive(RetNode.getNode(), Alive);
diff --git a/llvm/lib/Analysis/DataStructure/Local.cpp b/llvm/lib/Analysis/DataStructure/Local.cpp
index f40080a9139..93c534abcf8 100644
--- a/llvm/lib/Analysis/DataStructure/Local.cpp
+++ b/llvm/lib/Analysis/DataStructure/Local.cpp
@@ -136,10 +136,10 @@ DSGraph::DSGraph(Function &F, DSGraph *GG) : Func(&F), GlobalsGraph(GG) {
#ifndef NDEBUG
Timer::addPeakMemoryMeasurement();
#endif
- markIncompleteNodes();
+ markIncompleteNodes(DSGraph::MarkFormalArgs);
// Remove any nodes made dead due to merging...
- removeDeadNodes();
+ removeDeadNodes(DSGraph::KeepUnreachableGlobals);
}
diff --git a/llvm/lib/Analysis/DataStructure/Steensgaard.cpp b/llvm/lib/Analysis/DataStructure/Steensgaard.cpp
index 0994a224260..b6497c50722 100644
--- a/llvm/lib/Analysis/DataStructure/Steensgaard.cpp
+++ b/llvm/lib/Analysis/DataStructure/Steensgaard.cpp
@@ -196,10 +196,10 @@ bool Steens::run(Module &M) {
// Update the "incomplete" markers on the nodes, ignoring unknownness due to
// incoming arguments...
ResultGraph->maskIncompleteMarkers();
- ResultGraph->markIncompleteNodes(false);
+ ResultGraph->markIncompleteNodes(DSGraph::IgnoreFormalArgs);
// Remove any nodes that are dead after all of the merging we have done...
- ResultGraph->removeDeadNodes();
+ ResultGraph->removeDeadNodes(DSGraph::KeepUnreachableGlobals);
DEBUG(print(std::cerr, &M));
return false;
diff --git a/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp b/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp
index da9bc7c1348..b867f7edff8 100644
--- a/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp
+++ b/llvm/lib/Analysis/DataStructure/TopDownClosure.cpp
@@ -186,9 +186,10 @@ void TDDataStructures::calculateGraph(Function &F) {
// Recompute the Incomplete markers and eliminate unreachable nodes.
CG.maskIncompleteMarkers();
- CG.markIncompleteNodes(/*markFormals*/ !F.hasInternalLinkage()
+ CG.markIncompleteNodes(F.hasInternalLinkage() ? DSGraph::IgnoreFormalArgs:
+ DSGraph::MarkFormalArgs
/*&& FIXME: NEED TO CHECK IF ALL CALLERS FOUND!*/);
- CG.removeDeadNodes();
+ CG.removeDeadNodes(DSGraph::RemoveUnreachableGlobals);
}
DEBUG(std::cerr << " [TD] Done inlining into callees for: " << F.getName()
OpenPOWER on IntegriCloud