Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index b1b2c32a9a5e5d6ce1e02ebe9f1ebecea5588993..82c9b70e33a2e22068db4bb5a42872dd2402f245 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -557,13 +557,15 @@ void HBasicBlock::FinishExit(HControlInstruction* instruction) { |
HGraph::HGraph(CompilationInfo* info) |
- : HSubgraph(this), |
- next_block_id_(0), |
+ : next_block_id_(0), |
+ entry_block_(NULL), |
blocks_(8), |
values_(16), |
phi_list_(NULL) { |
start_environment_ = new HEnvironment(NULL, info->scope(), info->closure()); |
start_environment_->set_ast_id(info->function()->id()); |
+ entry_block_ = CreateBasicBlock(); |
+ entry_block_->SetInitialEnvironment(start_environment_); |
} |
@@ -785,11 +787,11 @@ void HGraph::EliminateUnreachablePhis() { |
bool HGraph::CollectPhis() { |
- const ZoneList<HBasicBlock*>* blocks = graph_->blocks(); |
- phi_list_ = new ZoneList<HPhi*>(blocks->length()); |
- for (int i = 0; i < blocks->length(); ++i) { |
- for (int j = 0; j < blocks->at(i)->phis()->length(); j++) { |
- HPhi* phi = blocks->at(i)->phis()->at(j); |
+ int block_count = blocks_.length(); |
+ phi_list_ = new ZoneList<HPhi*>(block_count); |
+ for (int i = 0; i < block_count; ++i) { |
+ for (int j = 0; j < blocks_[i]->phis()->length(); ++j) { |
+ HPhi* phi = blocks_[i]->phis()->at(j); |
phi_list_->Add(phi); |
// We don't support phi uses of arguments for now. |
if (phi->CheckFlag(HValue::kIsArguments)) return false; |
@@ -2080,36 +2082,6 @@ void TestContext::BuildBranch(HValue* value) { |
} while (false) |
-// 'thing' could be an expression, statement, or list of statements. |
-#define ADD_TO_SUBGRAPH(graph, thing) \ |
- do { \ |
- AddToSubgraph(graph, thing); \ |
- if (HasStackOverflow()) return; \ |
- } while (false) |
- |
- |
-class HGraphBuilder::SubgraphScope BASE_EMBEDDED { |
- public: |
- SubgraphScope(HGraphBuilder* builder, HSubgraph* new_subgraph) |
- : builder_(builder) { |
- old_subgraph_ = builder_->current_subgraph_; |
- subgraph_ = new_subgraph; |
- builder_->current_subgraph_ = subgraph_; |
- } |
- |
- ~SubgraphScope() { |
- builder_->current_subgraph_ = old_subgraph_; |
- } |
- |
- HSubgraph* subgraph() const { return subgraph_; } |
- |
- private: |
- HGraphBuilder* builder_; |
- HSubgraph* old_subgraph_; |
- HSubgraph* subgraph_; |
-}; |
- |
- |
void HGraphBuilder::Bailout(const char* reason) { |
if (FLAG_trace_bailout) { |
SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString()); |
@@ -2161,13 +2133,10 @@ void HGraphBuilder::VisitExpressions(ZoneList<Expression*>* exprs) { |
HGraph* HGraphBuilder::CreateGraph() { |
- ASSERT(subgraph() == NULL); |
graph_ = new HGraph(info()); |
- |
{ |
HPhase phase("Block building"); |
- graph()->Initialize(CreateBasicBlock(graph()->start_environment())); |
- current_subgraph_ = graph(); |
+ current_block_ = graph()->entry_block(); |
Scope* scope = info()->scope(); |
if (scope->HasIllegalRedeclaration()) { |
@@ -2245,25 +2214,6 @@ HGraph* HGraphBuilder::CreateGraph() { |
} |
-void HGraphBuilder::AddToSubgraph(HSubgraph* graph, Statement* stmt) { |
- SubgraphScope scope(this, graph); |
- Visit(stmt); |
-} |
- |
- |
-void HGraphBuilder::AddToSubgraph(HSubgraph* graph, Expression* expr) { |
- SubgraphScope scope(this, graph); |
- VisitForValue(expr); |
-} |
- |
- |
-void HGraphBuilder::AddToSubgraph(HSubgraph* graph, |
- ZoneList<Statement*>* stmts) { |
- SubgraphScope scope(this, graph); |
- VisitStatements(stmts); |
-} |
- |
- |
HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) { |
ASSERT(current_block() != NULL); |
current_block()->AddInstruction(instr); |