Add support for free instructions
authorChris Lattner <sabre@nondot.org>
Sun, 25 Jul 2004 07:57:37 +0000 (07:57 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 25 Jul 2004 07:57:37 +0000 (07:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15197 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/AliasSetTracker.h
lib/Analysis/AliasSetTracker.cpp

index 10e59e96017ebac673f5ad7bc4e09a73dbe26f65..d137311de020b23c2910dbc4478aef3b56b7c753 100644 (file)
@@ -27,6 +27,7 @@ namespace llvm {
 class AliasAnalysis;
 class LoadInst;
 class StoreInst;
+class FreeInst;
 class AliasSetTracker;
 class AliasSet;
 
@@ -263,6 +264,7 @@ public:
   ///
   bool add(LoadInst *LI);
   bool add(StoreInst *SI);
+  bool add(FreeInst *FI);
   bool add(CallSite CS);          // Call/Invoke instructions
   bool add(CallInst *CI)   { return add(CallSite(CI)); }
   bool add(InvokeInst *II) { return add(CallSite(II)); }
@@ -275,6 +277,7 @@ public:
   /// alias sets were eliminated.
   bool remove(LoadInst *LI);
   bool remove(StoreInst *SI);
+  bool remove(FreeInst *FI);
   bool remove(CallSite CS);
   bool remove(CallInst *CI)   { return remove(CallSite(CI)); }
   bool remove(InvokeInst *II) { return remove(CallSite(II)); }
index efb3184bd536b9621cb2b38f5179163d65eb9876..22396b5d8724f5cf2a417ceac4bc6ab8670a1e05 100644 (file)
@@ -233,6 +233,13 @@ bool AliasSetTracker::add(StoreInst *SI) {
   return NewPtr;
 }
 
+bool AliasSetTracker::add(FreeInst *FI) {
+  bool NewPtr;
+  AliasSet &AS = addPointer(FI->getOperand(0), ~0,
+                            AliasSet::Mods, NewPtr);
+  return NewPtr;
+}
+
 
 bool AliasSetTracker::add(CallSite CS) {
   bool NewPtr;
@@ -262,6 +269,8 @@ bool AliasSetTracker::add(Instruction *I) {
     return add(CI);
   else if (InvokeInst *II = dyn_cast<InvokeInst>(I))
     return add(II);
+  else if (FreeInst *FI = dyn_cast<FreeInst>(I))
+    return add(FI);
   return true;
 }
 
@@ -326,6 +335,13 @@ bool AliasSetTracker::remove(StoreInst *SI) {
   return true;
 }
 
+bool AliasSetTracker::remove(FreeInst *FI) {
+  AliasSet *AS = findAliasSetForPointer(FI->getOperand(0), ~0);
+  if (!AS) return false;
+  remove(*AS);
+  return true;
+}
+
 bool AliasSetTracker::remove(CallSite CS) {
   if (Function *F = CS.getCalledFunction())
     if (AA.doesNotAccessMemory(F))
@@ -345,8 +361,8 @@ bool AliasSetTracker::remove(Instruction *I) {
     return remove(SI);
   else if (CallInst *CI = dyn_cast<CallInst>(I))
     return remove(CI);
-  else if (InvokeInst *II = dyn_cast<InvokeInst>(I))
-    return remove(II);
+  else if (FreeInst *FI = dyn_cast<FreeInst>(I))
+    return remove(FI);
   return true;
 }