Add capability to represent volatile AliasSet's
authorChris Lattner <sabre@nondot.org>
Sun, 14 Dec 2003 04:51:34 +0000 (04:51 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 14 Dec 2003 04:51:34 +0000 (04:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10456 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/AliasSetTracker.h

index fe57c28679d8038f88969cfa748ba57e53bdd42b..21952539777adc9fc9c137268f7896ff4a84a84c 100644 (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);