From: Chris Lattner Date: Thu, 13 Nov 2003 01:42:38 +0000 (+0000) Subject: Add an initial version of the CompleteBUDataStructures pass X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=7d26815d8d37810f5b5d25026bb888ffe5e0e882 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 --- diff --git a/include/llvm/Analysis/DataStructure.h b/include/llvm/Analysis/DataStructure.h index 4d6e3a04760..3e57af21318 100644 --- a/include/llvm/Analysis/DataStructure.h +++ b/include/llvm/Analysis/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 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(&F)) != DSInfo.end(); + } + + // getDSGraph - Return the data structure graph for the specified function. + DSGraph &getDSGraph(const Function &F) const { + hash_map::const_iterator I = + DSInfo.find(const_cast(&F)); + assert(I != DSInfo.end() && "Function not in module!"); + return *I->second; + } + + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + AU.addRequired(); + + // FIXME: TEMPORARY (remove once finalization of indirect call sites in the + // globals graph has been implemented in the BU pass) + AU.addRequired(); + } +}; + + + } // End llvm namespace #endif diff --git a/include/llvm/Analysis/DataStructure/DataStructure.h b/include/llvm/Analysis/DataStructure/DataStructure.h index 4d6e3a04760..3e57af21318 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 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(&F)) != DSInfo.end(); + } + + // getDSGraph - Return the data structure graph for the specified function. + DSGraph &getDSGraph(const Function &F) const { + hash_map::const_iterator I = + DSInfo.find(const_cast(&F)); + assert(I != DSInfo.end() && "Function not in module!"); + return *I->second; + } + + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + AU.addRequired(); + + // FIXME: TEMPORARY (remove once finalization of indirect call sites in the + // globals graph has been implemented in the BU pass) + AU.addRequired(); + } +}; + + + } // End llvm namespace #endif