X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FNoAliasAnalysis.cpp;h=139fa38b8a94d7f5562dba5e8438fcb1e530425f;hb=12af22e8cc217827cf4f118b0f5e4ebbda9925ae;hp=ab7a69241e9ae39e60fc15a9bcada04c9e5e0b33;hpb=a25e5dbcc2371352386a01e3c1b8e76dd890272b;p=oota-llvm.git diff --git a/lib/Analysis/NoAliasAnalysis.cpp b/lib/Analysis/NoAliasAnalysis.cpp index ab7a69241e9..139fa38b8a9 100644 --- a/lib/Analysis/NoAliasAnalysis.cpp +++ b/lib/Analysis/NoAliasAnalysis.cpp @@ -12,10 +12,11 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/Passes.h" +#include "llvm/Analysis/AliasAnalysis.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/IR/LLVMContext.h" #include "llvm/Pass.h" -#include "llvm/Target/TargetData.h" using namespace llvm; namespace { @@ -30,47 +31,54 @@ namespace { initializeNoAAPass(*PassRegistry::getPassRegistry()); } - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - } + void getAnalysisUsage(AnalysisUsage &AU) const override {} - virtual void initializePass() { + void initializePass() override { // Note: NoAA does not call InitializeAliasAnalysis because it's // special and does not support chaining. - TD = getAnalysisIfAvailable(); + DataLayoutPass *DLP = getAnalysisIfAvailable(); + DL = DLP ? &DLP->getDataLayout() : nullptr; } - virtual AliasResult alias(const Location &LocA, const Location &LocB) { + AliasResult alias(const Location &LocA, const Location &LocB) override { return MayAlias; } - virtual ModRefBehavior getModRefBehavior(ImmutableCallSite CS) { + ModRefBehavior getModRefBehavior(ImmutableCallSite CS) override { return UnknownModRefBehavior; } - virtual ModRefBehavior getModRefBehavior(const Function *F) { + ModRefBehavior getModRefBehavior(const Function *F) override { return UnknownModRefBehavior; } - virtual bool pointsToConstantMemory(const Location &Loc, - bool OrLocal) { + bool pointsToConstantMemory(const Location &Loc, bool OrLocal) override { return false; } - virtual ModRefResult getModRefInfo(ImmutableCallSite CS, - const Location &Loc) { + Location getArgLocation(ImmutableCallSite CS, unsigned ArgIdx, + ModRefResult &Mask) override { + Mask = ModRef; + return Location(CS.getArgument(ArgIdx), UnknownSize, + CS.getInstruction()->getMetadata(LLVMContext::MD_tbaa)); + } + + ModRefResult getModRefInfo(ImmutableCallSite CS, + const Location &Loc) override { return ModRef; } - virtual ModRefResult getModRefInfo(ImmutableCallSite CS1, - ImmutableCallSite CS2) { + ModRefResult getModRefInfo(ImmutableCallSite CS1, + ImmutableCallSite CS2) override { return ModRef; } - virtual void deleteValue(Value *V) {} - virtual void copyValue(Value *From, Value *To) {} - + void deleteValue(Value *V) override {} + void copyValue(Value *From, Value *To) override {} + void addEscapingUse(Use &U) override {} + /// getAdjustedAnalysisPointer - This method is used when a pass implements /// an analysis interface through multiple inheritance. If needed, it /// should override this to adjust the this pointer as needed for the /// specified pass info. - virtual void *getAdjustedAnalysisPointer(const void *ID) { + void *getAdjustedAnalysisPointer(const void *ID) override { if (ID == &AliasAnalysis::ID) return (AliasAnalysis*)this; return this;