| 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_;
|
|
|