Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(119)

Unified Diff: src/compiler/schedule.cc

Issue 639123009: Classes: Add basic support for properties (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: git rebase Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/schedule.h ('k') | src/compiler/scheduler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/schedule.cc
diff --git a/src/compiler/schedule.cc b/src/compiler/schedule.cc
index 9c5800f8ed15cd7ed7e08af1d62f72fd35058277..51400cf04c2d12b71a1b6d1a3126e2da5f69458d 100644
--- a/src/compiler/schedule.cc
+++ b/src/compiler/schedule.cc
@@ -13,7 +13,9 @@ namespace internal {
namespace compiler {
BasicBlock::BasicBlock(Zone* zone, Id id)
- : rpo_number_(-1),
+ : ao_number_(-1),
+ rpo_number_(-1),
+ deferred_(false),
dominator_(NULL),
loop_header_(NULL),
loop_depth_(0),
@@ -35,12 +37,6 @@ bool BasicBlock::LoopContains(BasicBlock* block) const {
}
-BasicBlock* BasicBlock::ContainingLoop() {
- if (IsLoopHeader()) return this;
- return loop_header();
-}
-
-
void BasicBlock::AddSuccessor(BasicBlock* successor) {
successors_.push_back(successor);
}
@@ -55,7 +51,6 @@ void BasicBlock::AddNode(Node* node) { nodes_.push_back(node); }
void BasicBlock::set_control(Control control) {
- DCHECK(control_ == BasicBlock::kNone);
control_ = control;
}
@@ -88,16 +83,6 @@ void BasicBlock::set_loop_header(BasicBlock* loop_header) {
}
-size_t BasicBlock::PredecessorIndexOf(BasicBlock* predecessor) {
- size_t j = 0;
- for (BasicBlock::Predecessors::iterator i = predecessors_.begin();
- i != predecessors_.end(); ++i, ++j) {
- if (*i == predecessor) break;
- }
- return j;
-}
-
-
std::ostream& operator<<(std::ostream& os, const BasicBlock::Control& c) {
switch (c) {
case BasicBlock::kNone:
@@ -121,6 +106,11 @@ std::ostream& operator<<(std::ostream& os, const BasicBlock::Id& id) {
}
+std::ostream& operator<<(std::ostream& os, const BasicBlock::RpoNumber& rpo) {
+ return os << rpo.ToSize();
+}
+
+
Schedule::Schedule(Zone* zone, size_t node_count_hint)
: zone_(zone),
all_blocks_(zone),
@@ -205,10 +195,6 @@ void Schedule::AddBranch(BasicBlock* block, Node* branch, BasicBlock* tblock,
AddSuccessor(block, tblock);
AddSuccessor(block, fblock);
SetControlInput(block, branch);
- if (branch->opcode() == IrOpcode::kBranch) {
- // TODO(titzer): require a Branch node here. (sloppy tests).
- SetBlockForNode(block, branch);
- }
}
@@ -216,13 +202,7 @@ void Schedule::AddReturn(BasicBlock* block, Node* input) {
DCHECK(block->control() == BasicBlock::kNone);
block->set_control(BasicBlock::kReturn);
SetControlInput(block, input);
- if (block != end()) {
- AddSuccessor(block, end());
- }
- if (input->opcode() == IrOpcode::kReturn) {
- // TODO(titzer): require a Return node here. (sloppy tests).
- SetBlockForNode(block, input);
- }
+ if (block != end()) AddSuccessor(block, end());
}
@@ -234,12 +214,42 @@ void Schedule::AddThrow(BasicBlock* block, Node* input) {
}
+void Schedule::InsertBranch(BasicBlock* block, BasicBlock* end, Node* branch,
+ BasicBlock* tblock, BasicBlock* fblock) {
+ DCHECK(block->control() != BasicBlock::kNone);
+ DCHECK(end->control() == BasicBlock::kNone);
+ end->set_control(block->control());
+ block->set_control(BasicBlock::kBranch);
+ MoveSuccessors(block, end);
+ AddSuccessor(block, tblock);
+ AddSuccessor(block, fblock);
+ if (block->control_input() != NULL) {
+ SetControlInput(end, block->control_input());
+ }
+ SetControlInput(block, branch);
+}
+
+
void Schedule::AddSuccessor(BasicBlock* block, BasicBlock* succ) {
block->AddSuccessor(succ);
succ->AddPredecessor(block);
}
+void Schedule::MoveSuccessors(BasicBlock* from, BasicBlock* to) {
+ for (BasicBlock::Predecessors::iterator i = from->successors_begin();
+ i != from->successors_end(); ++i) {
+ BasicBlock* succ = *i;
+ to->AddSuccessor(succ);
+ for (BasicBlock::Predecessors::iterator j = succ->predecessors_begin();
+ j != succ->predecessors_end(); ++j) {
+ if (*j == from) *j = to;
+ }
+ }
+ from->ClearSuccessors();
+}
+
+
void Schedule::SetControlInput(BasicBlock* block, Node* node) {
block->set_control_input(node);
SetBlockForNode(block, node);
@@ -261,6 +271,7 @@ std::ostream& operator<<(std::ostream& os, const Schedule& s) {
for (BasicBlockVectorIter i = rpo->begin(); i != rpo->end(); ++i) {
BasicBlock* block = *i;
os << "--- BLOCK B" << block->id();
+ if (block->deferred()) os << " (deferred)";
if (block->PredecessorCount() != 0) os << " <- ";
bool comma = false;
for (BasicBlock::Predecessors::iterator j = block->predecessors_begin();
« no previous file with comments | « src/compiler/schedule.h ('k') | src/compiler/scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698