OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/compiler/pipeline.h" | 5 #include "src/compiler/pipeline.h" |
6 | 6 |
7 #include "src/base/platform/elapsed-timer.h" | 7 #include "src/base/platform/elapsed-timer.h" |
8 #include "src/compiler/ast-graph-builder.h" | 8 #include "src/compiler/ast-graph-builder.h" |
9 #include "src/compiler/code-generator.h" | 9 #include "src/compiler/code-generator.h" |
10 #include "src/compiler/graph-replay.h" | 10 #include "src/compiler/graph-replay.h" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 os << "---------------------------------------------------\n" | 150 os << "---------------------------------------------------\n" |
151 << "Begin compiling method " | 151 << "Begin compiling method " |
152 << info()->function()->debug_name()->ToCString().get() | 152 << info()->function()->debug_name()->ToCString().get() |
153 << " using Turbofan" << endl; | 153 << " using Turbofan" << endl; |
154 } | 154 } |
155 | 155 |
156 // Build the graph. | 156 // Build the graph. |
157 Graph graph(zone()); | 157 Graph graph(zone()); |
158 SourcePositionTable source_positions(&graph); | 158 SourcePositionTable source_positions(&graph); |
159 source_positions.AddDecorator(); | 159 source_positions.AddDecorator(); |
160 // TODO(turbofan): there is no need to type anything during initial graph | |
161 // construction. This is currently only needed for the node cache, which the | |
162 // typer could sweep over later. | |
163 Typer typer(zone()); | |
164 CommonOperatorBuilder common(zone()); | 160 CommonOperatorBuilder common(zone()); |
165 JSGraph jsgraph(&graph, &common, &typer); | 161 JSGraph jsgraph(&graph, &common); |
166 Node* context_node; | 162 Node* context_node; |
167 { | 163 { |
168 PhaseStats graph_builder_stats(info(), PhaseStats::CREATE_GRAPH, | 164 PhaseStats graph_builder_stats(info(), PhaseStats::CREATE_GRAPH, |
169 "graph builder"); | 165 "graph builder"); |
170 AstGraphBuilderWithPositions graph_builder(info(), &jsgraph, | 166 AstGraphBuilderWithPositions graph_builder(info(), &jsgraph, |
171 &source_positions); | 167 &source_positions); |
172 graph_builder.CreateGraph(); | 168 graph_builder.CreateGraph(); |
173 context_node = graph_builder.GetFunctionContext(); | 169 context_node = graph_builder.GetFunctionContext(); |
174 } | 170 } |
175 { | 171 { |
(...skipping 25 matching lines...) Expand all Loading... |
201 JSInliner inliner(info(), &jsgraph); | 197 JSInliner inliner(info(), &jsgraph); |
202 inliner.Inline(); | 198 inliner.Inline(); |
203 VerifyAndPrintGraph(&graph, "Inlined"); | 199 VerifyAndPrintGraph(&graph, "Inlined"); |
204 } | 200 } |
205 | 201 |
206 // Print a replay of the initial graph. | 202 // Print a replay of the initial graph. |
207 if (FLAG_print_turbo_replay) { | 203 if (FLAG_print_turbo_replay) { |
208 GraphReplayPrinter::PrintReplay(&graph); | 204 GraphReplayPrinter::PrintReplay(&graph); |
209 } | 205 } |
210 | 206 |
| 207 Typer typer(&graph, info()->context()); |
211 if (FLAG_turbo_types) { | 208 if (FLAG_turbo_types) { |
212 { | 209 { |
213 // Type the graph. | 210 // Type the graph. |
214 PhaseStats typer_stats(info(), PhaseStats::CREATE_GRAPH, "typer"); | 211 PhaseStats typer_stats(info(), PhaseStats::CREATE_GRAPH, "typer"); |
215 typer.Run(&graph, info()->context()); | 212 typer.Run(); |
216 } | 213 } |
217 // All new nodes must be typed. | |
218 typer.DecorateGraph(&graph); | |
219 { | 214 { |
220 // Lower JSOperators where we can determine types. | 215 // Lower JSOperators where we can determine types. |
221 PhaseStats lowering_stats(info(), PhaseStats::CREATE_GRAPH, | 216 PhaseStats lowering_stats(info(), PhaseStats::CREATE_GRAPH, |
222 "typed lowering"); | 217 "typed lowering"); |
223 SourcePositionTable::Scope pos(&source_positions, | 218 SourcePositionTable::Scope pos(&source_positions, |
224 SourcePosition::Unknown()); | 219 SourcePosition::Unknown()); |
225 JSTypedLowering lowering(&jsgraph); | 220 JSTypedLowering lowering(&jsgraph); |
226 GraphReducer graph_reducer(&graph); | 221 GraphReducer graph_reducer(&graph); |
227 graph_reducer.AddReducer(&lowering); | 222 graph_reducer.AddReducer(&lowering); |
228 graph_reducer.ReduceGraph(); | 223 graph_reducer.ReduceGraph(); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 } | 354 } |
360 | 355 |
361 | 356 |
362 void Pipeline::TearDown() { | 357 void Pipeline::TearDown() { |
363 InstructionOperand::TearDownCaches(); | 358 InstructionOperand::TearDownCaches(); |
364 } | 359 } |
365 | 360 |
366 } // namespace compiler | 361 } // namespace compiler |
367 } // namespace internal | 362 } // namespace internal |
368 } // namespace v8 | 363 } // namespace v8 |
OLD | NEW |