aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Analysis/AliasSetTracker.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Analysis/AliasSetTracker.h')
-rw-r--r--include/llvm/Analysis/AliasSetTracker.h28
1 files changed, 14 insertions, 14 deletions
diff --git a/include/llvm/Analysis/AliasSetTracker.h b/include/llvm/Analysis/AliasSetTracker.h
index d9afe30..10e59e9 100644
--- a/include/llvm/Analysis/AliasSetTracker.h
+++ b/include/llvm/Analysis/AliasSetTracker.h
@@ -62,9 +62,8 @@ class AliasSet {
if (AS->Forward) {
AliasSet *OldAS = AS;
AS = OldAS->getForwardedTarget(AST);
- if (--OldAS->RefCount == 0)
- OldAS->removeFromTracker(AST);
- AS->RefCount++;
+ AS->addRef();
+ OldAS->dropRef(AST);
}
return AS;
}
@@ -118,6 +117,13 @@ class AliasSet {
void setPrev(AliasSet *P) { Prev = P; }
void setNext(AliasSet *N) { Next = N; }
+ void addRef() { ++RefCount; }
+ void dropRef(AliasSetTracker &AST) {
+ assert(RefCount >= 1 && "Invalid reference count detected!");
+ if (--RefCount == 0)
+ removeFromTracker(AST);
+ }
+
public:
/// Accessors...
bool isRef() const { return AccessTy & Refs; }
@@ -187,15 +193,10 @@ private:
AliasSet() : PtrList(0), PtrListEnd(&PtrList), Forward(0), RefCount(0),
AccessTy(NoModRef), AliasTy(MustAlias), Volatile(false) {
}
+
AliasSet(const AliasSet &AS) {
- // AliasSet's only get copy constructed in simple circumstances. In
- // particular, they cannot have any pointers in their list. Despite this,
- // we have to be sure to update the PtrListEnd to not point to the source
- // AliasSet's list.
- assert(AS.PtrList == 0 && "AliasSet has pointers in it!");
- PtrList = 0; PtrListEnd = &PtrList;
- Forward = AS.Forward; RefCount = AS.RefCount;
- AccessTy = AS.AccessTy; AliasTy = AS.AliasTy; Volatile = AS.Volatile;
+ assert(0 && "Copy ctor called!?!?!");
+ abort();
}
HashNodePair *getSomePointer() const {
@@ -210,9 +211,8 @@ private:
AliasSet *Dest = Forward->getForwardedTarget(AST);
if (Dest != Forward) {
- Dest->RefCount++;
- if (--Forward->RefCount == 0)
- Forward->removeFromTracker(AST);
+ Dest->addRef();
+ Forward->dropRef(AST);
Forward = Dest;
}
return Dest;