From eee5400442e0812cb375ed5e17595a62f9240b80 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 18 Oct 2010 23:31:47 +0000 Subject: [PATCH] Make the representation of AliasSets explicitly differentiate between "not known yet" and "known no tbaa info" so that it can merge them properly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116767 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/AliasSetTracker.h | 22 +++++++++------------- lib/Analysis/AliasSetTracker.cpp | 4 ++-- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/include/llvm/Analysis/AliasSetTracker.h b/include/llvm/Analysis/AliasSetTracker.h index 452724c42b8..f66b3b70e2b 100644 --- a/include/llvm/Analysis/AliasSetTracker.h +++ b/include/llvm/Analysis/AliasSetTracker.h @@ -44,7 +44,8 @@ class AliasSet : public ilist_node { const MDNode *TBAAInfo; public: PointerRec(Value *V) - : Val(V), PrevInList(0), NextInList(0), AS(0), Size(0), TBAAInfo(0) {} + : Val(V), PrevInList(0), NextInList(0), AS(0), Size(0), + TBAAInfo(DenseMapInfo::getEmptyKey()) {} Value *getValue() const { return Val; } @@ -59,26 +60,22 @@ class AliasSet : public ilist_node { void updateSizeAndTBAAInfo(unsigned NewSize, const MDNode *NewTBAAInfo) { if (NewSize > Size) Size = NewSize; - if (!TBAAInfo) + if (TBAAInfo == DenseMapInfo::getEmptyKey()) + // We don't have a TBAAInfo yet. Set it to NewTBAAInfo. TBAAInfo = NewTBAAInfo; else if (TBAAInfo != NewTBAAInfo) - TBAAInfo = reinterpret_cast(-1); + // NewTBAAInfo conflicts with TBAAInfo. + TBAAInfo = DenseMapInfo::getTombstoneKey(); } unsigned getSize() const { return Size; } - /// getRawTBAAInfo - Return the raw TBAAInfo member. In addition to - /// being null or a pointer to an MDNode, this could be -1, meaning - /// there was conflicting information. - const MDNode *getRawTBAAInfo() const { - return TBAAInfo; - } - /// getTBAAInfo - Return the TBAAInfo, or null if there is no /// information or conflicting information. const MDNode *getTBAAInfo() const { - // If we have conflicting TBAAInfo, return null. - if (TBAAInfo == reinterpret_cast(-1)) + // If we have missing or conflicting TBAAInfo, return null. + if (TBAAInfo == DenseMapInfo::getEmptyKey() || + TBAAInfo == DenseMapInfo::getTombstoneKey()) return 0; return TBAAInfo; } @@ -209,7 +206,6 @@ public: Value *getPointer() const { return CurNode->getValue(); } unsigned getSize() const { return CurNode->getSize(); } - const MDNode *getRawTBAAInfo() const { return CurNode->getRawTBAAInfo(); } const MDNode *getTBAAInfo() const { return CurNode->getTBAAInfo(); } iterator& operator++() { // Preincrement diff --git a/lib/Analysis/AliasSetTracker.cpp b/lib/Analysis/AliasSetTracker.cpp index 2488b48cfc1..2fd5acd051c 100644 --- a/lib/Analysis/AliasSetTracker.cpp +++ b/lib/Analysis/AliasSetTracker.cpp @@ -377,7 +377,7 @@ void AliasSetTracker::add(const AliasSetTracker &AST) { bool X; for (AliasSet::iterator ASI = AS.begin(), E = AS.end(); ASI != E; ++ASI) { AliasSet &NewAS = addPointer(ASI.getPointer(), ASI.getSize(), - ASI.getRawTBAAInfo(), + ASI.getTBAAInfo(), (AliasSet::AccessType)AS.AccessTy, X); if (AS.isVolatile()) NewAS.setVolatile(); } @@ -533,7 +533,7 @@ void AliasSetTracker::copyValue(Value *From, Value *To) { I = PointerMap.find(From); AliasSet *AS = I->second->getAliasSet(*this); AS->addPointer(*this, Entry, I->second->getSize(), - I->second->getRawTBAAInfo(), + I->second->getTBAAInfo(), true); }