diff options
author | Chris Lattner <sabre@nondot.org> | 2003-11-13 01:42:38 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-11-13 01:42:38 +0000 |
commit | 7d26815d8d37810f5b5d25026bb888ffe5e0e882 (patch) | |
tree | 5a069884b93eb4dc3e1d09fbe202401b437e9c4a /include/llvm/Analysis/DataStructure/DataStructure.h | |
parent | c6b1584de6613f2e8341edb478fec1f22121d519 (diff) |
Add an initial version of the CompleteBUDataStructures pass
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9955 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Analysis/DataStructure/DataStructure.h')
-rw-r--r-- | include/llvm/Analysis/DataStructure/DataStructure.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/include/llvm/Analysis/DataStructure/DataStructure.h b/include/llvm/Analysis/DataStructure/DataStructure.h index 4d6e3a0476..3e57af2131 100644 --- a/include/llvm/Analysis/DataStructure/DataStructure.h +++ b/include/llvm/Analysis/DataStructure/DataStructure.h @@ -82,6 +82,7 @@ public: // only performs a "Bottom Up" propagation (hence the name). // class BUDataStructures : public Pass { +protected: // DSInfo, one graph for each function hash_map<Function*, DSGraph*> DSInfo; DSGraph *GlobalsGraph; @@ -186,6 +187,39 @@ private: const BUDataStructures::ActualCalleesTy &ActualCallees); }; + +// CompleteBUDataStructures - This is the exact same as the bottom-up graphs, +// but we use take a completed call graph and inline all indirect callees into +// their callers graphs, making the result more useful for things like pool +// allocation. +// +struct CompleteBUDataStructures : public BUDataStructures { + virtual bool run(Module &M); + + bool hasGraph(const Function &F) const { + return DSInfo.find(const_cast<Function*>(&F)) != DSInfo.end(); + } + + // getDSGraph - Return the data structure graph for the specified function. + DSGraph &getDSGraph(const Function &F) const { + hash_map<Function*, DSGraph*>::const_iterator I = + DSInfo.find(const_cast<Function*>(&F)); + assert(I != DSInfo.end() && "Function not in module!"); + return *I->second; + } + + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + AU.addRequired<BUDataStructures>(); + + // FIXME: TEMPORARY (remove once finalization of indirect call sites in the + // globals graph has been implemented in the BU pass) + AU.addRequired<TDDataStructures>(); + } +}; + + + } // End llvm namespace #endif |