mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
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
This commit is contained in:
parent
1be4ab681e
commit
eee5400442
@ -44,7 +44,8 @@ class AliasSet : public ilist_node<AliasSet> {
|
|||||||
const MDNode *TBAAInfo;
|
const MDNode *TBAAInfo;
|
||||||
public:
|
public:
|
||||||
PointerRec(Value *V)
|
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<const MDNode *>::getEmptyKey()) {}
|
||||||
|
|
||||||
Value *getValue() const { return Val; }
|
Value *getValue() const { return Val; }
|
||||||
|
|
||||||
@ -59,26 +60,22 @@ class AliasSet : public ilist_node<AliasSet> {
|
|||||||
void updateSizeAndTBAAInfo(unsigned NewSize, const MDNode *NewTBAAInfo) {
|
void updateSizeAndTBAAInfo(unsigned NewSize, const MDNode *NewTBAAInfo) {
|
||||||
if (NewSize > Size) Size = NewSize;
|
if (NewSize > Size) Size = NewSize;
|
||||||
|
|
||||||
if (!TBAAInfo)
|
if (TBAAInfo == DenseMapInfo<const MDNode *>::getEmptyKey())
|
||||||
|
// We don't have a TBAAInfo yet. Set it to NewTBAAInfo.
|
||||||
TBAAInfo = NewTBAAInfo;
|
TBAAInfo = NewTBAAInfo;
|
||||||
else if (TBAAInfo != NewTBAAInfo)
|
else if (TBAAInfo != NewTBAAInfo)
|
||||||
TBAAInfo = reinterpret_cast<const MDNode *>(-1);
|
// NewTBAAInfo conflicts with TBAAInfo.
|
||||||
|
TBAAInfo = DenseMapInfo<const MDNode *>::getTombstoneKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned getSize() const { return Size; }
|
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
|
/// getTBAAInfo - Return the TBAAInfo, or null if there is no
|
||||||
/// information or conflicting information.
|
/// information or conflicting information.
|
||||||
const MDNode *getTBAAInfo() const {
|
const MDNode *getTBAAInfo() const {
|
||||||
// If we have conflicting TBAAInfo, return null.
|
// If we have missing or conflicting TBAAInfo, return null.
|
||||||
if (TBAAInfo == reinterpret_cast<const MDNode *>(-1))
|
if (TBAAInfo == DenseMapInfo<const MDNode *>::getEmptyKey() ||
|
||||||
|
TBAAInfo == DenseMapInfo<const MDNode *>::getTombstoneKey())
|
||||||
return 0;
|
return 0;
|
||||||
return TBAAInfo;
|
return TBAAInfo;
|
||||||
}
|
}
|
||||||
@ -209,7 +206,6 @@ public:
|
|||||||
|
|
||||||
Value *getPointer() const { return CurNode->getValue(); }
|
Value *getPointer() const { return CurNode->getValue(); }
|
||||||
unsigned getSize() const { return CurNode->getSize(); }
|
unsigned getSize() const { return CurNode->getSize(); }
|
||||||
const MDNode *getRawTBAAInfo() const { return CurNode->getRawTBAAInfo(); }
|
|
||||||
const MDNode *getTBAAInfo() const { return CurNode->getTBAAInfo(); }
|
const MDNode *getTBAAInfo() const { return CurNode->getTBAAInfo(); }
|
||||||
|
|
||||||
iterator& operator++() { // Preincrement
|
iterator& operator++() { // Preincrement
|
||||||
|
@ -377,7 +377,7 @@ void AliasSetTracker::add(const AliasSetTracker &AST) {
|
|||||||
bool X;
|
bool X;
|
||||||
for (AliasSet::iterator ASI = AS.begin(), E = AS.end(); ASI != E; ++ASI) {
|
for (AliasSet::iterator ASI = AS.begin(), E = AS.end(); ASI != E; ++ASI) {
|
||||||
AliasSet &NewAS = addPointer(ASI.getPointer(), ASI.getSize(),
|
AliasSet &NewAS = addPointer(ASI.getPointer(), ASI.getSize(),
|
||||||
ASI.getRawTBAAInfo(),
|
ASI.getTBAAInfo(),
|
||||||
(AliasSet::AccessType)AS.AccessTy, X);
|
(AliasSet::AccessType)AS.AccessTy, X);
|
||||||
if (AS.isVolatile()) NewAS.setVolatile();
|
if (AS.isVolatile()) NewAS.setVolatile();
|
||||||
}
|
}
|
||||||
@ -533,7 +533,7 @@ void AliasSetTracker::copyValue(Value *From, Value *To) {
|
|||||||
I = PointerMap.find(From);
|
I = PointerMap.find(From);
|
||||||
AliasSet *AS = I->second->getAliasSet(*this);
|
AliasSet *AS = I->second->getAliasSet(*this);
|
||||||
AS->addPointer(*this, Entry, I->second->getSize(),
|
AS->addPointer(*this, Entry, I->second->getSize(),
|
||||||
I->second->getRawTBAAInfo(),
|
I->second->getTBAAInfo(),
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user