add support for taking the address of free.
authorChris Lattner <sabre@nondot.org>
Thu, 21 Apr 2005 16:08:59 +0000 (16:08 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 21 Apr 2005 16:08:59 +0000 (16:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21395 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DataStructure/DataStructure.h

index a05935ac2108f5d5b1f3e196193fae03644c3840..32299473f4815d3ddfa8625a8be82b3a6de31f6e 100644 (file)
@@ -126,14 +126,17 @@ public:
   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;
+    if (I != DSInfo.end())
+      return *I->second;
+    return const_cast<BUDataStructures*>(this)->
+                   CreateGraphForExternalFunction(F);
   }
 
   DSGraph &getGlobalsGraph() const { return *GlobalsGraph; }
 
   EquivalenceClasses<GlobalValue*> &getGlobalECs() { return GlobalECs; }
 
+  DSGraph &CreateGraphForExternalFunction(const Function &F);
 
   /// deleteValue/copyValue - Interfaces to update the DSGraphs in the program.
   /// These correspond to the interfaces defined in the AliasAnalysis class.
@@ -234,8 +237,9 @@ public:
   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;
+    if (I != DSInfo.end()) return *I->second;
+    return const_cast<TDDataStructures*>(this)->
+        getOrCreateDSGraph(const_cast<Function&>(F));
   }
 
   DSGraph &getGlobalsGraph() const { return *GlobalsGraph; }