X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FAliasSetTracker.cpp;h=398bf5aca5b4371ee5251711611e37466856b059;hb=51cd9d6e073932fcb37f1857c66249d6c7d368ee;hp=d5038ea6d1dfe94ca76e6940613f0bf20726f1a5;hpb=4ee451de366474b9c228b4e5fa573795a715216d;p=oota-llvm.git diff --git a/lib/Analysis/AliasSetTracker.cpp b/lib/Analysis/AliasSetTracker.cpp index d5038ea6d1d..398bf5aca5b 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; @@ -568,6 +581,8 @@ namespace { return false; } }; - char AliasSetPrinter::ID = 0; - RegisterPass X("print-alias-sets", "Alias Set Printer"); } + +char AliasSetPrinter::ID = 0; +static RegisterPass +X("print-alias-sets", "Alias Set Printer", false, true);