Chromium Code Reviews| 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 21 matching lines...) Expand all Loading... | |
| 119 // For machine graph testing entry point. | 120 // For machine graph testing entry point. |
| 120 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph, | 121 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph, |
| 121 Schedule* schedule) | 122 Schedule* schedule) |
| 122 : isolate_(info->isolate()), | 123 : isolate_(info->isolate()), |
| 123 info_(info), | 124 info_(info), |
| 124 outer_zone_(nullptr), | 125 outer_zone_(nullptr), |
| 125 zone_pool_(zone_pool), | 126 zone_pool_(zone_pool), |
| 126 pipeline_statistics_(nullptr), | 127 pipeline_statistics_(nullptr), |
| 127 compilation_failed_(false), | 128 compilation_failed_(false), |
| 128 code_(Handle<Code>::null()), | 129 code_(Handle<Code>::null()), |
| 130 profiler_data_(nullptr), | |
| 129 graph_zone_scope_(zone_pool_), | 131 graph_zone_scope_(zone_pool_), |
| 130 graph_zone_(nullptr), | 132 graph_zone_(nullptr), |
| 131 graph_(graph), | 133 graph_(graph), |
| 132 source_positions_(new (info->zone()->New(sizeof(SourcePositionTable))) | 134 source_positions_(new (info->zone()->New(sizeof(SourcePositionTable))) |
| 133 SourcePositionTable(graph_)), | 135 SourcePositionTable(graph_)), |
| 134 loop_assignment_(nullptr), | 136 loop_assignment_(nullptr), |
| 135 simplified_(nullptr), | 137 simplified_(nullptr), |
| 136 machine_(nullptr), | 138 machine_(nullptr), |
| 137 common_(nullptr), | 139 common_(nullptr), |
| 138 javascript_(nullptr), | 140 javascript_(nullptr), |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 149 // For register allocation testing entry point. | 151 // For register allocation testing entry point. |
| 150 PipelineData(ZonePool* zone_pool, CompilationInfo* info, | 152 PipelineData(ZonePool* zone_pool, CompilationInfo* info, |
| 151 InstructionSequence* sequence) | 153 InstructionSequence* sequence) |
| 152 : isolate_(info->isolate()), | 154 : isolate_(info->isolate()), |
| 153 info_(info), | 155 info_(info), |
| 154 outer_zone_(nullptr), | 156 outer_zone_(nullptr), |
| 155 zone_pool_(zone_pool), | 157 zone_pool_(zone_pool), |
| 156 pipeline_statistics_(nullptr), | 158 pipeline_statistics_(nullptr), |
| 157 compilation_failed_(false), | 159 compilation_failed_(false), |
| 158 code_(Handle<Code>::null()), | 160 code_(Handle<Code>::null()), |
| 161 profiler_data_(nullptr), | |
| 159 graph_zone_scope_(zone_pool_), | 162 graph_zone_scope_(zone_pool_), |
| 160 graph_zone_(nullptr), | 163 graph_zone_(nullptr), |
| 161 graph_(nullptr), | 164 graph_(nullptr), |
| 162 loop_assignment_(nullptr), | 165 loop_assignment_(nullptr), |
| 163 simplified_(nullptr), | 166 simplified_(nullptr), |
| 164 machine_(nullptr), | 167 machine_(nullptr), |
| 165 common_(nullptr), | 168 common_(nullptr), |
| 166 javascript_(nullptr), | 169 javascript_(nullptr), |
| 167 jsgraph_(nullptr), | 170 jsgraph_(nullptr), |
| 168 schedule_(nullptr), | 171 schedule_(nullptr), |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 186 CompilationInfo* info() const { return info_; } | 189 CompilationInfo* info() const { return info_; } |
| 187 ZonePool* zone_pool() const { return zone_pool_; } | 190 ZonePool* zone_pool() const { return zone_pool_; } |
| 188 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; } | 191 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; } |
| 189 bool compilation_failed() const { return compilation_failed_; } | 192 bool compilation_failed() const { return compilation_failed_; } |
| 190 void set_compilation_failed() { compilation_failed_ = true; } | 193 void set_compilation_failed() { compilation_failed_ = true; } |
| 191 Handle<Code> code() { return code_; } | 194 Handle<Code> code() { return code_; } |
| 192 void set_code(Handle<Code> code) { | 195 void set_code(Handle<Code> code) { |
| 193 DCHECK(code_.is_null()); | 196 DCHECK(code_.is_null()); |
| 194 code_ = code; | 197 code_ = code; |
| 195 } | 198 } |
| 196 | 199 BasicBlockProfiler::Data* profiler_data() { return profiler_data_; } |
| 200 void set_profiler_data(BasicBlockProfiler::Data* data) { | |
| 201 profiler_data_ = data; | |
| 202 } | |
| 203 std::ostringstream* source_position_output() { | |
| 204 return &source_position_output_; | |
| 205 } | |
| 197 // RawMachineAssembler generally produces graphs which cannot be verified. | 206 // RawMachineAssembler generally produces graphs which cannot be verified. |
| 198 bool MayHaveUnverifiableGraph() const { return outer_zone_ == nullptr; } | 207 bool MayHaveUnverifiableGraph() const { return outer_zone_ == nullptr; } |
| 199 | 208 |
| 200 Zone* graph_zone() const { return graph_zone_; } | 209 Zone* graph_zone() const { return graph_zone_; } |
| 201 Graph* graph() const { return graph_; } | 210 Graph* graph() const { return graph_; } |
| 202 SourcePositionTable* source_positions() const { return source_positions_; } | 211 SourcePositionTable* source_positions() const { return source_positions_; } |
| 203 MachineOperatorBuilder* machine() const { return machine_; } | 212 MachineOperatorBuilder* machine() const { return machine_; } |
| 204 CommonOperatorBuilder* common() const { return common_; } | 213 CommonOperatorBuilder* common() const { return common_; } |
| 205 JSOperatorBuilder* javascript() const { return javascript_; } | 214 JSOperatorBuilder* javascript() const { return javascript_; } |
| 206 JSGraph* jsgraph() const { return jsgraph_; } | 215 JSGraph* jsgraph() const { return jsgraph_; } |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 304 } | 313 } |
| 305 | 314 |
| 306 private: | 315 private: |
| 307 Isolate* isolate_; | 316 Isolate* isolate_; |
| 308 CompilationInfo* info_; | 317 CompilationInfo* info_; |
| 309 Zone* outer_zone_; | 318 Zone* outer_zone_; |
| 310 ZonePool* const zone_pool_; | 319 ZonePool* const zone_pool_; |
| 311 PipelineStatistics* pipeline_statistics_; | 320 PipelineStatistics* pipeline_statistics_; |
| 312 bool compilation_failed_; | 321 bool compilation_failed_; |
| 313 Handle<Code> code_; | 322 Handle<Code> code_; |
| 323 BasicBlockProfiler::Data* profiler_data_; | |
| 324 std::ostringstream source_position_output_; | |
| 314 | 325 |
| 315 // All objects in the following group of fields are allocated in graph_zone_. | 326 // All objects in the following group of fields are allocated in graph_zone_. |
| 316 // They are all set to nullptr when the graph_zone_ is destroyed. | 327 // They are all set to nullptr when the graph_zone_ is destroyed. |
| 317 ZonePool::Scope graph_zone_scope_; | 328 ZonePool::Scope graph_zone_scope_; |
| 318 Zone* graph_zone_; | 329 Zone* graph_zone_; |
| 319 Graph* graph_; | 330 Graph* graph_; |
| 320 SourcePositionTable* source_positions_; | 331 SourcePositionTable* source_positions_; |
| 321 LoopAssignmentAnalysis* loop_assignment_; | 332 LoopAssignmentAnalysis* loop_assignment_; |
| 322 TypeHintAnalysis* type_hint_analysis_ = nullptr; | 333 TypeHintAnalysis* type_hint_analysis_ = nullptr; |
| 323 SimplifiedOperatorBuilder* simplified_; | 334 SimplifiedOperatorBuilder* simplified_; |
| (...skipping 1057 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1381 | 1392 |
| 1382 return pipeline.ScheduleAndGenerateCode(call_descriptor); | 1393 return pipeline.ScheduleAndGenerateCode(call_descriptor); |
| 1383 } | 1394 } |
| 1384 | 1395 |
| 1385 void Pipeline::InitializeWasmCompilation(Zone* pipeline_zone, | 1396 void Pipeline::InitializeWasmCompilation(Zone* pipeline_zone, |
| 1386 ZonePool* zone_pool, Graph* graph) { | 1397 ZonePool* zone_pool, Graph* graph) { |
| 1387 data_ = new (pipeline_zone) PipelineData(zone_pool, info(), graph, nullptr); | 1398 data_ = new (pipeline_zone) PipelineData(zone_pool, info(), graph, nullptr); |
| 1388 RunPrintAndVerify("Machine", true); | 1399 RunPrintAndVerify("Machine", true); |
| 1389 } | 1400 } |
| 1390 | 1401 |
| 1391 void Pipeline::FinalizeWasmCompilation() { data_->Destroy(); } | 1402 bool Pipeline::ExecuteWasmCompilation(CallDescriptor* descriptor) { |
| 1403 return ScheduleGraph(descriptor); | |
| 1404 } | |
| 1405 | |
| 1406 Handle<Code> Pipeline::FinalizeWasmCompilation(CallDescriptor* descriptor) { | |
| 1407 Handle<Code> result = GenerateCode(descriptor); | |
| 1408 data_->Destroy(); | |
|
Benedikt Meurer
2016/04/26 11:47:45
This at least leaks the ostringstream that you add
| |
| 1409 return result; | |
| 1410 } | |
| 1392 | 1411 |
| 1393 OptimizedCompileJob* Pipeline::NewCompilationJob(CompilationInfo* info) { | 1412 OptimizedCompileJob* Pipeline::NewCompilationJob(CompilationInfo* info) { |
| 1394 return new (info->zone()) PipelineCompilationJob(info); | 1413 return new (info->zone()) PipelineCompilationJob(info); |
| 1395 } | 1414 } |
| 1396 | 1415 |
| 1397 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, | 1416 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, |
| 1398 InstructionSequence* sequence, | 1417 InstructionSequence* sequence, |
| 1399 bool run_verifier) { | 1418 bool run_verifier) { |
| 1400 CompilationInfo info("testing", sequence->isolate(), sequence->zone()); | 1419 CompilationInfo info("testing", sequence->isolate(), sequence->zone()); |
| 1401 ZonePool zone_pool(sequence->isolate()->allocator()); | 1420 ZonePool zone_pool(sequence->isolate()->allocator()); |
| 1402 PipelineData data(&zone_pool, &info, sequence); | 1421 PipelineData data(&zone_pool, &info, sequence); |
| 1403 Pipeline pipeline(&info); | 1422 Pipeline pipeline(&info); |
| 1404 pipeline.data_ = &data; | 1423 pipeline.data_ = &data; |
| 1405 pipeline.data_->InitializeFrameData(nullptr); | 1424 pipeline.data_->InitializeFrameData(nullptr); |
| 1406 pipeline.AllocateRegisters(config, nullptr, run_verifier); | 1425 pipeline.AllocateRegisters(config, nullptr, run_verifier); |
| 1407 return !data.compilation_failed(); | 1426 return !data.compilation_failed(); |
| 1408 } | 1427 } |
| 1409 | 1428 |
| 1410 | |
| 1411 Handle<Code> Pipeline::ScheduleAndGenerateCode( | 1429 Handle<Code> Pipeline::ScheduleAndGenerateCode( |
| 1412 CallDescriptor* call_descriptor) { | 1430 CallDescriptor* call_descriptor) { |
| 1431 if (ScheduleGraph(call_descriptor)) { | |
| 1432 return GenerateCode(call_descriptor); | |
| 1433 } else { | |
| 1434 return Handle<Code>::null(); | |
| 1435 } | |
| 1436 } | |
| 1437 | |
| 1438 bool Pipeline::ScheduleGraph(CallDescriptor* call_descriptor) { | |
| 1413 PipelineData* data = this->data_; | 1439 PipelineData* data = this->data_; |
| 1414 | |
| 1415 DCHECK_NOT_NULL(data); | 1440 DCHECK_NOT_NULL(data); |
| 1416 DCHECK_NOT_NULL(data->graph()); | 1441 DCHECK_NOT_NULL(data->graph()); |
| 1417 | 1442 |
| 1418 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>(); | 1443 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>(); |
| 1419 TraceSchedule(data->info(), data->schedule()); | 1444 TraceSchedule(data->info(), data->schedule()); |
| 1420 | 1445 |
| 1421 BasicBlockProfiler::Data* profiler_data = nullptr; | |
| 1422 if (FLAG_turbo_profiling) { | 1446 if (FLAG_turbo_profiling) { |
| 1423 profiler_data = BasicBlockInstrumentor::Instrument(info(), data->graph(), | 1447 data->set_profiler_data(BasicBlockInstrumentor::Instrument( |
| 1424 data->schedule()); | 1448 info(), data->graph(), data->schedule())); |
| 1425 } | 1449 } |
| 1426 | 1450 |
| 1427 data->InitializeInstructionSequence(call_descriptor); | 1451 data->InitializeInstructionSequence(call_descriptor); |
| 1428 | 1452 |
| 1429 data->InitializeFrameData(call_descriptor); | 1453 data->InitializeFrameData(call_descriptor); |
| 1430 // Select and schedule instructions covering the scheduled graph. | 1454 // Select and schedule instructions covering the scheduled graph. |
| 1431 Linkage linkage(call_descriptor); | 1455 Linkage linkage(call_descriptor); |
| 1432 Run<InstructionSelectionPhase>(&linkage); | 1456 Run<InstructionSelectionPhase>(&linkage); |
| 1433 | 1457 |
| 1434 if (FLAG_trace_turbo && !data->MayHaveUnverifiableGraph()) { | 1458 if (FLAG_trace_turbo && !data->MayHaveUnverifiableGraph()) { |
| 1435 TurboCfgFile tcf(isolate()); | 1459 TurboCfgFile tcf(isolate()); |
| 1436 tcf << AsC1V("CodeGen", data->schedule(), data->source_positions(), | 1460 tcf << AsC1V("CodeGen", data->schedule(), data->source_positions(), |
| 1437 data->sequence()); | 1461 data->sequence()); |
| 1438 } | 1462 } |
| 1439 | 1463 |
| 1440 std::ostringstream source_position_output; | |
| 1441 if (FLAG_trace_turbo) { | 1464 if (FLAG_trace_turbo) { |
| 1442 // Output source position information before the graph is deleted. | 1465 // Output source position information before the graph is deleted. |
| 1443 data_->source_positions()->Print(source_position_output); | 1466 data_->source_positions()->Print(*(data->source_position_output())); |
| 1444 } | 1467 } |
| 1445 | 1468 |
| 1446 data->DeleteGraphZone(); | 1469 data->DeleteGraphZone(); |
| 1447 | 1470 |
| 1448 BeginPhaseKind("register allocation"); | 1471 BeginPhaseKind("register allocation"); |
| 1449 | 1472 |
| 1450 bool run_verifier = FLAG_turbo_verify_allocation; | 1473 bool run_verifier = FLAG_turbo_verify_allocation; |
| 1451 | 1474 |
| 1452 // Allocate registers. | 1475 // Allocate registers. |
| 1453 AllocateRegisters( | 1476 AllocateRegisters( |
| 1454 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN), | 1477 RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN), |
| 1455 call_descriptor, run_verifier); | 1478 call_descriptor, run_verifier); |
| 1456 Run<FrameElisionPhase>(); | 1479 Run<FrameElisionPhase>(); |
| 1457 if (data->compilation_failed()) { | 1480 if (data->compilation_failed()) { |
| 1458 info()->AbortOptimization(kNotEnoughVirtualRegistersRegalloc); | 1481 info()->AbortOptimization(kNotEnoughVirtualRegistersRegalloc); |
| 1459 return Handle<Code>(); | 1482 return false; |
| 1460 } | 1483 } |
| 1461 | 1484 |
| 1462 BeginPhaseKind("code generation"); | 1485 BeginPhaseKind("code generation"); |
| 1463 // TODO(mtrofin): move this off to the register allocator. | 1486 // TODO(mtrofin): move this off to the register allocator. |
| 1464 bool generate_frame_at_start = | 1487 bool generate_frame_at_start = |
| 1465 data_->sequence()->instruction_blocks().front()->must_construct_frame(); | 1488 data_->sequence()->instruction_blocks().front()->must_construct_frame(); |
| 1466 // Optimimize jumps. | 1489 // Optimimize jumps. |
| 1467 if (FLAG_turbo_jt) { | 1490 if (FLAG_turbo_jt) { |
| 1468 Run<JumpThreadingPhase>(generate_frame_at_start); | 1491 Run<JumpThreadingPhase>(generate_frame_at_start); |
| 1469 } | 1492 } |
| 1493 return true; | |
| 1494 } | |
| 1470 | 1495 |
| 1496 Handle<Code> Pipeline::GenerateCode(CallDescriptor* call_descriptor) { | |
| 1497 PipelineData* data = this->data_; | |
| 1498 Linkage linkage(call_descriptor); | |
| 1471 // Generate final machine code. | 1499 // Generate final machine code. |
| 1472 Run<GenerateCodePhase>(&linkage); | 1500 Run<GenerateCodePhase>(&linkage); |
| 1473 | 1501 |
| 1474 Handle<Code> code = data->code(); | 1502 Handle<Code> code = data->code(); |
| 1475 if (profiler_data != nullptr) { | 1503 if (data->profiler_data() != nullptr) { |
| 1476 #if ENABLE_DISASSEMBLER | 1504 #if ENABLE_DISASSEMBLER |
| 1477 std::ostringstream os; | 1505 std::ostringstream os; |
| 1478 code->Disassemble(nullptr, os); | 1506 code->Disassemble(nullptr, os); |
| 1479 profiler_data->SetCode(&os); | 1507 data->profiler_data()->SetCode(&os); |
| 1480 #endif | 1508 #endif |
| 1481 } | 1509 } |
| 1482 | 1510 |
| 1483 info()->SetCode(code); | 1511 info()->SetCode(code); |
| 1484 v8::internal::CodeGenerator::PrintCode(code, info()); | 1512 v8::internal::CodeGenerator::PrintCode(code, info()); |
| 1485 | 1513 |
| 1486 if (FLAG_trace_turbo) { | 1514 if (FLAG_trace_turbo) { |
| 1487 FILE* json_file = OpenVisualizerLogFile(info(), nullptr, "json", "a+"); | 1515 FILE* json_file = OpenVisualizerLogFile(info(), nullptr, "json", "a+"); |
| 1488 if (json_file != nullptr) { | 1516 if (json_file != nullptr) { |
| 1489 OFStream json_of(json_file); | 1517 OFStream json_of(json_file); |
| 1490 json_of | 1518 json_of |
| 1491 << "{\"name\":\"disassembly\",\"type\":\"disassembly\",\"data\":\""; | 1519 << "{\"name\":\"disassembly\",\"type\":\"disassembly\",\"data\":\""; |
| 1492 #if ENABLE_DISASSEMBLER | 1520 #if ENABLE_DISASSEMBLER |
| 1493 std::stringstream disassembly_stream; | 1521 std::stringstream disassembly_stream; |
| 1494 code->Disassemble(nullptr, disassembly_stream); | 1522 code->Disassemble(nullptr, disassembly_stream); |
| 1495 std::string disassembly_string(disassembly_stream.str()); | 1523 std::string disassembly_string(disassembly_stream.str()); |
| 1496 for (const auto& c : disassembly_string) { | 1524 for (const auto& c : disassembly_string) { |
| 1497 json_of << AsEscapedUC16ForJSON(c); | 1525 json_of << AsEscapedUC16ForJSON(c); |
| 1498 } | 1526 } |
| 1499 #endif // ENABLE_DISASSEMBLER | 1527 #endif // ENABLE_DISASSEMBLER |
| 1500 json_of << "\"}\n],\n"; | 1528 json_of << "\"}\n],\n"; |
| 1501 json_of << "\"nodePositions\":"; | 1529 json_of << "\"nodePositions\":"; |
| 1502 json_of << source_position_output.str(); | 1530 json_of << data->source_position_output()->str(); |
| 1503 json_of << "}"; | 1531 json_of << "}"; |
| 1504 fclose(json_file); | 1532 fclose(json_file); |
| 1505 } | 1533 } |
| 1506 OFStream os(stdout); | 1534 OFStream os(stdout); |
| 1507 os << "---------------------------------------------------\n" | 1535 os << "---------------------------------------------------\n" |
| 1508 << "Finished compiling method " << info()->GetDebugName().get() | 1536 << "Finished compiling method " << info()->GetDebugName().get() |
| 1509 << " using Turbofan" << std::endl; | 1537 << " using Turbofan" << std::endl; |
| 1510 } | 1538 } |
| 1511 | |
| 1512 return code; | 1539 return code; |
| 1513 } | 1540 } |
| 1514 | 1541 |
| 1515 | |
| 1516 void Pipeline::AllocateRegisters(const RegisterConfiguration* config, | 1542 void Pipeline::AllocateRegisters(const RegisterConfiguration* config, |
| 1517 CallDescriptor* descriptor, | 1543 CallDescriptor* descriptor, |
| 1518 bool run_verifier) { | 1544 bool run_verifier) { |
| 1519 PipelineData* data = this->data_; | 1545 PipelineData* data = this->data_; |
| 1520 // Don't track usage for this zone in compiler stats. | 1546 // Don't track usage for this zone in compiler stats. |
| 1521 base::SmartPointer<Zone> verifier_zone; | 1547 base::SmartPointer<Zone> verifier_zone; |
| 1522 RegisterAllocatorVerifier* verifier = nullptr; | 1548 RegisterAllocatorVerifier* verifier = nullptr; |
| 1523 if (run_verifier) { | 1549 if (run_verifier) { |
| 1524 verifier_zone.Reset(new Zone(isolate()->allocator())); | 1550 verifier_zone.Reset(new Zone(isolate()->allocator())); |
| 1525 verifier = new (verifier_zone.get()) RegisterAllocatorVerifier( | 1551 verifier = new (verifier_zone.get()) RegisterAllocatorVerifier( |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1602 } | 1628 } |
| 1603 | 1629 |
| 1604 data->DeleteRegisterAllocationZone(); | 1630 data->DeleteRegisterAllocationZone(); |
| 1605 } | 1631 } |
| 1606 | 1632 |
| 1607 Isolate* Pipeline::isolate() const { return info()->isolate(); } | 1633 Isolate* Pipeline::isolate() const { return info()->isolate(); } |
| 1608 | 1634 |
| 1609 } // namespace compiler | 1635 } // namespace compiler |
| 1610 } // namespace internal | 1636 } // namespace internal |
| 1611 } // namespace v8 | 1637 } // namespace v8 |
| OLD | NEW |