| Index: src/hydrogen.cc
|
| ===================================================================
|
| --- src/hydrogen.cc (revision 9314)
|
| +++ src/hydrogen.cc (working copy)
|
| @@ -422,7 +422,7 @@
|
| };
|
|
|
|
|
| -void HGraph::Verify() const {
|
| +void HGraph::Verify(bool do_full_verify) const {
|
| for (int i = 0; i < blocks_.length(); i++) {
|
| HBasicBlock* block = blocks_.at(i);
|
|
|
| @@ -473,25 +473,27 @@
|
| // Check special property of first block to have no predecessors.
|
| ASSERT(blocks_.at(0)->predecessors()->is_empty());
|
|
|
| - // Check that the graph is fully connected.
|
| - ReachabilityAnalyzer analyzer(entry_block_, blocks_.length(), NULL);
|
| - ASSERT(analyzer.visited_count() == blocks_.length());
|
| + if (do_full_verify) {
|
| + // Check that the graph is fully connected.
|
| + ReachabilityAnalyzer analyzer(entry_block_, blocks_.length(), NULL);
|
| + ASSERT(analyzer.visited_count() == blocks_.length());
|
|
|
| - // Check that entry block dominator is NULL.
|
| - ASSERT(entry_block_->dominator() == NULL);
|
| + // Check that entry block dominator is NULL.
|
| + ASSERT(entry_block_->dominator() == NULL);
|
|
|
| - // Check dominators.
|
| - for (int i = 0; i < blocks_.length(); ++i) {
|
| - HBasicBlock* block = blocks_.at(i);
|
| - if (block->dominator() == NULL) {
|
| - // Only start block may have no dominator assigned to.
|
| - ASSERT(i == 0);
|
| - } else {
|
| - // Assert that block is unreachable if dominator must not be visited.
|
| - ReachabilityAnalyzer dominator_analyzer(entry_block_,
|
| - blocks_.length(),
|
| - block->dominator());
|
| - ASSERT(!dominator_analyzer.reachable()->Contains(block->block_id()));
|
| + // Check dominators.
|
| + for (int i = 0; i < blocks_.length(); ++i) {
|
| + HBasicBlock* block = blocks_.at(i);
|
| + if (block->dominator() == NULL) {
|
| + // Only start block may have no dominator assigned to.
|
| + ASSERT(i == 0);
|
| + } else {
|
| + // Assert that block is unreachable if dominator must not be visited.
|
| + ReachabilityAnalyzer dominator_analyzer(entry_block_,
|
| + blocks_.length(),
|
| + block->dominator());
|
| + ASSERT(!dominator_analyzer.reachable()->Contains(block->block_id()));
|
| + }
|
| }
|
| }
|
| }
|
| @@ -2320,6 +2322,12 @@
|
|
|
| graph()->OrderBlocks();
|
| graph()->AssignDominators();
|
| +
|
| +#ifdef DEBUG
|
| + // Do a full verify after building the graph and computing dominators.
|
| + graph()->Verify(true);
|
| +#endif
|
| +
|
| graph()->PropagateDeoptimizingMark();
|
| graph()->EliminateRedundantPhis();
|
| if (!graph()->CheckPhis()) {
|
| @@ -6822,7 +6830,7 @@
|
| }
|
|
|
| #ifdef DEBUG
|
| - if (graph_ != NULL) graph_->Verify();
|
| + if (graph_ != NULL) graph_->Verify(false); // No full verify.
|
| if (allocator_ != NULL) allocator_->Verify();
|
| #endif
|
| }
|
|
|