X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FTypeBasedAliasAnalysis.cpp;h=7069a178cb08d35d73af8a9bcd68b378e019f84b;hb=39e30124e50534972c2e58f4dab7d67c0c437743;hp=bbfdcec3f9b4b76ca09d3bdd2ffaa889b59dc688;hpb=90c579de5a383cee278acc3f7e7b9d0a656e6a35;p=oota-llvm.git diff --git a/lib/Analysis/TypeBasedAliasAnalysis.cpp b/lib/Analysis/TypeBasedAliasAnalysis.cpp index bbfdcec3f9b..7069a178cb0 100644 --- a/lib/Analysis/TypeBasedAliasAnalysis.cpp +++ b/lib/Analysis/TypeBasedAliasAnalysis.cpp @@ -44,7 +44,7 @@ namespace { public: TBAANode() : Node(0) {} - explicit TBAANode(MDNode *N) : Node(N) {} + explicit TBAANode(const MDNode *N) : Node(N) {} /// getNode - Get the MDNode for this TBAANode. const MDNode *getNode() const { return Node; } @@ -96,9 +96,8 @@ namespace { private: virtual void getAnalysisUsage(AnalysisUsage &AU) const; - virtual AliasResult alias(const Value *V1, unsigned V1Size, - const Value *V2, unsigned V2Size); - virtual bool pointsToConstantMemory(const Value *P); + virtual AliasResult alias(const Location &LocA, const Location &LocB); + virtual bool pointsToConstantMemory(const Location &Loc); }; } // End of anonymous namespace @@ -118,23 +117,13 @@ TypeBasedAliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { } AliasAnalysis::AliasResult -TypeBasedAliasAnalysis::alias(const Value *A, unsigned ASize, - const Value *B, unsigned BSize) { - // Currently, metadata can only be attached to Instructions. - const Instruction *AI = dyn_cast(A); - if (!AI) return MayAlias; - const Instruction *BI = dyn_cast(B); - if (!BI) return MayAlias; - +TypeBasedAliasAnalysis::alias(const Location &LocA, + const Location &LocB) { // Get the attached MDNodes. If either value lacks a tbaa MDNode, we must // be conservative. - MDNode *AM = - AI->getMetadata(AI->getParent()->getParent()->getParent() - ->getMDKindID("tbaa")); + const MDNode *AM = LocA.TBAATag; if (!AM) return MayAlias; - MDNode *BM = - BI->getMetadata(BI->getParent()->getParent()->getParent() - ->getMDKindID("tbaa")); + const MDNode *BM = LocB.TBAATag; if (!BM) return MayAlias; // Keep track of the root node for A and B. @@ -175,14 +164,8 @@ TypeBasedAliasAnalysis::alias(const Value *A, unsigned ASize, return MayAlias; } -bool TypeBasedAliasAnalysis::pointsToConstantMemory(const Value *P) { - // Currently, metadata can only be attached to Instructions. - const Instruction *I = dyn_cast(P); - if (!I) return false; - - MDNode *M = - I->getMetadata(I->getParent()->getParent()->getParent() - ->getMDKindID("tbaa")); +bool TypeBasedAliasAnalysis::pointsToConstantMemory(const Location &Loc) { + const MDNode *M = Loc.TBAATag; if (!M) return false; // If this is an "immutable" type, we can assume the pointer is pointing