diff options
author | Chris Lattner <sabre@nondot.org> | 2002-11-06 18:38:18 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-11-06 18:38:18 +0000 |
commit | fc928245adb01708fcfdd3a7505d57a758b1026a (patch) | |
tree | 5e3f77f0ee1e663d715fd529935d5e91c7eb3d01 /lib/Analysis/DataStructure/IPModRef.cpp | |
parent | 76351e9bab3ee20f67cfdadcf87a00cab5d4c58d (diff) |
Remove a couple of #includes, move some code from .h file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4575 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DataStructure/IPModRef.cpp')
-rw-r--r-- | lib/Analysis/DataStructure/IPModRef.cpp | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/lib/Analysis/DataStructure/IPModRef.cpp b/lib/Analysis/DataStructure/IPModRef.cpp index e4d0062f38..22d7caa92f 100644 --- a/lib/Analysis/DataStructure/IPModRef.cpp +++ b/lib/Analysis/DataStructure/IPModRef.cpp @@ -4,22 +4,15 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Analysis/IPModRef.h" #include "llvm/Analysis/DataStructure.h" #include "llvm/Analysis/DSGraph.h" -#include "llvm/Analysis/IPModRef.h" #include "llvm/Module.h" -#include "llvm/Function.h" #include "llvm/iOther.h" -#include "llvm/Pass.h" #include "Support/Statistic.h" #include "Support/STLExtras.h" #include "Support/StringExtras.h" -#include <algorithm> -#include <utility> -#include <vector> - - //---------------------------------------------------------------------------- // Private constants and data //---------------------------------------------------------------------------- @@ -73,6 +66,12 @@ FunctionModRefInfo::~FunctionModRefInfo() callSiteModRefInfo.clear(); } +unsigned FunctionModRefInfo::getNodeId(const Value* value) const { + return getNodeId(funcTDGraph.getNodeForValue(const_cast<Value*>(value)) + .getNode()); +} + + // Dummy function that will be replaced with one that inlines // the callee's BU graph into the caller's TD graph. @@ -199,6 +198,31 @@ bool IPModRef::run(Module &theModule) } +FunctionModRefInfo& IPModRef::getFuncInfo(const Function& func, + bool computeIfMissing) +{ + FunctionModRefInfo*& funcInfo = funcToModRefInfoMap[&func]; + assert (funcInfo != NULL || computeIfMissing); + if (funcInfo == NULL && computeIfMissing) + { // Create a new FunctionModRefInfo object + funcInfo = new FunctionModRefInfo(func, // inserts into map + getAnalysis<TDDataStructures>().getDSGraph(func), + getAnalysis<LocalDataStructures>().getDSGraph(func)); + funcInfo->computeModRef(func); // computes the mod/ref info + } + return *funcInfo; +} + +// getAnalysisUsage - This pass requires top-down data structure graphs. +// It modifies nothing. +// +void IPModRef::getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + AU.addRequired<LocalDataStructures>(); + AU.addRequired<TDDataStructures>(); +} + + void IPModRef::print(std::ostream &O) const { O << "\n========== Results of Interprocedural Mod/Ref Analysis ==========\n"; |