| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/hydrogen.h" | 5 #include "src/hydrogen.h" |
| 6 #include "src/hydrogen-osr.h" | 6 #include "src/hydrogen-osr.h" |
| 7 | 7 |
| 8 namespace v8 { | 8 namespace v8 { |
| 9 namespace internal { | 9 namespace internal { |
| 10 | 10 |
| 11 // True iff. we are compiling for OSR and the statement is the entry. | 11 // True iff. we are compiling for OSR and the statement is the entry. |
| 12 bool HOsrBuilder::HasOsrEntryAt(IterationStatement* statement) { | 12 bool HOsrBuilder::HasOsrEntryAt(IterationStatement* statement) { |
| 13 return statement->OsrEntryId() == builder_->current_info()->osr_ast_id(); | 13 return statement->OsrEntryId() == builder_->current_info()->osr_ast_id(); |
| 14 } | 14 } |
| 15 | 15 |
| 16 | 16 |
| 17 HBasicBlock* HOsrBuilder::BuildOsrLoopEntry(IterationStatement* statement) { | 17 HBasicBlock* HOsrBuilder::BuildOsrLoopEntry(IterationStatement* statement) { |
| 18 ASSERT(HasOsrEntryAt(statement)); | 18 DCHECK(HasOsrEntryAt(statement)); |
| 19 | 19 |
| 20 Zone* zone = builder_->zone(); | 20 Zone* zone = builder_->zone(); |
| 21 HGraph* graph = builder_->graph(); | 21 HGraph* graph = builder_->graph(); |
| 22 | 22 |
| 23 // only one OSR point per compile is allowed. | 23 // only one OSR point per compile is allowed. |
| 24 ASSERT(graph->osr() == NULL); | 24 DCHECK(graph->osr() == NULL); |
| 25 | 25 |
| 26 // remember this builder as the one OSR builder in the graph. | 26 // remember this builder as the one OSR builder in the graph. |
| 27 graph->set_osr(this); | 27 graph->set_osr(this); |
| 28 | 28 |
| 29 HBasicBlock* non_osr_entry = graph->CreateBasicBlock(); | 29 HBasicBlock* non_osr_entry = graph->CreateBasicBlock(); |
| 30 osr_entry_ = graph->CreateBasicBlock(); | 30 osr_entry_ = graph->CreateBasicBlock(); |
| 31 HValue* true_value = graph->GetConstantTrue(); | 31 HValue* true_value = graph->GetConstantTrue(); |
| 32 HBranch* test = builder_->New<HBranch>(true_value, ToBooleanStub::Types(), | 32 HBranch* test = builder_->New<HBranch>(true_value, ToBooleanStub::Types(), |
| 33 non_osr_entry, osr_entry_); | 33 non_osr_entry, osr_entry_); |
| 34 builder_->FinishCurrentBlock(test); | 34 builder_->FinishCurrentBlock(test); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 const ZoneList<HPhi*>* phis = osr_loop_entry_->phis(); | 93 const ZoneList<HPhi*>* phis = osr_loop_entry_->phis(); |
| 94 for (int j = 0; j < phis->length(); j++) { | 94 for (int j = 0; j < phis->length(); j++) { |
| 95 HPhi* phi = phis->at(j); | 95 HPhi* phi = phis->at(j); |
| 96 if (phi->HasMergedIndex()) { | 96 if (phi->HasMergedIndex()) { |
| 97 osr_values_->at(phi->merged_index())->set_incoming_value(phi); | 97 osr_values_->at(phi->merged_index())->set_incoming_value(phi); |
| 98 } | 98 } |
| 99 } | 99 } |
| 100 } | 100 } |
| 101 | 101 |
| 102 } } // namespace v8::internal | 102 } } // namespace v8::internal |
| OLD | NEW |