Index: src/compiler/scheduler.cc |
diff --git a/src/compiler/scheduler.cc b/src/compiler/scheduler.cc |
index 36ed08823d5d6fa9ae9a7082b4fc0f900441a225..ec3296a19aae7f85a8cf8ac5cff925d171d82e14 100644 |
--- a/src/compiler/scheduler.cc |
+++ b/src/compiler/scheduler.cc |
@@ -527,7 +527,6 @@ class SpecialRPONumberer : public ZoneObject { |
schedule_(schedule), |
order_(NULL), |
loops_(zone), |
- beyond_end_(NULL), |
backedges_(1, zone), |
stack_(zone), |
previous_block_count_(0) {} |
@@ -535,9 +534,9 @@ class SpecialRPONumberer : public ZoneObject { |
// Computes the special reverse-post-order for the main control flow graph, |
// that is for the graph spanned between the schedule's start and end blocks. |
void ComputeSpecialRPO() { |
+ DCHECK(schedule_->end()->SuccessorCount() == 0); |
DCHECK_EQ(NULL, order_); // Main order does not exist yet. |
- // TODO(mstarzinger): Should use Schedule::end() after tests are fixed. |
- ComputeAndInsertSpecialRPO(schedule_->start(), NULL); |
+ ComputeAndInsertSpecialRPO(schedule_->start(), schedule_->end()); |
} |
// Computes the special reverse-post-order for a partial control flow graph, |
@@ -570,7 +569,9 @@ class SpecialRPONumberer : public ZoneObject { |
l->block->set_rpo_number(number++); |
schedule_->rpo_order()->push_back(l->block); |
} |
- BeyondEndSentinel()->set_rpo_number(number); |
+ if (schedule_->end()->rpo_number() < 0) { |
+ schedule_->end()->set_rpo_number(number); |
+ } |
} |
// Print and verify the special reverse-post-order. |
@@ -655,17 +656,6 @@ class SpecialRPONumberer : public ZoneObject { |
return block->ao_number() >= 0; |
} |
- // TODO(mstarzinger): We only need this special sentinel because some tests |
- // use the schedule's end block in actual control flow (e.g. with end having |
- // successors). Once this has been cleaned up we can use the end block here. |
- BasicBlock* BeyondEndSentinel() { |
- if (beyond_end_ == NULL) { |
- BasicBlock::Id id = BasicBlock::Id::FromInt(-1); |
- beyond_end_ = new (schedule_->zone()) BasicBlock(schedule_->zone(), id); |
- } |
- return beyond_end_; |
- } |
- |
// Compute special RPO for the control flow graph between {entry} and {end}, |
// mutating any existing order so that the result is still valid. |
void ComputeAndInsertSpecialRPO(BasicBlock* entry, BasicBlock* end) { |
@@ -848,7 +838,7 @@ class SpecialRPONumberer : public ZoneObject { |
++loop_depth; |
current_loop = &loops_[GetLoopNumber(current)]; |
BlockList* end = current_loop->end; |
- current->set_loop_end(end == NULL ? BeyondEndSentinel() : end->block); |
+ current->set_loop_end(end == NULL ? schedule_->end() : end->block); |
current_header = current_loop->header; |
Trace("B%d is a loop header, increment loop depth to %d\n", |
current->id().ToInt(), loop_depth); |
@@ -1018,7 +1008,6 @@ class SpecialRPONumberer : public ZoneObject { |
Schedule* schedule_; |
BlockList* order_; |
ZoneVector<LoopInfo> loops_; |
- BasicBlock* beyond_end_; |
ZoneList<Backedge> backedges_; |
ZoneVector<SpecialRPOStackFrame> stack_; |
size_t previous_block_count_; |