Revision: 25194
Author: [email protected]
Date: Thu Nov 6 13:11:53 2014 UTC
Log: Revert "Remove workaround for successors on end block from
scheduler."
[email protected]
Review URL: https://codereview.chromium.org/705043002
https://code.google.com/p/v8/source/detail?r=25194
Modified:
/branches/bleeding_edge/src/compiler/scheduler.cc
/branches/bleeding_edge/test/cctest/compiler/test-scheduler.cc
=======================================
--- /branches/bleeding_edge/src/compiler/scheduler.cc Thu Nov 6 12:30:47
2014 UTC
+++ /branches/bleeding_edge/src/compiler/scheduler.cc Thu Nov 6 13:11:53
2014 UTC
@@ -527,6 +527,7 @@
schedule_(schedule),
order_(NULL),
loops_(zone),
+ beyond_end_(NULL),
backedges_(1, zone),
stack_(zone),
previous_block_count_(0) {}
@@ -534,9 +535,9 @@
// 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.
- ComputeAndInsertSpecialRPO(schedule_->start(), schedule_->end());
+ // TODO(mstarzinger): Should use Schedule::end() after tests are fixed.
+ ComputeAndInsertSpecialRPO(schedule_->start(), NULL);
}
// Computes the special reverse-post-order for a partial control flow
graph,
@@ -569,9 +570,7 @@
l->block->set_rpo_number(number++);
schedule_->rpo_order()->push_back(l->block);
}
- if (schedule_->end()->rpo_number() < 0) {
- schedule_->end()->set_rpo_number(number);
- }
+ BeyondEndSentinel()->set_rpo_number(number);
}
// Print and verify the special reverse-post-order.
@@ -655,6 +654,17 @@
static bool HasLoopNumber(BasicBlock* block) {
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.
@@ -838,7 +848,7 @@
++loop_depth;
current_loop = &loops_[GetLoopNumber(current)];
BlockList* end = current_loop->end;
- current->set_loop_end(end == NULL ? schedule_->end() : end->block);
+ current->set_loop_end(end == NULL ? BeyondEndSentinel() :
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);
@@ -1008,6 +1018,7 @@
Schedule* schedule_;
BlockList* order_;
ZoneVector<LoopInfo> loops_;
+ BasicBlock* beyond_end_;
ZoneList<Backedge> backedges_;
ZoneVector<SpecialRPOStackFrame> stack_;
size_t previous_block_count_;
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-scheduler.cc Thu Nov
6 12:30:47 2014 UTC
+++ /branches/bleeding_edge/test/cctest/compiler/test-scheduler.cc Thu Nov
6 13:11:53 2014 UTC
@@ -200,13 +200,12 @@
TEST(RPOEntryLoop) {
HandleAndZoneScope scope;
Schedule schedule(scope.main_zone());
- BasicBlock* body = schedule.NewBasicBlock();
- schedule.AddSuccessorForTesting(schedule.start(), body);
- schedule.AddSuccessorForTesting(body, schedule.start());
+ schedule.AddSuccessorForTesting(schedule.start(), schedule.end());
+ schedule.AddSuccessorForTesting(schedule.end(), schedule.start());
ZonePool zone_pool(scope.main_isolate());
BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool,
&schedule);
CheckRPONumbers(order, 2, true);
- BasicBlock* loop[] = {schedule.start(), body};
+ BasicBlock* loop[] = {schedule.start(), schedule.end()};
CheckLoop(order, loop, 2);
}
@@ -654,7 +653,7 @@
BasicBlock* A = schedule.start();
BasicBlock* B = schedule.NewBasicBlock();
BasicBlock* C = schedule.NewBasicBlock();
- BasicBlock* D = schedule.NewBasicBlock();
+ BasicBlock* D = schedule.end();
BasicBlock* E = schedule.NewBasicBlock();
schedule.AddSuccessorForTesting(A, B);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.