mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Add capability to represent volatile AliasSet's
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10456 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
15beaf7d65
commit
bb8f4769a2
@ -82,7 +82,7 @@ class AliasSet {
|
||||
|
||||
// RefCount - Number of nodes pointing to this AliasSet plus the number of
|
||||
// AliasSets forwarding to it.
|
||||
unsigned RefCount : 29;
|
||||
unsigned RefCount : 28;
|
||||
|
||||
/// AccessType - Keep track of whether this alias set merely refers to the
|
||||
/// locations of memory, whether it modifies the memory, or whether it does
|
||||
@ -103,6 +103,9 @@ class AliasSet {
|
||||
};
|
||||
unsigned AliasTy : 1;
|
||||
|
||||
// Volatile - True if this alias set contains volatile loads or stores.
|
||||
bool Volatile : 1;
|
||||
|
||||
friend class ilist_traits<AliasSet>;
|
||||
AliasSet *getPrev() const { return Prev; }
|
||||
AliasSet *getNext() const { return Next; }
|
||||
@ -116,6 +119,11 @@ public:
|
||||
bool isMustAlias() const { return AliasTy == MustAlias; }
|
||||
bool isMayAlias() const { return AliasTy == MayAlias; }
|
||||
|
||||
// isVolatile - Return true if this alias set contains volatile loads or
|
||||
// stores.
|
||||
bool isVolatile() const { return Volatile; }
|
||||
|
||||
|
||||
/// isForwardingAliasSet - Return true if this alias set should be ignored as
|
||||
/// part of the AliasSetTracker object.
|
||||
bool isForwardingAliasSet() const { return Forward; }
|
||||
@ -168,7 +176,7 @@ public:
|
||||
private:
|
||||
// Can only be created by AliasSetTracker
|
||||
AliasSet() : PtrListHead(0), PtrListTail(0), Forward(0), RefCount(0),
|
||||
AccessTy(NoModRef), AliasTy(MustAlias) {
|
||||
AccessTy(NoModRef), AliasTy(MustAlias), Volatile(false) {
|
||||
}
|
||||
HashNodePair *getSomePointer() const {
|
||||
return PtrListHead ? PtrListHead : 0;
|
||||
@ -194,6 +202,7 @@ private:
|
||||
|
||||
void addPointer(AliasSetTracker &AST, HashNodePair &Entry, unsigned Size);
|
||||
void addCallSite(CallSite CS);
|
||||
void setVolatile() { Volatile = true; }
|
||||
|
||||
/// aliasesPointer - Return true if the specified pointer "may" (or must)
|
||||
/// alias one of the members in the set.
|
||||
@ -272,9 +281,10 @@ private:
|
||||
AliasSet::PointerRec())).first;
|
||||
}
|
||||
|
||||
void addPointer(Value *P, unsigned Size, AliasSet::AccessType E) {
|
||||
AliasSet &addPointer(Value *P, unsigned Size, AliasSet::AccessType E) {
|
||||
AliasSet &AS = getAliasSetForPointer(P, Size);
|
||||
AS.AccessTy |= E;
|
||||
return AS;
|
||||
}
|
||||
AliasSet *findAliasSetForPointer(const Value *Ptr, unsigned Size);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user