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 <fstream> // NOLINT(readability/streams) | 7 #include <fstream> // NOLINT(readability/streams) |
8 #include <sstream> | 8 #include <sstream> |
9 | 9 |
10 #include "src/base/adapters.h" | 10 #include "src/base/adapters.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 #include "src/compiler/machine-operator-reducer.h" | 44 #include "src/compiler/machine-operator-reducer.h" |
45 #include "src/compiler/move-optimizer.h" | 45 #include "src/compiler/move-optimizer.h" |
46 #include "src/compiler/osr.h" | 46 #include "src/compiler/osr.h" |
47 #include "src/compiler/pipeline-statistics.h" | 47 #include "src/compiler/pipeline-statistics.h" |
48 #include "src/compiler/register-allocator.h" | 48 #include "src/compiler/register-allocator.h" |
49 #include "src/compiler/register-allocator-verifier.h" | 49 #include "src/compiler/register-allocator-verifier.h" |
50 #include "src/compiler/schedule.h" | 50 #include "src/compiler/schedule.h" |
51 #include "src/compiler/scheduler.h" | 51 #include "src/compiler/scheduler.h" |
52 #include "src/compiler/select-lowering.h" | 52 #include "src/compiler/select-lowering.h" |
53 #include "src/compiler/simplified-lowering.h" | 53 #include "src/compiler/simplified-lowering.h" |
| 54 #include "src/compiler/simplified-operator.h" |
54 #include "src/compiler/simplified-operator-reducer.h" | 55 #include "src/compiler/simplified-operator-reducer.h" |
55 #include "src/compiler/tail-call-optimization.h" | 56 #include "src/compiler/tail-call-optimization.h" |
56 #include "src/compiler/typer.h" | 57 #include "src/compiler/typer.h" |
57 #include "src/compiler/value-numbering-reducer.h" | 58 #include "src/compiler/value-numbering-reducer.h" |
58 #include "src/compiler/verifier.h" | 59 #include "src/compiler/verifier.h" |
59 #include "src/compiler/zone-pool.h" | 60 #include "src/compiler/zone-pool.h" |
60 #include "src/ostreams.h" | 61 #include "src/ostreams.h" |
61 #include "src/register-configuration.h" | 62 #include "src/register-configuration.h" |
62 #include "src/type-info.h" | 63 #include "src/type-info.h" |
63 #include "src/utils.h" | 64 #include "src/utils.h" |
(...skipping 11 matching lines...) Expand all Loading... |
75 info_(info), | 76 info_(info), |
76 outer_zone_(info_->zone()), | 77 outer_zone_(info_->zone()), |
77 zone_pool_(zone_pool), | 78 zone_pool_(zone_pool), |
78 pipeline_statistics_(pipeline_statistics), | 79 pipeline_statistics_(pipeline_statistics), |
79 compilation_failed_(false), | 80 compilation_failed_(false), |
80 code_(Handle<Code>::null()), | 81 code_(Handle<Code>::null()), |
81 graph_zone_scope_(zone_pool_), | 82 graph_zone_scope_(zone_pool_), |
82 graph_zone_(graph_zone_scope_.zone()), | 83 graph_zone_(graph_zone_scope_.zone()), |
83 graph_(nullptr), | 84 graph_(nullptr), |
84 loop_assignment_(nullptr), | 85 loop_assignment_(nullptr), |
| 86 simplified_(nullptr), |
85 machine_(nullptr), | 87 machine_(nullptr), |
86 common_(nullptr), | 88 common_(nullptr), |
87 javascript_(nullptr), | 89 javascript_(nullptr), |
88 jsgraph_(nullptr), | 90 jsgraph_(nullptr), |
89 js_type_feedback_(nullptr), | 91 js_type_feedback_(nullptr), |
90 schedule_(nullptr), | 92 schedule_(nullptr), |
91 instruction_zone_scope_(zone_pool_), | 93 instruction_zone_scope_(zone_pool_), |
92 instruction_zone_(instruction_zone_scope_.zone()), | 94 instruction_zone_(instruction_zone_scope_.zone()), |
93 sequence_(nullptr), | 95 sequence_(nullptr), |
94 frame_(nullptr), | 96 frame_(nullptr), |
95 register_allocation_zone_scope_(zone_pool_), | 97 register_allocation_zone_scope_(zone_pool_), |
96 register_allocation_zone_(register_allocation_zone_scope_.zone()), | 98 register_allocation_zone_(register_allocation_zone_scope_.zone()), |
97 register_allocation_data_(nullptr) { | 99 register_allocation_data_(nullptr) { |
98 PhaseScope scope(pipeline_statistics, "init pipeline data"); | 100 PhaseScope scope(pipeline_statistics, "init pipeline data"); |
99 graph_ = new (graph_zone_) Graph(graph_zone_); | 101 graph_ = new (graph_zone_) Graph(graph_zone_); |
100 source_positions_.Reset(new SourcePositionTable(graph_)); | 102 source_positions_.Reset(new SourcePositionTable(graph_)); |
| 103 simplified_ = new (graph_zone_) SimplifiedOperatorBuilder(graph_zone_); |
101 machine_ = new (graph_zone_) MachineOperatorBuilder( | 104 machine_ = new (graph_zone_) MachineOperatorBuilder( |
102 graph_zone_, kMachPtr, | 105 graph_zone_, kMachPtr, |
103 InstructionSelector::SupportedMachineOperatorFlags()); | 106 InstructionSelector::SupportedMachineOperatorFlags()); |
104 common_ = new (graph_zone_) CommonOperatorBuilder(graph_zone_); | 107 common_ = new (graph_zone_) CommonOperatorBuilder(graph_zone_); |
105 javascript_ = new (graph_zone_) JSOperatorBuilder(graph_zone_); | 108 javascript_ = new (graph_zone_) JSOperatorBuilder(graph_zone_); |
106 jsgraph_ = new (graph_zone_) | 109 jsgraph_ = new (graph_zone_) |
107 JSGraph(isolate_, graph_, common_, javascript_, machine_); | 110 JSGraph(isolate_, graph_, common_, javascript_, simplified_, machine_); |
108 } | 111 } |
109 | 112 |
110 // For machine graph testing entry point. | 113 // For machine graph testing entry point. |
111 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph, | 114 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph, |
112 Schedule* schedule) | 115 Schedule* schedule) |
113 : isolate_(info->isolate()), | 116 : isolate_(info->isolate()), |
114 info_(info), | 117 info_(info), |
115 outer_zone_(nullptr), | 118 outer_zone_(nullptr), |
116 zone_pool_(zone_pool), | 119 zone_pool_(zone_pool), |
117 pipeline_statistics_(nullptr), | 120 pipeline_statistics_(nullptr), |
118 compilation_failed_(false), | 121 compilation_failed_(false), |
119 code_(Handle<Code>::null()), | 122 code_(Handle<Code>::null()), |
120 graph_zone_scope_(zone_pool_), | 123 graph_zone_scope_(zone_pool_), |
121 graph_zone_(nullptr), | 124 graph_zone_(nullptr), |
122 graph_(graph), | 125 graph_(graph), |
123 source_positions_(new SourcePositionTable(graph_)), | 126 source_positions_(new SourcePositionTable(graph_)), |
124 loop_assignment_(nullptr), | 127 loop_assignment_(nullptr), |
| 128 simplified_(nullptr), |
125 machine_(nullptr), | 129 machine_(nullptr), |
126 common_(nullptr), | 130 common_(nullptr), |
127 javascript_(nullptr), | 131 javascript_(nullptr), |
128 jsgraph_(nullptr), | 132 jsgraph_(nullptr), |
129 js_type_feedback_(nullptr), | 133 js_type_feedback_(nullptr), |
130 schedule_(schedule), | 134 schedule_(schedule), |
131 instruction_zone_scope_(zone_pool_), | 135 instruction_zone_scope_(zone_pool_), |
132 instruction_zone_(instruction_zone_scope_.zone()), | 136 instruction_zone_(instruction_zone_scope_.zone()), |
133 sequence_(nullptr), | 137 sequence_(nullptr), |
134 frame_(nullptr), | 138 frame_(nullptr), |
135 register_allocation_zone_scope_(zone_pool_), | 139 register_allocation_zone_scope_(zone_pool_), |
136 register_allocation_zone_(register_allocation_zone_scope_.zone()), | 140 register_allocation_zone_(register_allocation_zone_scope_.zone()), |
137 register_allocation_data_(nullptr) {} | 141 register_allocation_data_(nullptr) {} |
138 | 142 |
139 // For register allocation testing entry point. | 143 // For register allocation testing entry point. |
140 PipelineData(ZonePool* zone_pool, CompilationInfo* info, | 144 PipelineData(ZonePool* zone_pool, CompilationInfo* info, |
141 InstructionSequence* sequence) | 145 InstructionSequence* sequence) |
142 : isolate_(info->isolate()), | 146 : isolate_(info->isolate()), |
143 info_(info), | 147 info_(info), |
144 outer_zone_(nullptr), | 148 outer_zone_(nullptr), |
145 zone_pool_(zone_pool), | 149 zone_pool_(zone_pool), |
146 pipeline_statistics_(nullptr), | 150 pipeline_statistics_(nullptr), |
147 compilation_failed_(false), | 151 compilation_failed_(false), |
148 code_(Handle<Code>::null()), | 152 code_(Handle<Code>::null()), |
149 graph_zone_scope_(zone_pool_), | 153 graph_zone_scope_(zone_pool_), |
150 graph_zone_(nullptr), | 154 graph_zone_(nullptr), |
151 graph_(nullptr), | 155 graph_(nullptr), |
152 loop_assignment_(nullptr), | 156 loop_assignment_(nullptr), |
| 157 simplified_(nullptr), |
153 machine_(nullptr), | 158 machine_(nullptr), |
154 common_(nullptr), | 159 common_(nullptr), |
155 javascript_(nullptr), | 160 javascript_(nullptr), |
156 jsgraph_(nullptr), | 161 jsgraph_(nullptr), |
157 js_type_feedback_(nullptr), | 162 js_type_feedback_(nullptr), |
158 schedule_(nullptr), | 163 schedule_(nullptr), |
159 instruction_zone_scope_(zone_pool_), | 164 instruction_zone_scope_(zone_pool_), |
160 instruction_zone_(sequence->zone()), | 165 instruction_zone_(sequence->zone()), |
161 sequence_(sequence), | 166 sequence_(sequence), |
162 frame_(nullptr), | 167 frame_(nullptr), |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 | 227 |
223 void DeleteGraphZone() { | 228 void DeleteGraphZone() { |
224 // Destroy objects with destructors first. | 229 // Destroy objects with destructors first. |
225 source_positions_.Reset(nullptr); | 230 source_positions_.Reset(nullptr); |
226 if (graph_zone_ == nullptr) return; | 231 if (graph_zone_ == nullptr) return; |
227 // Destroy zone and clear pointers. | 232 // Destroy zone and clear pointers. |
228 graph_zone_scope_.Destroy(); | 233 graph_zone_scope_.Destroy(); |
229 graph_zone_ = nullptr; | 234 graph_zone_ = nullptr; |
230 graph_ = nullptr; | 235 graph_ = nullptr; |
231 loop_assignment_ = nullptr; | 236 loop_assignment_ = nullptr; |
| 237 simplified_ = nullptr; |
232 machine_ = nullptr; | 238 machine_ = nullptr; |
233 common_ = nullptr; | 239 common_ = nullptr; |
234 javascript_ = nullptr; | 240 javascript_ = nullptr; |
235 jsgraph_ = nullptr; | 241 jsgraph_ = nullptr; |
236 js_type_feedback_ = nullptr; | 242 js_type_feedback_ = nullptr; |
237 schedule_ = nullptr; | 243 schedule_ = nullptr; |
238 } | 244 } |
239 | 245 |
240 void DeleteInstructionZone() { | 246 void DeleteInstructionZone() { |
241 if (instruction_zone_ == nullptr) return; | 247 if (instruction_zone_ == nullptr) return; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 Handle<Code> code_; | 295 Handle<Code> code_; |
290 | 296 |
291 // All objects in the following group of fields are allocated in graph_zone_. | 297 // All objects in the following group of fields are allocated in graph_zone_. |
292 // They are all set to NULL when the graph_zone_ is destroyed. | 298 // They are all set to NULL when the graph_zone_ is destroyed. |
293 ZonePool::Scope graph_zone_scope_; | 299 ZonePool::Scope graph_zone_scope_; |
294 Zone* graph_zone_; | 300 Zone* graph_zone_; |
295 Graph* graph_; | 301 Graph* graph_; |
296 // TODO(dcarney): make this into a ZoneObject. | 302 // TODO(dcarney): make this into a ZoneObject. |
297 base::SmartPointer<SourcePositionTable> source_positions_; | 303 base::SmartPointer<SourcePositionTable> source_positions_; |
298 LoopAssignmentAnalysis* loop_assignment_; | 304 LoopAssignmentAnalysis* loop_assignment_; |
| 305 SimplifiedOperatorBuilder* simplified_; |
299 MachineOperatorBuilder* machine_; | 306 MachineOperatorBuilder* machine_; |
300 CommonOperatorBuilder* common_; | 307 CommonOperatorBuilder* common_; |
301 JSOperatorBuilder* javascript_; | 308 JSOperatorBuilder* javascript_; |
302 JSGraph* jsgraph_; | 309 JSGraph* jsgraph_; |
303 JSTypeFeedbackTable* js_type_feedback_; | 310 JSTypeFeedbackTable* js_type_feedback_; |
304 Schedule* schedule_; | 311 Schedule* schedule_; |
305 | 312 |
306 // All objects in the following group of fields are allocated in | 313 // All objects in the following group of fields are allocated in |
307 // instruction_zone_. They are all set to NULL when the instruction_zone_ is | 314 // instruction_zone_. They are all set to NULL when the instruction_zone_ is |
308 // destroyed. | 315 // destroyed. |
(...skipping 1135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 tcf << AsC1VRegisterAllocationData("CodeGen", | 1451 tcf << AsC1VRegisterAllocationData("CodeGen", |
1445 data->register_allocation_data()); | 1452 data->register_allocation_data()); |
1446 } | 1453 } |
1447 | 1454 |
1448 data->DeleteRegisterAllocationZone(); | 1455 data->DeleteRegisterAllocationZone(); |
1449 } | 1456 } |
1450 | 1457 |
1451 } // namespace compiler | 1458 } // namespace compiler |
1452 } // namespace internal | 1459 } // namespace internal |
1453 } // namespace v8 | 1460 } // namespace v8 |
OLD | NEW |