[llvm-commits] [poolalloc] r76387 - /poolalloc/trunk/lib/DSA/Local.cpp
Haohui Mai
mai4 at uiuc.edu
Sun Jul 19 18:30:58 PDT 2009
Author: mai4
Date: Sun Jul 19 20:30:56 2009
New Revision: 76387
URL: http://llvm.org/viewvc/llvm-project?rev=76387&view=rev
Log:
Propagate the unknown flags through all out edges in the local DSA pass.
Modified:
poolalloc/trunk/lib/DSA/Local.cpp
Modified: poolalloc/trunk/lib/DSA/Local.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/Local.cpp?rev=76387&r1=76386&r2=76387&view=diff
==============================================================================
--- poolalloc/trunk/lib/DSA/Local.cpp (original)
+++ poolalloc/trunk/lib/DSA/Local.cpp Sun Jul 19 20:30:56 2009
@@ -12,7 +12,6 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/ADT/Statistic.h"
#include "dsa/DataStructure.h"
#include "dsa/DSGraph.h"
#include "llvm/Constants.h"
@@ -25,6 +24,9 @@
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Timer.h"
+#include "llvm/ADT/Statistic.h"
+#include "llvm/ADT/DenseSet.h"
+
#include <iostream>
// FIXME: This should eventually be a FunctionPass that is automatically
@@ -164,12 +166,35 @@
void mergeInGlobalInitializer(GlobalVariable *GV);
void mergeFunction(Function& F) { getValueDest(F); }
};
+
+ /// Traverse the whole DSGraph, and propagate the unknown flags through all
+ /// out edges.
+ static void propagateUnknownFlag(DSGraph * G) {
+ std::vector<DSNode *> workList;
+ DenseSet<DSNode *> visited;
+ for (DSGraph::node_iterator I = G->node_begin(), E = G->node_end(); I != E; ++I)
+ if (I->isUnknownNode())
+ workList.push_back(&*I);
+
+ while (!workList.empty()) {
+ DSNode * N = workList.back();
+ workList.pop_back();
+ if (visited.count(N) != 0) continue;
+ visited.insert(N);
+ N->setUnknownMarker();
+ for (DSNode::edge_iterator I = N->edge_begin(), E = N->edge_end(); I != E; ++I)
+ if (!I->isNull())
+ workList.push_back(I->getNode());
+ }
+ }
}
//===----------------------------------------------------------------------===//
// Helper method implementations...
//
+
+///
/// getValueDest - Return the DSNode that the actual value points to.
///
DSNodeHandle GraphBuilder::getValueDest(Value &Val) {
@@ -825,6 +850,7 @@
GraphBuilder GGB(*I, *G, *this);
G->getAuxFunctionCalls() = G->getFunctionCalls();
setDSGraph(*I, G);
+ propagateUnknownFlag(G);
}
GlobalsGraph->removeTriviallyDeadNodes();
@@ -836,6 +862,7 @@
// program.
formGlobalECs();
+ propagateUnknownFlag(GlobalsGraph);
return false;
}
More information about the llvm-commits
mailing list