now that you can put a PointerIntPair in a SmallPtrSet, remove some
authorChris Lattner <sabre@nondot.org>
Sun, 29 Mar 2009 00:24:04 +0000 (00:24 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 29 Mar 2009 00:24:04 +0000 (00:24 +0000)
hackish workarounds from memdep

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67971 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/MemoryDependenceAnalysis.h
lib/Analysis/MemoryDependenceAnalysis.cpp

index bfe7cbe4e00c95fc27e51ed89b13e3ffd9109510..d7d795e08a16eaa9469b5b0228a9b10b57008d5c 100644 (file)
@@ -171,9 +171,8 @@ namespace llvm {
     CachedNonLocalPointerInfo NonLocalPointerDeps;
 
     // A map from instructions to their non-local pointer dependencies.
-    // The elements of the SmallPtrSet are ValueIsLoadPair's.
     typedef DenseMap<Instruction*, 
-                     SmallPtrSet<void*, 4> > ReverseNonLocalPtrDepTy;
+                     SmallPtrSet<ValueIsLoadPair, 4> > ReverseNonLocalPtrDepTy;
     ReverseNonLocalPtrDepTy ReverseNonLocalPtrDeps;
 
     
index ed95b90cc9894af3da85e4135476a7541e50ca15..74c962147ceed0f75bbc68d322ba07328783a592 100644 (file)
@@ -86,9 +86,9 @@ bool MemoryDependenceAnalysis::runOnFunction(Function &) {
 /// 'Inst's set in ReverseMap.  If the set becomes empty, remove Inst's entry.
 template <typename KeyTy>
 static void RemoveFromReverseMap(DenseMap<Instruction*, 
-                                 SmallPtrSet<KeyTy*, 4> > &ReverseMap,
-                                 Instruction *Inst, KeyTy *Val) {
-  typename DenseMap<Instruction*, SmallPtrSet<KeyTy*, 4> >::iterator
+                                 SmallPtrSet<KeyTy, 4> > &ReverseMap,
+                                 Instruction *Inst, KeyTy Val) {
+  typename DenseMap<Instruction*, SmallPtrSet<KeyTy, 4> >::iterator
   InstIt = ReverseMap.find(Inst);
   assert(InstIt != ReverseMap.end() && "Reverse map out of sync?");
   bool Found = InstIt->second.erase(Val);
@@ -560,8 +560,7 @@ GetNonLocalInfoForBlock(Value *Pointer, uint64_t PointeeSize,
     
     // Eliminating the dirty entry from 'Cache', so update the reverse info.
     ValueIsLoadPair CacheKey(Pointer, isLoad);
-    RemoveFromReverseMap(ReverseNonLocalPtrDeps, ScanPos,
-                         CacheKey.getOpaqueValue());
+    RemoveFromReverseMap(ReverseNonLocalPtrDeps, ScanPos, CacheKey);
   } else {
     ++NumUncacheNonLocalPtr;
   }
@@ -588,7 +587,7 @@ GetNonLocalInfoForBlock(Value *Pointer, uint64_t PointeeSize,
   Instruction *Inst = Dep.getInst();
   assert(Inst && "Didn't depend on anything?");
   ValueIsLoadPair CacheKey(Pointer, isLoad);
-  ReverseNonLocalPtrDeps[Inst].insert(CacheKey.getOpaqueValue());
+  ReverseNonLocalPtrDeps[Inst].insert(CacheKey);
   return Dep;
 }
 
@@ -827,7 +826,7 @@ getNonLocalPointerDepFromBB(Value *Pointer, uint64_t PointeeSize,
       assert(I->second.isNonLocal() &&
              "Should only be here with transparent block");
       I->second = MemDepResult::getClobber(BB->begin());
-      ReverseNonLocalPtrDeps[BB->begin()].insert(CacheKey.getOpaqueValue());
+      ReverseNonLocalPtrDeps[BB->begin()].insert(CacheKey);
       Result.push_back(*I);
       break;
     }
@@ -883,7 +882,7 @@ RemoveCachedNonLocalPointerDependencies(ValueIsLoadPair P) {
     assert(Target->getParent() == PInfo[i].first);
     
     // Eliminating the dirty entry from 'Cache', so update the reverse info.
-    RemoveFromReverseMap(ReverseNonLocalPtrDeps, Target, P.getOpaqueValue());
+    RemoveFromReverseMap(ReverseNonLocalPtrDeps, Target, P);
   }
   
   // Remove P from NonLocalPointerDeps (which deletes NonLocalDepInfo).
@@ -1030,13 +1029,12 @@ void MemoryDependenceAnalysis::removeInstruction(Instruction *RemInst) {
   ReverseNonLocalPtrDepTy::iterator ReversePtrDepIt =
     ReverseNonLocalPtrDeps.find(RemInst);
   if (ReversePtrDepIt != ReverseNonLocalPtrDeps.end()) {
-    SmallPtrSet<void*, 4> &Set = ReversePtrDepIt->second;
+    SmallPtrSet<ValueIsLoadPair, 4> &Set = ReversePtrDepIt->second;
     SmallVector<std::pair<Instruction*, ValueIsLoadPair>,8> ReversePtrDepsToAdd;
     
-    for (SmallPtrSet<void*, 4>::iterator I = Set.begin(), E = Set.end();
-         I != E; ++I) {
-      ValueIsLoadPair P;
-      P.setFromOpaqueValue(*I);
+    for (SmallPtrSet<ValueIsLoadPair, 4>::iterator I = Set.begin(),
+         E = Set.end(); I != E; ++I) {
+      ValueIsLoadPair P = *I;
       assert(P.getPointer() != RemInst &&
              "Already removed NonLocalPointerDeps info for RemInst");
       
@@ -1066,7 +1064,7 @@ void MemoryDependenceAnalysis::removeInstruction(Instruction *RemInst) {
     
     while (!ReversePtrDepsToAdd.empty()) {
       ReverseNonLocalPtrDeps[ReversePtrDepsToAdd.back().first]
-        .insert(ReversePtrDepsToAdd.back().second.getOpaqueValue());
+        .insert(ReversePtrDepsToAdd.back().second);
       ReversePtrDepsToAdd.pop_back();
     }
   }
@@ -1126,10 +1124,10 @@ void MemoryDependenceAnalysis::verifyRemoved(Instruction *D) const {
        E = ReverseNonLocalPtrDeps.end(); I != E; ++I) {
     assert(I->first != D && "Inst occurs in rev NLPD map");
     
-    for (SmallPtrSet<void*, 4>::const_iterator II = I->second.begin(),
+    for (SmallPtrSet<ValueIsLoadPair, 4>::const_iterator II = I->second.begin(),
          E = I->second.end(); II != E; ++II)
-      assert(*II != ValueIsLoadPair(D, false).getOpaqueValue() &&
-             *II != ValueIsLoadPair(D, true).getOpaqueValue() &&
+      assert(*II != ValueIsLoadPair(D, false) &&
+             *II != ValueIsLoadPair(D, true) &&
              "Inst occurs in ReverseNonLocalPtrDeps map");
   }