Add a stub to implement the context sensitive mod/ref info for call sites
authorChris Lattner <sabre@nondot.org>
Wed, 6 Nov 2002 19:38:43 +0000 (19:38 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 6 Nov 2002 19:38:43 +0000 (19:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4577 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 290ae58fe36cfcf9d86cacbf78e23d4ceee97934..fb0191e61f518b0f584f071b202f4211a3b41b0e 100644 (file)
@@ -125,6 +125,7 @@ class FunctionModRefInfo {
 
   void          computeModRef   (const Function &func);
   void          computeModRef   (const CallInst& callInst);
+  DSGraph *ResolveCallSiteModRefInfo(const CallInst &CI);
 
 public:
   /* ctor */    FunctionModRefInfo      (const Function& func,
index c32f4425cfa1f606e26f6baf41b569b13485a3ef..9b33a3c27c8b7c9ea72e33a7cbd318a4afef517c 100644 (file)
@@ -74,16 +74,6 @@ 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.
-// 
-static const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
-                                       const CallInst& callInst)
-{
-  return &funcTDGraph;                    // TEMPORARY
-}
-
-
 // Compute Mod/Ref bit vectors for the entire function.
 // These are simply copies of the Read/Write flags from the nodes of
 // the top-down DS graph.
@@ -108,6 +98,27 @@ void FunctionModRefInfo::computeModRef(const Function &func)
     computeModRef(callSites[i].getCallInst());
 }
 
+// ResolveCallSiteModRefInfo - This method performs the following actions:
+//
+//  1. It clones the top-down graph for the current function
+//  2. It clears all of the mod/ref bits in the cloned graph
+//  3. It then merges the bottom-up graph(s) for the specified call-site into
+//     the clone (bringing new mod/ref bits).
+//  4. It returns the clone.
+//
+// NOTE: Because this clones a dsgraph and returns it, the caller is responsible
+//       for deleting the returned graph!
+//
+DSGraph *FunctionModRefInfo::ResolveCallSiteModRefInfo(const CallInst &CI) {
+  // Step #1: Clone the top-down graph...
+  DSGraph *Result = new DSGraph(funcTDGraph);
+
+  //const Function &F = *CI.getParent()->getParent();
+  //DSGraph &TDGraph = IPModRefObj.getAnalysis<TDDataStructures>().getDSGraph(F);
+
+  
+  return Result;
+}
 
 // Compute Mod/Ref bit vectors for a single call site.
 // These are copies of the Read/Write flags from the nodes of
@@ -122,8 +133,7 @@ FunctionModRefInfo::computeModRef(const CallInst& callInst)
   callSiteModRefInfo[&callInst] = callModRefInfo;
 
   // Get a copy of the graph for the callee with the callee inlined
-  const DSGraph* csgp = ResolveGraphForCallSite(funcTDGraph, callInst);
-  assert(csgp && "Unable to compute callee mod/ref information");
+  DSGraph* csgp = ResolveCallSiteModRefInfo(callInst);
 
   // For all nodes in the graph, extract the mod/ref information
   const std::vector<DSNode*>& csgNodes = csgp->getNodes();
@@ -136,6 +146,7 @@ FunctionModRefInfo::computeModRef(const CallInst& callInst)
       if (csgNodes[i]->isRead())
         callModRefInfo->setNodeIsRef(getNodeId(origNodes[i]));
     }
+  delete csgp;
 }
 
 
index c32f4425cfa1f606e26f6baf41b569b13485a3ef..9b33a3c27c8b7c9ea72e33a7cbd318a4afef517c 100644 (file)
@@ -74,16 +74,6 @@ 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.
-// 
-static const DSGraph* ResolveGraphForCallSite(const DSGraph& funcTDGraph,
-                                       const CallInst& callInst)
-{
-  return &funcTDGraph;                    // TEMPORARY
-}
-
-
 // Compute Mod/Ref bit vectors for the entire function.
 // These are simply copies of the Read/Write flags from the nodes of
 // the top-down DS graph.
@@ -108,6 +98,27 @@ void FunctionModRefInfo::computeModRef(const Function &func)
     computeModRef(callSites[i].getCallInst());
 }
 
+// ResolveCallSiteModRefInfo - This method performs the following actions:
+//
+//  1. It clones the top-down graph for the current function
+//  2. It clears all of the mod/ref bits in the cloned graph
+//  3. It then merges the bottom-up graph(s) for the specified call-site into
+//     the clone (bringing new mod/ref bits).
+//  4. It returns the clone.
+//
+// NOTE: Because this clones a dsgraph and returns it, the caller is responsible
+//       for deleting the returned graph!
+//
+DSGraph *FunctionModRefInfo::ResolveCallSiteModRefInfo(const CallInst &CI) {
+  // Step #1: Clone the top-down graph...
+  DSGraph *Result = new DSGraph(funcTDGraph);
+
+  //const Function &F = *CI.getParent()->getParent();
+  //DSGraph &TDGraph = IPModRefObj.getAnalysis<TDDataStructures>().getDSGraph(F);
+
+  
+  return Result;
+}
 
 // Compute Mod/Ref bit vectors for a single call site.
 // These are copies of the Read/Write flags from the nodes of
@@ -122,8 +133,7 @@ FunctionModRefInfo::computeModRef(const CallInst& callInst)
   callSiteModRefInfo[&callInst] = callModRefInfo;
 
   // Get a copy of the graph for the callee with the callee inlined
-  const DSGraph* csgp = ResolveGraphForCallSite(funcTDGraph, callInst);
-  assert(csgp && "Unable to compute callee mod/ref information");
+  DSGraph* csgp = ResolveCallSiteModRefInfo(callInst);
 
   // For all nodes in the graph, extract the mod/ref information
   const std::vector<DSNode*>& csgNodes = csgp->getNodes();
@@ -136,6 +146,7 @@ FunctionModRefInfo::computeModRef(const CallInst& callInst)
       if (csgNodes[i]->isRead())
         callModRefInfo->setNodeIsRef(getNodeId(origNodes[i]));
     }
+  delete csgp;
 }