aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2008-12-22 21:36:08 +0000
committerBill Wendling <isanbard@gmail.com>2008-12-22 21:36:08 +0000
commit246dbbb8befcb04abb5451d73b5d94f7d21f22c6 (patch)
tree9ea083846bf99d44543553f73dfcd12ea02d8c1b
parent00d448a341175556ebd86af68219f5b90b7145a3 (diff)
Add verification functions to GVN which check to see that an instruction was
truely deleted. These will be expanded with further checks of all of the data structures. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61347 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Transforms/Scalar/GVN.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp
index 6e532630c7..8a3b384b06 100644
--- a/lib/Transforms/Scalar/GVN.cpp
+++ b/lib/Transforms/Scalar/GVN.cpp
@@ -173,6 +173,7 @@ namespace {
void setMemDep(MemoryDependenceAnalysis* M) { MD = M; }
void setDomTree(DominatorTree* D) { DT = D; }
uint32_t getNextUnusedValueNumber() { return nextValueNumber; }
+ void verifyRemoved(const Value *) const;
};
}
@@ -678,6 +679,15 @@ void ValueTable::erase(Value* V) {
valueNumbering.erase(V);
}
+/// verifyRemoved - Verify that the value is removed from all internal data
+/// structures.
+void ValueTable::verifyRemoved(const Value *V) const {
+ for (DenseMap<Value*, uint32_t>::iterator
+ I = valueNumbering.begin(), E = valueNumbering.end(); I != E; ++I) {
+ assert(I->first != V && "Inst still occurs in value numbering map!");
+ }
+}
+
//===----------------------------------------------------------------------===//
// GVN Pass
//===----------------------------------------------------------------------===//
@@ -741,6 +751,7 @@ namespace {
bool mergeBlockIntoPredecessor(BasicBlock* BB);
Value* AttemptRedundancyElimination(Instruction* orig, unsigned valno);
void cleanupGlobalSets();
+ void verifyRemoved(const Instruction *I) const;
};
char GVN::ID = 0;
@@ -859,6 +870,7 @@ Value *GVN::GetValueForBlock(BasicBlock *BB, Instruction* orig,
DEBUG(cerr << "GVN removed: " << *PN);
MD->removeInstruction(PN);
PN->eraseFromParent();
+ DEBUG(verifyRemoved(PN));
Phis[BB] = v;
return v;
@@ -1640,3 +1652,9 @@ void GVN::cleanupGlobalSets() {
delete I->second;
localAvail.clear();
}
+
+/// verifyRemoved - Verify that the specified instruction does not occur in our
+/// internal data structures.
+void GVN::verifyRemoved(const Instruction *I) const {
+ VN.verifyRemoved(I);
+}