diff options
| author | Dan Gohman <gohman@apple.com> | 2009-07-30 20:21:41 +0000 | 
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2009-07-30 20:21:41 +0000 | 
| commit | f4362da1b710a7c29612515daf5b0582ce37302c (patch) | |
| tree | eacd4e113d9818961e6f0b4d3bbdad992ae9759e /llvm/lib/Analysis/AliasSetTracker.cpp | |
| parent | 79c079b4789823b8175f8bc4c65005ee3ec52ede (diff) | |
| download | llvm-f4362da1b710a7c29612515daf5b0582ce37302c.zip llvm-f4362da1b710a7c29612515daf5b0582ce37302c.tar.gz llvm-f4362da1b710a7c29612515daf5b0582ce37302c.tar.bz2  | |
Use CallbackVH in AliasSetTracker to avoid getting stuck with
dangling Value*s.
llvm-svn: 77623
Diffstat (limited to 'llvm/lib/Analysis/AliasSetTracker.cpp')
| -rw-r--r-- | llvm/lib/Analysis/AliasSetTracker.cpp | 24 | 
1 files changed, 20 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/AliasSetTracker.cpp b/llvm/lib/Analysis/AliasSetTracker.cpp index 841cd2b..9f201c3 100644 --- a/llvm/lib/Analysis/AliasSetTracker.cpp +++ b/llvm/lib/Analysis/AliasSetTracker.cpp @@ -187,8 +187,8 @@ bool AliasSet::aliasesCallSite(CallSite CS, AliasAnalysis &AA) const {  void AliasSetTracker::clear() {    // Delete all the PointerRec entries. -  for (DenseMap<Value*, AliasSet::PointerRec*>::iterator I = PointerMap.begin(), -       E = PointerMap.end(); I != E; ++I) +  for (PointerMapType::iterator I = PointerMap.begin(), E = PointerMap.end(); +       I != E; ++I)      I->second->eraseFromList();    PointerMap.clear(); @@ -485,7 +485,7 @@ void AliasSetTracker::deleteValue(Value *PtrVal) {          AS->removeCallSite(CS);    // First, look up the PointerRec for this pointer. -  DenseMap<Value*, AliasSet::PointerRec*>::iterator I = PointerMap.find(PtrVal); +  PointerMapType::iterator I = PointerMap.find(PtrVal);    if (I == PointerMap.end()) return;  // Noop    // If we found one, remove the pointer from the alias set it is in. @@ -511,7 +511,7 @@ void AliasSetTracker::copyValue(Value *From, Value *To) {    AA.copyValue(From, To);    // First, look up the PointerRec for this pointer. -  DenseMap<Value*, AliasSet::PointerRec*>::iterator I = PointerMap.find(From); +  PointerMapType::iterator I = PointerMap.find(From);    if (I == PointerMap.end())      return;  // Noop    assert(I->second->hasAliasSet() && "Dead entry?"); @@ -576,6 +576,22 @@ void AliasSet::dump() const { print (cerr); }  void AliasSetTracker::dump() const { print(cerr); }  //===----------------------------------------------------------------------===// +//                     ASTCallbackVH Class Implementation +//===----------------------------------------------------------------------===// + +void AliasSetTracker::ASTCallbackVH::deleted() { +  assert(AST && "ASTCallbackVH called with a null AliasSetTracker!"); +  AST->deleteValue(getValPtr()); +  // this now dangles! +} + +AliasSetTracker::ASTCallbackVH::ASTCallbackVH(Value *V, AliasSetTracker *ast) +  : CallbackVH(V == DenseMapInfo<Value *>::getEmptyKey() ? 0 : +               V == DenseMapInfo<Value *>::getTombstoneKey() ? 0 : +               V), +    AST(ast) {} + +//===----------------------------------------------------------------------===//  //                            AliasSetPrinter Pass  //===----------------------------------------------------------------------===//  | 
