Check that the instruction isn't in the value numbering scope.
authorBill Wendling <isanbard@gmail.com>
Mon, 22 Dec 2008 22:28:56 +0000 (22:28 +0000)
committerBill Wendling <isanbard@gmail.com>
Mon, 22 Dec 2008 22:28:56 +0000 (22:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61353 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/GVN.cpp

index aca49ba3c096a86d14137b65aec92a745370e39d..6087fd5ae9cd8f72e94ab661e81b008e47ef77c2 100644 (file)
@@ -1635,18 +1635,34 @@ void GVN::cleanupGlobalSets() {
 
 /// verifyRemoved - Verify that the specified instruction does not occur in our
 /// internal data structures.
-void GVN::verifyRemoved(const Instruction *I) const {
-  VN.verifyRemoved(I);
+void GVN::verifyRemoved(const Instruction *Inst) const {
+  VN.verifyRemoved(Inst);
 
   // Walk through the PHI map to make sure the instruction isn't hiding in there
   // somewhere.
   for (PhiMapType::iterator
-         II = phiMap.begin(), IE = phiMap.end(); II != IE; ++II) {
-    assert(II->first != I && "Inst is still a key in PHI map!");
+         I = phiMap.begin(), E = phiMap.end(); I != E; ++I) {
+    assert(I->first != Inst && "Inst is still a key in PHI map!");
 
     for (SmallPtrSet<Instruction*, 4>::iterator
-           SI = II->second.begin(), SE = II->second.end(); SI != SE; ++SI) {
-      assert(*SI != I && "Inst is still a value in PHI map!");
+           II = I->second.begin(), IE = I->second.end(); II != IE; ++II) {
+      assert(*II != Inst && "Inst is still a value in PHI map!");
+    }
+  }
+
+  // Walk through the value number scope to make sure the instruction isn't
+  // ferreted away in it.
+  for (DenseMap<BasicBlock*, ValueNumberScope*>::iterator
+         I = localAvail.begin(), E = localAvail.end(); I != E; ++I) {
+    const ValueNumberScope *VNS = I->second;
+
+    while (VNS) {
+      for (DenseMap<uint32_t, Value*>::iterator
+             II = VNS->table.begin(), IE = VNS->table.end(); II != IE; ++II) {
+        assert(II->second != Inst && "Inst still in value numbering scope!");
+      }
+
+      VNS = VNS->parent;
     }
   }
 }