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 |