From 5c88260f70d5286adeca61c31bdf51f8debaccbc Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 25 Jul 2004 07:57:37 +0000 Subject: [PATCH] Add support for free instructions git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15197 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/AliasSetTracker.h | 3 +++ lib/Analysis/AliasSetTracker.cpp | 20 ++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/include/llvm/Analysis/AliasSetTracker.h b/include/llvm/Analysis/AliasSetTracker.h index 10e59e96017..d137311de02 100644 --- a/include/llvm/Analysis/AliasSetTracker.h +++ b/include/llvm/Analysis/AliasSetTracker.h @@ -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)); } diff --git a/lib/Analysis/AliasSetTracker.cpp b/lib/Analysis/AliasSetTracker.cpp index efb3184bd53..22396b5d872 100644 --- a/lib/Analysis/AliasSetTracker.cpp +++ b/lib/Analysis/AliasSetTracker.cpp @@ -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(I)) return add(II); + else if (FreeInst *FI = dyn_cast(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(I)) return remove(CI); - else if (InvokeInst *II = dyn_cast(I)) - return remove(II); + else if (FreeInst *FI = dyn_cast(I)) + return remove(FI); return true; }