Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(552)

Side by Side Diff: src/compiler/pipeline.cc

Issue 1904723002: [wasm] Introduce ExecuteWasmCompilation and FinalizeWasmCompilation in pipeline.cc (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@parallel-compilation
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 // For main entry point. 78 // For main entry point.
79 PipelineData(ZonePool* zone_pool, CompilationInfo* info, 79 PipelineData(ZonePool* zone_pool, CompilationInfo* info,
80 PipelineStatistics* pipeline_statistics) 80 PipelineStatistics* pipeline_statistics)
81 : isolate_(info->isolate()), 81 : isolate_(info->isolate()),
82 info_(info), 82 info_(info),
83 outer_zone_(info_->zone()), 83 outer_zone_(info_->zone()),
84 zone_pool_(zone_pool), 84 zone_pool_(zone_pool),
85 pipeline_statistics_(pipeline_statistics), 85 pipeline_statistics_(pipeline_statistics),
86 compilation_failed_(false), 86 compilation_failed_(false),
87 code_(Handle<Code>::null()), 87 code_(Handle<Code>::null()),
88 profiler_data_(nullptr),
88 graph_zone_scope_(zone_pool_), 89 graph_zone_scope_(zone_pool_),
89 graph_zone_(graph_zone_scope_.zone()), 90 graph_zone_(graph_zone_scope_.zone()),
90 graph_(nullptr), 91 graph_(nullptr),
91 loop_assignment_(nullptr), 92 loop_assignment_(nullptr),
92 simplified_(nullptr), 93 simplified_(nullptr),
93 machine_(nullptr), 94 machine_(nullptr),
94 common_(nullptr), 95 common_(nullptr),
95 javascript_(nullptr), 96 javascript_(nullptr),
96 jsgraph_(nullptr), 97 jsgraph_(nullptr),
97 schedule_(nullptr), 98 schedule_(nullptr),
(...skipping 20 matching lines...) Expand all
118 // For machine graph testing entry point. 119 // For machine graph testing entry point.
119 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph, 120 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph,
120 Schedule* schedule) 121 Schedule* schedule)
121 : isolate_(info->isolate()), 122 : isolate_(info->isolate()),
122 info_(info), 123 info_(info),
123 outer_zone_(nullptr), 124 outer_zone_(nullptr),
124 zone_pool_(zone_pool), 125 zone_pool_(zone_pool),
125 pipeline_statistics_(nullptr), 126 pipeline_statistics_(nullptr),
126 compilation_failed_(false), 127 compilation_failed_(false),
127 code_(Handle<Code>::null()), 128 code_(Handle<Code>::null()),
129 profiler_data_(nullptr),
128 graph_zone_scope_(zone_pool_), 130 graph_zone_scope_(zone_pool_),
129 graph_zone_(nullptr), 131 graph_zone_(nullptr),
130 graph_(graph), 132 graph_(graph),
131 source_positions_(new SourcePositionTable(graph_)), 133 source_positions_(new SourcePositionTable(graph_)),
132 loop_assignment_(nullptr), 134 loop_assignment_(nullptr),
133 simplified_(nullptr), 135 simplified_(nullptr),
134 machine_(nullptr), 136 machine_(nullptr),
135 common_(nullptr), 137 common_(nullptr),
136 javascript_(nullptr), 138 javascript_(nullptr),
137 jsgraph_(nullptr), 139 jsgraph_(nullptr),
138 schedule_(schedule), 140 schedule_(schedule),
139 instruction_zone_scope_(zone_pool_), 141 instruction_zone_scope_(zone_pool_),
140 instruction_zone_(instruction_zone_scope_.zone()), 142 instruction_zone_(instruction_zone_scope_.zone()),
141 sequence_(nullptr), 143 sequence_(nullptr),
142 frame_(nullptr), 144 frame_(nullptr),
143 register_allocation_zone_scope_(zone_pool_), 145 register_allocation_zone_scope_(zone_pool_),
144 register_allocation_zone_(register_allocation_zone_scope_.zone()), 146 register_allocation_zone_(register_allocation_zone_scope_.zone()),
145 register_allocation_data_(nullptr) {} 147 register_allocation_data_(nullptr) {}
146 148
147 // For register allocation testing entry point. 149 // For register allocation testing entry point.
148 PipelineData(ZonePool* zone_pool, CompilationInfo* info, 150 PipelineData(ZonePool* zone_pool, CompilationInfo* info,
149 InstructionSequence* sequence) 151 InstructionSequence* sequence)
150 : isolate_(info->isolate()), 152 : isolate_(info->isolate()),
151 info_(info), 153 info_(info),
152 outer_zone_(nullptr), 154 outer_zone_(nullptr),
153 zone_pool_(zone_pool), 155 zone_pool_(zone_pool),
154 pipeline_statistics_(nullptr), 156 pipeline_statistics_(nullptr),
155 compilation_failed_(false), 157 compilation_failed_(false),
156 code_(Handle<Code>::null()), 158 code_(Handle<Code>::null()),
159 profiler_data_(nullptr),
157 graph_zone_scope_(zone_pool_), 160 graph_zone_scope_(zone_pool_),
158 graph_zone_(nullptr), 161 graph_zone_(nullptr),
159 graph_(nullptr), 162 graph_(nullptr),
160 loop_assignment_(nullptr), 163 loop_assignment_(nullptr),
161 simplified_(nullptr), 164 simplified_(nullptr),
162 machine_(nullptr), 165 machine_(nullptr),
163 common_(nullptr), 166 common_(nullptr),
164 javascript_(nullptr), 167 javascript_(nullptr),
165 jsgraph_(nullptr), 168 jsgraph_(nullptr),
166 schedule_(nullptr), 169 schedule_(nullptr),
(...skipping 17 matching lines...) Expand all
184 CompilationInfo* info() const { return info_; } 187 CompilationInfo* info() const { return info_; }
185 ZonePool* zone_pool() const { return zone_pool_; } 188 ZonePool* zone_pool() const { return zone_pool_; }
186 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; } 189 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; }
187 bool compilation_failed() const { return compilation_failed_; } 190 bool compilation_failed() const { return compilation_failed_; }
188 void set_compilation_failed() { compilation_failed_ = true; } 191 void set_compilation_failed() { compilation_failed_ = true; }
189 Handle<Code> code() { return code_; } 192 Handle<Code> code() { return code_; }
190 void set_code(Handle<Code> code) { 193 void set_code(Handle<Code> code) {
191 DCHECK(code_.is_null()); 194 DCHECK(code_.is_null());
192 code_ = code; 195 code_ = code;
193 } 196 }
194 197 BasicBlockProfiler::Data* profiler_data() { return profiler_data_; }
198 void set_profiler_data(BasicBlockProfiler::Data* data) {
199 profiler_data_ = data;
200 }
201 std::ostringstream* source_position_output() {
202 return &source_position_output_;
203 }
195 // RawMachineAssembler generally produces graphs which cannot be verified. 204 // RawMachineAssembler generally produces graphs which cannot be verified.
196 bool MayHaveUnverifiableGraph() const { return outer_zone_ == nullptr; } 205 bool MayHaveUnverifiableGraph() const { return outer_zone_ == nullptr; }
197 206
198 Zone* graph_zone() const { return graph_zone_; } 207 Zone* graph_zone() const { return graph_zone_; }
199 Graph* graph() const { return graph_; } 208 Graph* graph() const { return graph_; }
200 SourcePositionTable* source_positions() const { 209 SourcePositionTable* source_positions() const {
201 return source_positions_.get(); 210 return source_positions_.get();
202 } 211 }
203 MachineOperatorBuilder* machine() const { return machine_; } 212 MachineOperatorBuilder* machine() const { return machine_; }
204 CommonOperatorBuilder* common() const { return common_; } 213 CommonOperatorBuilder* common() const { return common_; }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 } 315 }
307 316
308 private: 317 private:
309 Isolate* isolate_; 318 Isolate* isolate_;
310 CompilationInfo* info_; 319 CompilationInfo* info_;
311 Zone* outer_zone_; 320 Zone* outer_zone_;
312 ZonePool* const zone_pool_; 321 ZonePool* const zone_pool_;
313 PipelineStatistics* pipeline_statistics_; 322 PipelineStatistics* pipeline_statistics_;
314 bool compilation_failed_; 323 bool compilation_failed_;
315 Handle<Code> code_; 324 Handle<Code> code_;
325 BasicBlockProfiler::Data* profiler_data_;
326 std::ostringstream source_position_output_;
316 327
317 // All objects in the following group of fields are allocated in graph_zone_. 328 // All objects in the following group of fields are allocated in graph_zone_.
318 // They are all set to nullptr when the graph_zone_ is destroyed. 329 // They are all set to nullptr when the graph_zone_ is destroyed.
319 ZonePool::Scope graph_zone_scope_; 330 ZonePool::Scope graph_zone_scope_;
320 Zone* graph_zone_; 331 Zone* graph_zone_;
321 Graph* graph_; 332 Graph* graph_;
322 // TODO(dcarney): make this into a ZoneObject. 333 // TODO(dcarney): make this into a ZoneObject.
323 base::SmartPointer<SourcePositionTable> source_positions_; 334 base::SmartPointer<SourcePositionTable> source_positions_;
324 LoopAssignmentAnalysis* loop_assignment_; 335 LoopAssignmentAnalysis* loop_assignment_;
325 TypeHintAnalysis* type_hint_analysis_ = nullptr; 336 TypeHintAnalysis* type_hint_analysis_ = nullptr;
(...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after
1397 1408
1398 return pipeline.ScheduleAndGenerateCode(call_descriptor); 1409 return pipeline.ScheduleAndGenerateCode(call_descriptor);
1399 } 1410 }
1400 1411
1401 void Pipeline::InitializeWasmCompilation(Zone* pipeline_zone, 1412 void Pipeline::InitializeWasmCompilation(Zone* pipeline_zone,
1402 ZonePool* zone_pool, Graph* graph) { 1413 ZonePool* zone_pool, Graph* graph) {
1403 data_ = new (pipeline_zone) PipelineData(zone_pool, info(), graph, nullptr); 1414 data_ = new (pipeline_zone) PipelineData(zone_pool, info(), graph, nullptr);
1404 RunPrintAndVerify("Machine", true); 1415 RunPrintAndVerify("Machine", true);
1405 } 1416 }
1406 1417
1407 void Pipeline::FinalizeWasmCompilation() { data_->Destroy(); } 1418 bool Pipeline::ExecuteWasmCompilation(CallDescriptor* descriptor) {
Michael Starzinger 2016/04/20 16:59:08 This duplicates quite a lot of complex logic. We c
ahaas 2016/04/21 07:59:43 I use the same code for the new functions and Sche
1419 PipelineData* data = this->data_;
1420 DCHECK_NOT_NULL(data);
1421 DCHECK_NOT_NULL(data->graph());
1422
1423 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>();
1424 TraceSchedule(data->info(), data->schedule());
1425
1426 if (FLAG_turbo_profiling) {
1427 data->set_profiler_data(BasicBlockInstrumentor::Instrument(
1428 info(), data->graph(), data->schedule()));
1429 }
1430
1431 data->InitializeInstructionSequence(descriptor);
1432
1433 data->InitializeFrameData(descriptor);
1434 // Select and schedule instructions covering the scheduled graph.
1435 Linkage linkage(descriptor);
1436 Run<InstructionSelectionPhase>(&linkage);
1437
1438 if (FLAG_trace_turbo && !data->MayHaveUnverifiableGraph()) {
1439 TurboCfgFile tcf(isolate());
1440 tcf << AsC1V("CodeGen", data->schedule(), data->source_positions(),
1441 data->sequence());
1442 }
1443
1444 if (FLAG_trace_turbo) {
1445 // Output source position information before the graph is deleted.
1446 data_->source_positions()->Print(*(data->source_position_output()));
1447 }
1448
1449 data->DeleteGraphZone();
1450
1451 BeginPhaseKind("register allocation");
1452
1453 bool run_verifier = FLAG_turbo_verify_allocation;
1454
1455 // Allocate registers.
1456 AllocateRegisters(
1457 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN),
1458 descriptor, run_verifier);
1459 Run<FrameElisionPhase>();
1460 if (data->compilation_failed()) {
1461 info()->AbortOptimization(kNotEnoughVirtualRegistersRegalloc);
1462 return false;
1463 }
1464
1465 BeginPhaseKind("code generation");
1466 // TODO(mtrofin): move this off to the register allocator.
1467 bool generate_frame_at_start =
1468 data_->sequence()->instruction_blocks().front()->must_construct_frame();
1469 // Optimimize jumps.
1470 if (FLAG_turbo_jt) {
1471 Run<JumpThreadingPhase>(generate_frame_at_start);
1472 }
1473 return true;
1474 }
1475
1476 Handle<Code> Pipeline::FinalizeWasmCompilation(CallDescriptor* descriptor) {
1477 PipelineData* data = this->data_;
1478 Linkage linkage(descriptor);
1479 // Generate final machine code.
1480 Run<GenerateCodePhase>(&linkage);
1481
1482 Handle<Code> code = data->code();
1483 if (data->profiler_data() != nullptr) {
1484 #if ENABLE_DISASSEMBLER
1485 std::ostringstream os;
1486 code->Disassemble(nullptr, os);
1487 data->profiler_data()->SetCode(&os);
1488 #endif
1489 }
1490
1491 info()->SetCode(code);
1492 v8::internal::CodeGenerator::PrintCode(code, info());
1493
1494 if (FLAG_trace_turbo) {
1495 FILE* json_file = OpenVisualizerLogFile(info(), nullptr, "json", "a+");
1496 if (json_file != nullptr) {
1497 OFStream json_of(json_file);
1498 json_of
1499 << "{\"name\":\"disassembly\",\"type\":\"disassembly\",\"data\":\"";
1500 #if ENABLE_DISASSEMBLER
1501 std::stringstream disassembly_stream;
1502 code->Disassemble(nullptr, disassembly_stream);
1503 std::string disassembly_string(disassembly_stream.str());
1504 for (const auto& c : disassembly_string) {
1505 json_of << AsEscapedUC16ForJSON(c);
1506 }
1507 #endif // ENABLE_DISASSEMBLER
1508 json_of << "\"}\n],\n";
1509 json_of << "\"nodePositions\":";
1510 json_of << data->source_position_output()->str();
1511 json_of << "}";
1512 fclose(json_file);
1513 }
1514 OFStream os(stdout);
1515 os << "---------------------------------------------------\n"
1516 << "Finished compiling method " << info()->GetDebugName().get()
1517 << " using Turbofan" << std::endl;
1518 }
1519 data->Destroy();
1520 return code;
1521 }
1408 1522
1409 OptimizedCompileJob* Pipeline::NewCompilationJob(CompilationInfo* info) { 1523 OptimizedCompileJob* Pipeline::NewCompilationJob(CompilationInfo* info) {
1410 return new (info->zone()) PipelineCompilationJob(info); 1524 return new (info->zone()) PipelineCompilationJob(info);
1411 } 1525 }
1412 1526
1413 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, 1527 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config,
1414 InstructionSequence* sequence, 1528 InstructionSequence* sequence,
1415 bool run_verifier) { 1529 bool run_verifier) {
1416 CompilationInfo info("testing", sequence->isolate(), sequence->zone()); 1530 CompilationInfo info("testing", sequence->isolate(), sequence->zone());
1417 ZonePool zone_pool(sequence->isolate()->allocator()); 1531 ZonePool zone_pool(sequence->isolate()->allocator());
1418 PipelineData data(&zone_pool, &info, sequence); 1532 PipelineData data(&zone_pool, &info, sequence);
1419 Pipeline pipeline(&info); 1533 Pipeline pipeline(&info);
1420 pipeline.data_ = &data; 1534 pipeline.data_ = &data;
1421 pipeline.data_->InitializeFrameData(nullptr); 1535 pipeline.data_->InitializeFrameData(nullptr);
1422 pipeline.AllocateRegisters(config, nullptr, run_verifier); 1536 pipeline.AllocateRegisters(config, nullptr, run_verifier);
1423 return !data.compilation_failed(); 1537 return !data.compilation_failed();
1424 } 1538 }
1425 1539
1426
1427 Handle<Code> Pipeline::ScheduleAndGenerateCode( 1540 Handle<Code> Pipeline::ScheduleAndGenerateCode(
1428 CallDescriptor* call_descriptor) { 1541 CallDescriptor* call_descriptor) {
1429 PipelineData* data = this->data_; 1542 PipelineData* data = this->data_;
1430
1431 DCHECK_NOT_NULL(data); 1543 DCHECK_NOT_NULL(data);
1432 DCHECK_NOT_NULL(data->graph()); 1544 DCHECK_NOT_NULL(data->graph());
1433 1545
1434 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>(); 1546 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>();
1435 TraceSchedule(data->info(), data->schedule()); 1547 TraceSchedule(data->info(), data->schedule());
1436 1548
1437 BasicBlockProfiler::Data* profiler_data = nullptr;
1438 if (FLAG_turbo_profiling) { 1549 if (FLAG_turbo_profiling) {
1439 profiler_data = BasicBlockInstrumentor::Instrument(info(), data->graph(), 1550 data->set_profiler_data(BasicBlockInstrumentor::Instrument(
1440 data->schedule()); 1551 info(), data->graph(), data->schedule()));
1441 } 1552 }
1442 1553
1443 data->InitializeInstructionSequence(call_descriptor); 1554 data->InitializeInstructionSequence(call_descriptor);
1444 1555
1445 data->InitializeFrameData(call_descriptor); 1556 data->InitializeFrameData(call_descriptor);
1446 // Select and schedule instructions covering the scheduled graph. 1557 // Select and schedule instructions covering the scheduled graph.
1447 Linkage linkage(call_descriptor); 1558 Linkage linkage(call_descriptor);
1448 Run<InstructionSelectionPhase>(&linkage); 1559 Run<InstructionSelectionPhase>(&linkage);
1449 1560
1450 if (FLAG_trace_turbo && !data->MayHaveUnverifiableGraph()) { 1561 if (FLAG_trace_turbo && !data->MayHaveUnverifiableGraph()) {
1451 TurboCfgFile tcf(isolate()); 1562 TurboCfgFile tcf(isolate());
1452 tcf << AsC1V("CodeGen", data->schedule(), data->source_positions(), 1563 tcf << AsC1V("CodeGen", data->schedule(), data->source_positions(),
1453 data->sequence()); 1564 data->sequence());
1454 } 1565 }
1455 1566
1456 std::ostringstream source_position_output;
1457 if (FLAG_trace_turbo) { 1567 if (FLAG_trace_turbo) {
1458 // Output source position information before the graph is deleted. 1568 // Output source position information before the graph is deleted.
1459 data_->source_positions()->Print(source_position_output); 1569 data_->source_positions()->Print(*(data->source_position_output()));
1460 } 1570 }
1461 1571
1462 data->DeleteGraphZone(); 1572 data->DeleteGraphZone();
1463 1573
1464 BeginPhaseKind("register allocation"); 1574 BeginPhaseKind("register allocation");
1465 1575
1466 bool run_verifier = FLAG_turbo_verify_allocation; 1576 bool run_verifier = FLAG_turbo_verify_allocation;
1467 1577
1468 // Allocate registers. 1578 // Allocate registers.
1469 AllocateRegisters( 1579 AllocateRegisters(
1470 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN), 1580 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN),
1471 call_descriptor, run_verifier); 1581 call_descriptor, run_verifier);
1472 Run<FrameElisionPhase>(); 1582 Run<FrameElisionPhase>();
1473 if (data->compilation_failed()) { 1583 if (data->compilation_failed()) {
1474 info()->AbortOptimization(kNotEnoughVirtualRegistersRegalloc); 1584 info()->AbortOptimization(kNotEnoughVirtualRegistersRegalloc);
1475 return Handle<Code>(); 1585 return Handle<Code>();
1476 } 1586 }
1477 1587
1478 BeginPhaseKind("code generation"); 1588 BeginPhaseKind("code generation");
1479 // TODO(mtrofin): move this off to the register allocator. 1589 // TODO(mtrofin): move this off to the register allocator.
1480 bool generate_frame_at_start = 1590 bool generate_frame_at_start =
1481 data_->sequence()->instruction_blocks().front()->must_construct_frame(); 1591 data_->sequence()->instruction_blocks().front()->must_construct_frame();
1482 // Optimimize jumps. 1592 // Optimimize jumps.
1483 if (FLAG_turbo_jt) { 1593 if (FLAG_turbo_jt) {
1484 Run<JumpThreadingPhase>(generate_frame_at_start); 1594 Run<JumpThreadingPhase>(generate_frame_at_start);
1485 } 1595 }
1486
1487 // Generate final machine code. 1596 // Generate final machine code.
1488 Run<GenerateCodePhase>(&linkage); 1597 Run<GenerateCodePhase>(&linkage);
1489 1598
1490 Handle<Code> code = data->code(); 1599 Handle<Code> code = data->code();
1491 if (profiler_data != nullptr) { 1600 if (data->profiler_data() != nullptr) {
1492 #if ENABLE_DISASSEMBLER 1601 #if ENABLE_DISASSEMBLER
1493 std::ostringstream os; 1602 std::ostringstream os;
1494 code->Disassemble(nullptr, os); 1603 code->Disassemble(nullptr, os);
1495 profiler_data->SetCode(&os); 1604 data->profiler_data()->SetCode(&os);
1496 #endif 1605 #endif
1497 } 1606 }
1498 1607
1499 info()->SetCode(code); 1608 info()->SetCode(code);
1500 v8::internal::CodeGenerator::PrintCode(code, info()); 1609 v8::internal::CodeGenerator::PrintCode(code, info());
1501 1610
1502 if (FLAG_trace_turbo) { 1611 if (FLAG_trace_turbo) {
1503 FILE* json_file = OpenVisualizerLogFile(info(), nullptr, "json", "a+"); 1612 FILE* json_file = OpenVisualizerLogFile(info(), nullptr, "json", "a+");
1504 if (json_file != nullptr) { 1613 if (json_file != nullptr) {
1505 OFStream json_of(json_file); 1614 OFStream json_of(json_file);
1506 json_of 1615 json_of
1507 << "{\"name\":\"disassembly\",\"type\":\"disassembly\",\"data\":\""; 1616 << "{\"name\":\"disassembly\",\"type\":\"disassembly\",\"data\":\"";
1508 #if ENABLE_DISASSEMBLER 1617 #if ENABLE_DISASSEMBLER
1509 std::stringstream disassembly_stream; 1618 std::stringstream disassembly_stream;
1510 code->Disassemble(nullptr, disassembly_stream); 1619 code->Disassemble(nullptr, disassembly_stream);
1511 std::string disassembly_string(disassembly_stream.str()); 1620 std::string disassembly_string(disassembly_stream.str());
1512 for (const auto& c : disassembly_string) { 1621 for (const auto& c : disassembly_string) {
1513 json_of << AsEscapedUC16ForJSON(c); 1622 json_of << AsEscapedUC16ForJSON(c);
1514 } 1623 }
1515 #endif // ENABLE_DISASSEMBLER 1624 #endif // ENABLE_DISASSEMBLER
1516 json_of << "\"}\n],\n"; 1625 json_of << "\"}\n],\n";
1517 json_of << "\"nodePositions\":"; 1626 json_of << "\"nodePositions\":";
1518 json_of << source_position_output.str(); 1627 json_of << data->source_position_output()->str();
1519 json_of << "}"; 1628 json_of << "}";
1520 fclose(json_file); 1629 fclose(json_file);
1521 } 1630 }
1522 OFStream os(stdout); 1631 OFStream os(stdout);
1523 os << "---------------------------------------------------\n" 1632 os << "---------------------------------------------------\n"
1524 << "Finished compiling method " << info()->GetDebugName().get() 1633 << "Finished compiling method " << info()->GetDebugName().get()
1525 << " using Turbofan" << std::endl; 1634 << " using Turbofan" << std::endl;
1526 } 1635 }
1527
1528 return code; 1636 return code;
1529 } 1637 }
1530 1638
1531
1532 void Pipeline::AllocateRegisters(const RegisterConfiguration* config, 1639 void Pipeline::AllocateRegisters(const RegisterConfiguration* config,
1533 CallDescriptor* descriptor, 1640 CallDescriptor* descriptor,
1534 bool run_verifier) { 1641 bool run_verifier) {
1535 PipelineData* data = this->data_; 1642 PipelineData* data = this->data_;
1536 1643
1537 // Don't track usage for this zone in compiler stats. 1644 // Don't track usage for this zone in compiler stats.
1538 base::SmartPointer<Zone> verifier_zone; 1645 base::SmartPointer<Zone> verifier_zone;
1539 RegisterAllocatorVerifier* verifier = nullptr; 1646 RegisterAllocatorVerifier* verifier = nullptr;
1540 if (run_verifier) { 1647 if (run_verifier) {
1541 verifier_zone.Reset(new Zone(isolate()->allocator())); 1648 verifier_zone.Reset(new Zone(isolate()->allocator()));
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1618 } 1725 }
1619 1726
1620 data->DeleteRegisterAllocationZone(); 1727 data->DeleteRegisterAllocationZone();
1621 } 1728 }
1622 1729
1623 Isolate* Pipeline::isolate() const { return info()->isolate(); } 1730 Isolate* Pipeline::isolate() const { return info()->isolate(); }
1624 1731
1625 } // namespace compiler 1732 } // namespace compiler
1626 } // namespace internal 1733 } // namespace internal
1627 } // namespace v8 1734 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698