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:
Chris Lattner 2003-12-14 04:51:34 +00:00
parent 15beaf7d65
commit bb8f4769a2

View File

@ -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);