+
+ for (BlockIndex blockIndex = 0; blockIndex < m_graph.numBlocks(); ++blockIndex) {
+ BasicBlock* block = m_graph.block(blockIndex);
+ if (!block)
+ continue;
+ for (size_t i = 0; i < block->numNodes(); ++i) {
+ Node* node = block->node(i);
+ if (m_graph.m_refCountState == ExactRefCount)
+ V_EQUAL((node), m_myRefCounts.get(node), node->adjustedRefCount());
+ else
+ V_EQUAL((node), node->refCount(), 1);
+ }
+
+ for (size_t i = 0 ; i < block->size() - 1; ++i) {
+ Node* node = block->at(i);
+ VALIDATE((node), !node->isTerminal());
+ }
+
+ for (size_t i = 0; i < block->size(); ++i) {
+ Node* node = block->at(i);
+
+ if (node->hasStructure())
+ VALIDATE((node), !!node->structure());
+
+ switch (node->op()) {
+ case Identity:
+ VALIDATE((node), canonicalResultRepresentation(node->result()) == canonicalResultRepresentation(node->child1()->result()));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ switch (m_graph.m_form) {
+ case LoadStore:
+ case ThreadedCPS:
+ validateCPS();
+ break;
+
+ case SSA:
+ validateSSA();
+ break;
+ }
+ }
+
+private:
+ Graph& m_graph;
+ GraphDumpMode m_graphDumpMode;
+
+ HashMap<Node*, unsigned> m_myRefCounts;
+ HashSet<Node*> m_acceptableNodes;
+
+ void validateCPS()
+ {
+ for (BlockIndex blockIndex = 0; blockIndex < m_graph.numBlocks(); ++blockIndex) {
+ BasicBlock* block = m_graph.block(blockIndex);
+ if (!block)