X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FAliasSetTracker.cpp;h=608da93f5738a4725f007ae5eca87d3090b940a3;hb=6b38e29f13cb8700146e4b170567e2828553db9a;hp=c35dc324b14aca033d2919939231ff58e70e4c0d;hpb=4f4c28f75f74fe557efb63feaf5f4f8bf639dcd5;p=oota-llvm.git diff --git a/lib/Analysis/AliasSetTracker.cpp b/lib/Analysis/AliasSetTracker.cpp index c35dc324b14..608da93f573 100644 --- a/lib/Analysis/AliasSetTracker.cpp +++ b/lib/Analysis/AliasSetTracker.cpp @@ -284,11 +284,13 @@ bool AliasSetTracker::add(StoreInst *SI) { bool AliasSetTracker::add(FreeInst *FI) { bool NewPtr; - AliasSet &AS = addPointer(FI->getOperand(0), ~0, - AliasSet::Mods, NewPtr); + addPointer(FI->getOperand(0), ~0, AliasSet::Mods, NewPtr); + return NewPtr; +} - // Free operations are volatile ops (cannot be moved). - AS.setVolatile(); +bool AliasSetTracker::add(VAArgInst *VAAI) { + bool NewPtr; + addPointer(VAAI->getOperand(0), ~0, AliasSet::ModRef, NewPtr); return NewPtr; } @@ -321,6 +323,8 @@ bool AliasSetTracker::add(Instruction *I) { return add(II); else if (FreeInst *FI = dyn_cast(I)) return add(FI); + else if (VAArgInst *VAAI = dyn_cast(I)) + return add(VAAI); return true; } @@ -414,6 +418,13 @@ bool AliasSetTracker::remove(FreeInst *FI) { return true; } +bool AliasSetTracker::remove(VAArgInst *VAAI) { + AliasSet *AS = findAliasSetForPointer(VAAI->getOperand(0), ~0); + if (!AS) return false; + remove(*AS); + return true; +} + bool AliasSetTracker::remove(CallSite CS) { if (AA.doesNotAccessMemory(CS)) return false; // doesn't alias anything @@ -434,6 +445,8 @@ bool AliasSetTracker::remove(Instruction *I) { return remove(CI); else if (FreeInst *FI = dyn_cast(I)) return remove(FI); + else if (VAArgInst *VAAI = dyn_cast(I)) + return remove(VAAI); return true; } @@ -500,7 +513,7 @@ void AliasSetTracker::copyValue(Value *From, Value *To) { void AliasSet::print(std::ostream &OS) const { OS << " AliasSet[" << (void*)this << "," << RefCount << "] "; - OS << (AliasTy == MustAlias ? "must" : "may ") << " alias, "; + OS << (AliasTy == MustAlias ? "must" : "may") << " alias, "; switch (AccessTy) { case NoModRef: OS << "No access "; break; case Refs : OS << "Ref "; break; @@ -551,7 +564,7 @@ namespace { AliasSetTracker *Tracker; public: static char ID; // Pass identification, replacement for typeid - AliasSetPrinter() : FunctionPass((intptr_t)&ID) {} + AliasSetPrinter() : FunctionPass(&ID) {} virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); @@ -568,6 +581,8 @@ namespace { return false; } }; - char AliasSetPrinter::ID = 0; - RegisterPass X("print-alias-sets", "Alias Set Printer", false, true); } + +char AliasSetPrinter::ID = 0; +static RegisterPass +X("print-alias-sets", "Alias Set Printer", false, true);