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