Give a back pointer to the IPModRef object to the FunctionModRefInfo object
authorChris Lattner <sabre@nondot.org>
Wed, 6 Nov 2002 19:07:13 +0000 (19:07 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 6 Nov 2002 19:07:13 +0000 (19:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4576 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/IPModRef.h
lib/Analysis/DataStructure/IPModRef.cpp
lib/Analysis/IPA/IPModRef.cpp

index 5a08dc02e7375e9eb55c60a681e6b7086c2d0650..290ae58fe36cfcf9d86cacbf78e23d4ceee97934 100644 (file)
@@ -113,6 +113,7 @@ public:
 
 class FunctionModRefInfo {
   const Function&       F;                  // The function
+  IPModRef&             IPModRefObj;        // The IPModRef Object owning this
   const DSGraph&        funcTDGraph;        // Top-down DS graph for function
   const DSGraph&        funcLocalGraph;     // Local DS graph for function
   ModRefInfo            funcModRefInfo;     // ModRefInfo for the function body
@@ -127,6 +128,7 @@ class FunctionModRefInfo {
 
 public:
   /* ctor */    FunctionModRefInfo      (const Function& func,
+                                         IPModRef& IPModRefObj,
                                          const DSGraph& tdg,
                                          const DSGraph& ldg);
   /* dtor */    ~FunctionModRefInfo     ();
index 22d7caa92fec14e8db5785b2eaccd39c6ba70db2..c32f4425cfa1f606e26f6baf41b569b13485a3ef 100644 (file)
@@ -44,9 +44,10 @@ void ModRefInfo::dump() const
 // This constructor computes a node numbering for the TD graph.
 // 
 FunctionModRefInfo::FunctionModRefInfo(const Function& func,
+                                       IPModRef& ipmro,
                                        const DSGraph& tdg,
                                        const DSGraph& ldg)
-  : F(func),
+  : F(func), IPModRefObj(ipmro), 
     funcTDGraph(tdg),
     funcLocalGraph(ldg),
     funcModRefInfo(tdg.getGraphSize())
@@ -76,7 +77,7 @@ unsigned FunctionModRefInfo::getNodeId(const Value* value) const {
 // Dummy function that will be replaced with one that inlines
 // the callee's BU graph into the caller's TD graph.
 // 
-const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
+static const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
                                        const CallInst& callInst)
 {
   return &funcTDGraph;                    // TEMPORARY
@@ -203,9 +204,9 @@ FunctionModRefInfo& IPModRef::getFuncInfo(const Function& func,
 {
   FunctionModRefInfo*& funcInfo = funcToModRefInfoMap[&func];
   assert (funcInfo != NULL || computeIfMissing);
-  if (funcInfo == NULL && computeIfMissing)
+  if (funcInfo == NULL)
     { // Create a new FunctionModRefInfo object
-      funcInfo = new FunctionModRefInfo(func,  // inserts into map
+      funcInfo = new FunctionModRefInfo(func, *this, // inserts into map
                               getAnalysis<TDDataStructures>().getDSGraph(func),
                           getAnalysis<LocalDataStructures>().getDSGraph(func));
       funcInfo->computeModRef(func);            // computes the mod/ref info
@@ -219,6 +220,7 @@ FunctionModRefInfo& IPModRef::getFuncInfo(const Function& func,
 void IPModRef::getAnalysisUsage(AnalysisUsage &AU) const {
   AU.setPreservesAll();
   AU.addRequired<LocalDataStructures>();
+  AU.addRequired<BUDataStructures>();
   AU.addRequired<TDDataStructures>();
 }
 
index 22d7caa92fec14e8db5785b2eaccd39c6ba70db2..c32f4425cfa1f606e26f6baf41b569b13485a3ef 100644 (file)
@@ -44,9 +44,10 @@ void ModRefInfo::dump() const
 // This constructor computes a node numbering for the TD graph.
 // 
 FunctionModRefInfo::FunctionModRefInfo(const Function& func,
+                                       IPModRef& ipmro,
                                        const DSGraph& tdg,
                                        const DSGraph& ldg)
-  : F(func),
+  : F(func), IPModRefObj(ipmro), 
     funcTDGraph(tdg),
     funcLocalGraph(ldg),
     funcModRefInfo(tdg.getGraphSize())
@@ -76,7 +77,7 @@ unsigned FunctionModRefInfo::getNodeId(const Value* value) const {
 // Dummy function that will be replaced with one that inlines
 // the callee's BU graph into the caller's TD graph.
 // 
-const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
+static const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
                                        const CallInst& callInst)
 {
   return &funcTDGraph;                    // TEMPORARY
@@ -203,9 +204,9 @@ FunctionModRefInfo& IPModRef::getFuncInfo(const Function& func,
 {
   FunctionModRefInfo*& funcInfo = funcToModRefInfoMap[&func];
   assert (funcInfo != NULL || computeIfMissing);
-  if (funcInfo == NULL && computeIfMissing)
+  if (funcInfo == NULL)
     { // Create a new FunctionModRefInfo object
-      funcInfo = new FunctionModRefInfo(func,  // inserts into map
+      funcInfo = new FunctionModRefInfo(func, *this, // inserts into map
                               getAnalysis<TDDataStructures>().getDSGraph(func),
                           getAnalysis<LocalDataStructures>().getDSGraph(func));
       funcInfo->computeModRef(func);            // computes the mod/ref info
@@ -219,6 +220,7 @@ FunctionModRefInfo& IPModRef::getFuncInfo(const Function& func,
 void IPModRef::getAnalysisUsage(AnalysisUsage &AU) const {
   AU.setPreservesAll();
   AU.addRequired<LocalDataStructures>();
+  AU.addRequired<BUDataStructures>();
   AU.addRequired<TDDataStructures>();
 }