Hack to work around deficiency in pass infrastructure

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5485 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-02-03 22:51:28 +00:00
parent 8105cfbed0
commit 4923d1be91
3 changed files with 15 additions and 7 deletions

View File

@ -136,7 +136,7 @@ class TDDataStructures : public Pass {
hash_set<const Function*> GraphDone;
DSGraph *GlobalsGraph;
public:
~TDDataStructures() { releaseMemory(); }
~TDDataStructures() { releaseMyMemory(); }
virtual bool run(Module &M);
@ -157,13 +157,14 @@ public:
void print(std::ostream &O, const Module *M) const;
// If the pass pipeline is done with this pass, we can release our memory...
virtual void releaseMemory();
virtual void releaseMyMemory();
// getAnalysisUsage - This obviously provides a data structure graph.
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<BUDataStructures>();
}
private:
void calculateGraph(Function &F);
DSGraph &getOrCreateDSGraph(Function &F);

View File

@ -136,7 +136,7 @@ class TDDataStructures : public Pass {
hash_set<const Function*> GraphDone;
DSGraph *GlobalsGraph;
public:
~TDDataStructures() { releaseMemory(); }
~TDDataStructures() { releaseMyMemory(); }
virtual bool run(Module &M);
@ -157,13 +157,14 @@ public:
void print(std::ostream &O, const Module *M) const;
// If the pass pipeline is done with this pass, we can release our memory...
virtual void releaseMemory();
virtual void releaseMyMemory();
// getAnalysisUsage - This obviously provides a data structure graph.
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<BUDataStructures>();
}
private:
void calculateGraph(Function &F);
DSGraph &getOrCreateDSGraph(Function &F);

View File

@ -13,8 +13,10 @@
#include "llvm/DerivedTypes.h"
#include "Support/Statistic.h"
static RegisterAnalysis<TDDataStructures>
Y("tddatastructure", "Top-down Data Structure Analysis Closure");
namespace {
RegisterAnalysis<TDDataStructures> // Register the pass
Y("tddatastructure", "Top-down Data Structure Analysis Closure");
}
// run - Calculate the top down data structure graphs for each function in the
// program.
@ -39,7 +41,10 @@ bool TDDataStructures::run(Module &M) {
// releaseMemory - If the pass pipeline is done with this pass, we can release
// our memory... here...
//
void TDDataStructures::releaseMemory() {
// FIXME: This should be releaseMemory and will work fine, except that LoadVN
// has no way to extend the lifetime of the pass, which screws up ds-aa.
//
void TDDataStructures::releaseMyMemory() {
for (hash_map<const Function*, DSGraph*>::iterator I = DSInfo.begin(),
E = DSInfo.end(); I != E; ++I)
delete I->second;
@ -206,3 +211,4 @@ void TDDataStructures::calculateGraph(Function &F) {
calculateGraph(*I->first);
}
}