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

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

Issue 2360403003: Revert of Replaced different means of zone pooling/reusing by one zone segment pool (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « src/compiler/move-optimizer.cc ('k') | src/compiler/pipeline-statistics.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <memory> 8 #include <memory>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 #include "src/compiler/simplified-lowering.h" 62 #include "src/compiler/simplified-lowering.h"
63 #include "src/compiler/simplified-operator-reducer.h" 63 #include "src/compiler/simplified-operator-reducer.h"
64 #include "src/compiler/simplified-operator.h" 64 #include "src/compiler/simplified-operator.h"
65 #include "src/compiler/store-store-elimination.h" 65 #include "src/compiler/store-store-elimination.h"
66 #include "src/compiler/tail-call-optimization.h" 66 #include "src/compiler/tail-call-optimization.h"
67 #include "src/compiler/type-hint-analyzer.h" 67 #include "src/compiler/type-hint-analyzer.h"
68 #include "src/compiler/typed-optimization.h" 68 #include "src/compiler/typed-optimization.h"
69 #include "src/compiler/typer.h" 69 #include "src/compiler/typer.h"
70 #include "src/compiler/value-numbering-reducer.h" 70 #include "src/compiler/value-numbering-reducer.h"
71 #include "src/compiler/verifier.h" 71 #include "src/compiler/verifier.h"
72 #include "src/compiler/zone-stats.h" 72 #include "src/compiler/zone-pool.h"
73 #include "src/isolate-inl.h" 73 #include "src/isolate-inl.h"
74 #include "src/ostreams.h" 74 #include "src/ostreams.h"
75 #include "src/parsing/parse-info.h" 75 #include "src/parsing/parse-info.h"
76 #include "src/register-configuration.h" 76 #include "src/register-configuration.h"
77 #include "src/type-info.h" 77 #include "src/type-info.h"
78 #include "src/utils.h" 78 #include "src/utils.h"
79 79
80 namespace v8 { 80 namespace v8 {
81 namespace internal { 81 namespace internal {
82 namespace compiler { 82 namespace compiler {
83 83
84 class PipelineData { 84 class PipelineData {
85 public: 85 public:
86 // For main entry point. 86 // For main entry point.
87 PipelineData(ZoneStats* zone_stats, CompilationInfo* info, 87 PipelineData(ZonePool* zone_pool, CompilationInfo* info,
88 PipelineStatistics* pipeline_statistics) 88 PipelineStatistics* pipeline_statistics)
89 : isolate_(info->isolate()), 89 : isolate_(info->isolate()),
90 info_(info), 90 info_(info),
91 debug_name_(info_->GetDebugName()), 91 debug_name_(info_->GetDebugName()),
92 outer_zone_(info_->zone()), 92 outer_zone_(info_->zone()),
93 zone_stats_(zone_stats), 93 zone_pool_(zone_pool),
94 pipeline_statistics_(pipeline_statistics), 94 pipeline_statistics_(pipeline_statistics),
95 graph_zone_scope_(zone_stats_), 95 graph_zone_scope_(zone_pool_),
96 graph_zone_(graph_zone_scope_.zone()), 96 graph_zone_(graph_zone_scope_.zone()),
97 instruction_zone_scope_(zone_stats_), 97 instruction_zone_scope_(zone_pool_),
98 instruction_zone_(instruction_zone_scope_.zone()), 98 instruction_zone_(instruction_zone_scope_.zone()),
99 register_allocation_zone_scope_(zone_stats_), 99 register_allocation_zone_scope_(zone_pool_),
100 register_allocation_zone_(register_allocation_zone_scope_.zone()) { 100 register_allocation_zone_(register_allocation_zone_scope_.zone()) {
101 PhaseScope scope(pipeline_statistics, "init pipeline data"); 101 PhaseScope scope(pipeline_statistics, "init pipeline data");
102 graph_ = new (graph_zone_) Graph(graph_zone_); 102 graph_ = new (graph_zone_) Graph(graph_zone_);
103 source_positions_ = new (graph_zone_) SourcePositionTable(graph_); 103 source_positions_ = new (graph_zone_) SourcePositionTable(graph_);
104 simplified_ = new (graph_zone_) SimplifiedOperatorBuilder(graph_zone_); 104 simplified_ = new (graph_zone_) SimplifiedOperatorBuilder(graph_zone_);
105 machine_ = new (graph_zone_) MachineOperatorBuilder( 105 machine_ = new (graph_zone_) MachineOperatorBuilder(
106 graph_zone_, MachineType::PointerRepresentation(), 106 graph_zone_, MachineType::PointerRepresentation(),
107 InstructionSelector::SupportedMachineOperatorFlags(), 107 InstructionSelector::SupportedMachineOperatorFlags(),
108 InstructionSelector::AlignmentRequirements()); 108 InstructionSelector::AlignmentRequirements());
109 common_ = new (graph_zone_) CommonOperatorBuilder(graph_zone_); 109 common_ = new (graph_zone_) CommonOperatorBuilder(graph_zone_);
110 javascript_ = new (graph_zone_) JSOperatorBuilder(graph_zone_); 110 javascript_ = new (graph_zone_) JSOperatorBuilder(graph_zone_);
111 jsgraph_ = new (graph_zone_) 111 jsgraph_ = new (graph_zone_)
112 JSGraph(isolate_, graph_, common_, javascript_, simplified_, machine_); 112 JSGraph(isolate_, graph_, common_, javascript_, simplified_, machine_);
113 } 113 }
114 114
115 // For WASM compile entry point. 115 // For WASM compile entry point.
116 PipelineData(ZoneStats* zone_stats, CompilationInfo* info, Graph* graph, 116 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph,
117 SourcePositionTable* source_positions) 117 SourcePositionTable* source_positions)
118 : isolate_(info->isolate()), 118 : isolate_(info->isolate()),
119 info_(info), 119 info_(info),
120 debug_name_(info_->GetDebugName()), 120 debug_name_(info_->GetDebugName()),
121 zone_stats_(zone_stats), 121 zone_pool_(zone_pool),
122 graph_zone_scope_(zone_stats_), 122 graph_zone_scope_(zone_pool_),
123 graph_(graph), 123 graph_(graph),
124 source_positions_(source_positions), 124 source_positions_(source_positions),
125 instruction_zone_scope_(zone_stats_), 125 instruction_zone_scope_(zone_pool_),
126 instruction_zone_(instruction_zone_scope_.zone()), 126 instruction_zone_(instruction_zone_scope_.zone()),
127 register_allocation_zone_scope_(zone_stats_), 127 register_allocation_zone_scope_(zone_pool_),
128 register_allocation_zone_(register_allocation_zone_scope_.zone()) {} 128 register_allocation_zone_(register_allocation_zone_scope_.zone()) {}
129 129
130 // For machine graph testing entry point. 130 // For machine graph testing entry point.
131 PipelineData(ZoneStats* zone_stats, CompilationInfo* info, Graph* graph, 131 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph,
132 Schedule* schedule) 132 Schedule* schedule)
133 : isolate_(info->isolate()), 133 : isolate_(info->isolate()),
134 info_(info), 134 info_(info),
135 debug_name_(info_->GetDebugName()), 135 debug_name_(info_->GetDebugName()),
136 zone_stats_(zone_stats), 136 zone_pool_(zone_pool),
137 graph_zone_scope_(zone_stats_), 137 graph_zone_scope_(zone_pool_),
138 graph_(graph), 138 graph_(graph),
139 source_positions_(new (info->zone()) SourcePositionTable(graph_)), 139 source_positions_(new (info->zone()) SourcePositionTable(graph_)),
140 schedule_(schedule), 140 schedule_(schedule),
141 instruction_zone_scope_(zone_stats_), 141 instruction_zone_scope_(zone_pool_),
142 instruction_zone_(instruction_zone_scope_.zone()), 142 instruction_zone_(instruction_zone_scope_.zone()),
143 register_allocation_zone_scope_(zone_stats_), 143 register_allocation_zone_scope_(zone_pool_),
144 register_allocation_zone_(register_allocation_zone_scope_.zone()) {} 144 register_allocation_zone_(register_allocation_zone_scope_.zone()) {}
145 145
146 // For register allocation testing entry point. 146 // For register allocation testing entry point.
147 PipelineData(ZoneStats* zone_stats, CompilationInfo* info, 147 PipelineData(ZonePool* zone_pool, CompilationInfo* info,
148 InstructionSequence* sequence) 148 InstructionSequence* sequence)
149 : isolate_(info->isolate()), 149 : isolate_(info->isolate()),
150 info_(info), 150 info_(info),
151 debug_name_(info_->GetDebugName()), 151 debug_name_(info_->GetDebugName()),
152 zone_stats_(zone_stats), 152 zone_pool_(zone_pool),
153 graph_zone_scope_(zone_stats_), 153 graph_zone_scope_(zone_pool_),
154 instruction_zone_scope_(zone_stats_), 154 instruction_zone_scope_(zone_pool_),
155 instruction_zone_(sequence->zone()), 155 instruction_zone_(sequence->zone()),
156 sequence_(sequence), 156 sequence_(sequence),
157 register_allocation_zone_scope_(zone_stats_), 157 register_allocation_zone_scope_(zone_pool_),
158 register_allocation_zone_(register_allocation_zone_scope_.zone()) {} 158 register_allocation_zone_(register_allocation_zone_scope_.zone()) {}
159 159
160 ~PipelineData() { 160 ~PipelineData() {
161 DeleteRegisterAllocationZone(); 161 DeleteRegisterAllocationZone();
162 DeleteInstructionZone(); 162 DeleteInstructionZone();
163 DeleteGraphZone(); 163 DeleteGraphZone();
164 } 164 }
165 165
166 Isolate* isolate() const { return isolate_; } 166 Isolate* isolate() const { return isolate_; }
167 CompilationInfo* info() const { return info_; } 167 CompilationInfo* info() const { return info_; }
168 ZoneStats* zone_stats() const { return zone_stats_; } 168 ZonePool* zone_pool() const { return zone_pool_; }
169 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; } 169 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; }
170 bool compilation_failed() const { return compilation_failed_; } 170 bool compilation_failed() const { return compilation_failed_; }
171 void set_compilation_failed() { compilation_failed_ = true; } 171 void set_compilation_failed() { compilation_failed_ = true; }
172 Handle<Code> code() { return code_; } 172 Handle<Code> code() { return code_; }
173 void set_code(Handle<Code> code) { 173 void set_code(Handle<Code> code) {
174 DCHECK(code_.is_null()); 174 DCHECK(code_.is_null());
175 code_ = code; 175 code_ = code;
176 } 176 }
177 177
178 // RawMachineAssembler generally produces graphs which cannot be verified. 178 // RawMachineAssembler generally produces graphs which cannot be verified.
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 if (pipeline_statistics() != nullptr) { 305 if (pipeline_statistics() != nullptr) {
306 pipeline_statistics()->EndPhaseKind(); 306 pipeline_statistics()->EndPhaseKind();
307 } 307 }
308 } 308 }
309 309
310 private: 310 private:
311 Isolate* const isolate_; 311 Isolate* const isolate_;
312 CompilationInfo* const info_; 312 CompilationInfo* const info_;
313 std::unique_ptr<char[]> debug_name_; 313 std::unique_ptr<char[]> debug_name_;
314 Zone* outer_zone_ = nullptr; 314 Zone* outer_zone_ = nullptr;
315 ZoneStats* const zone_stats_; 315 ZonePool* const zone_pool_;
316 PipelineStatistics* pipeline_statistics_ = nullptr; 316 PipelineStatistics* pipeline_statistics_ = nullptr;
317 bool compilation_failed_ = false; 317 bool compilation_failed_ = false;
318 Handle<Code> code_ = Handle<Code>::null(); 318 Handle<Code> code_ = Handle<Code>::null();
319 319
320 // All objects in the following group of fields are allocated in graph_zone_. 320 // All objects in the following group of fields are allocated in graph_zone_.
321 // They are all set to nullptr when the graph_zone_ is destroyed. 321 // They are all set to nullptr when the graph_zone_ is destroyed.
322 ZoneStats::Scope graph_zone_scope_; 322 ZonePool::Scope graph_zone_scope_;
323 Zone* graph_zone_ = nullptr; 323 Zone* graph_zone_ = nullptr;
324 Graph* graph_ = nullptr; 324 Graph* graph_ = nullptr;
325 SourcePositionTable* source_positions_ = nullptr; 325 SourcePositionTable* source_positions_ = nullptr;
326 LoopAssignmentAnalysis* loop_assignment_ = nullptr; 326 LoopAssignmentAnalysis* loop_assignment_ = nullptr;
327 TypeHintAnalysis* type_hint_analysis_ = nullptr; 327 TypeHintAnalysis* type_hint_analysis_ = nullptr;
328 SimplifiedOperatorBuilder* simplified_ = nullptr; 328 SimplifiedOperatorBuilder* simplified_ = nullptr;
329 MachineOperatorBuilder* machine_ = nullptr; 329 MachineOperatorBuilder* machine_ = nullptr;
330 CommonOperatorBuilder* common_ = nullptr; 330 CommonOperatorBuilder* common_ = nullptr;
331 JSOperatorBuilder* javascript_ = nullptr; 331 JSOperatorBuilder* javascript_ = nullptr;
332 JSGraph* jsgraph_ = nullptr; 332 JSGraph* jsgraph_ = nullptr;
333 Schedule* schedule_ = nullptr; 333 Schedule* schedule_ = nullptr;
334 334
335 // All objects in the following group of fields are allocated in 335 // All objects in the following group of fields are allocated in
336 // instruction_zone_. They are all set to nullptr when the instruction_zone_ 336 // instruction_zone_. They are all set to nullptr when the instruction_zone_
337 // is 337 // is
338 // destroyed. 338 // destroyed.
339 ZoneStats::Scope instruction_zone_scope_; 339 ZonePool::Scope instruction_zone_scope_;
340 Zone* instruction_zone_; 340 Zone* instruction_zone_;
341 InstructionSequence* sequence_ = nullptr; 341 InstructionSequence* sequence_ = nullptr;
342 Frame* frame_ = nullptr; 342 Frame* frame_ = nullptr;
343 343
344 // All objects in the following group of fields are allocated in 344 // All objects in the following group of fields are allocated in
345 // register_allocation_zone_. They are all set to nullptr when the zone is 345 // register_allocation_zone_. They are all set to nullptr when the zone is
346 // destroyed. 346 // destroyed.
347 ZoneStats::Scope register_allocation_zone_scope_; 347 ZonePool::Scope register_allocation_zone_scope_;
348 Zone* register_allocation_zone_; 348 Zone* register_allocation_zone_;
349 RegisterAllocationData* register_allocation_data_ = nullptr; 349 RegisterAllocationData* register_allocation_data_ = nullptr;
350 350
351 // Basic block profiling support. 351 // Basic block profiling support.
352 BasicBlockProfiler::Data* profiler_data_ = nullptr; 352 BasicBlockProfiler::Data* profiler_data_ = nullptr;
353 353
354 // Source position output for --trace-turbo. 354 // Source position output for --trace-turbo.
355 std::string source_position_output_; 355 std::string source_position_output_;
356 356
357 int CalculateFixedFrameSize(CallDescriptor* descriptor) { 357 int CalculateFixedFrameSize(CallDescriptor* descriptor) {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 } 510 }
511 } 511 }
512 512
513 513
514 class PipelineRunScope { 514 class PipelineRunScope {
515 public: 515 public:
516 PipelineRunScope(PipelineData* data, const char* phase_name) 516 PipelineRunScope(PipelineData* data, const char* phase_name)
517 : phase_scope_( 517 : phase_scope_(
518 phase_name == nullptr ? nullptr : data->pipeline_statistics(), 518 phase_name == nullptr ? nullptr : data->pipeline_statistics(),
519 phase_name), 519 phase_name),
520 zone_scope_(data->zone_stats()) {} 520 zone_scope_(data->zone_pool()) {}
521 521
522 Zone* zone() { return zone_scope_.zone(); } 522 Zone* zone() { return zone_scope_.zone(); }
523 523
524 private: 524 private:
525 PhaseScope phase_scope_; 525 PhaseScope phase_scope_;
526 ZoneStats::Scope zone_scope_; 526 ZonePool::Scope zone_scope_;
527 }; 527 };
528 528
529 PipelineStatistics* CreatePipelineStatistics(CompilationInfo* info, 529 PipelineStatistics* CreatePipelineStatistics(CompilationInfo* info,
530 ZoneStats* zone_stats) { 530 ZonePool* zone_pool) {
531 PipelineStatistics* pipeline_statistics = nullptr; 531 PipelineStatistics* pipeline_statistics = nullptr;
532 532
533 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) { 533 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) {
534 pipeline_statistics = new PipelineStatistics(info, zone_stats); 534 pipeline_statistics = new PipelineStatistics(info, zone_pool);
535 pipeline_statistics->BeginPhaseKind("initializing"); 535 pipeline_statistics->BeginPhaseKind("initializing");
536 } 536 }
537 537
538 if (FLAG_trace_turbo) { 538 if (FLAG_trace_turbo) {
539 TurboJsonFile json_of(info, std::ios_base::trunc); 539 TurboJsonFile json_of(info, std::ios_base::trunc);
540 Handle<Script> script = info->script(); 540 Handle<Script> script = info->script();
541 std::unique_ptr<char[]> function_name = info->GetDebugName(); 541 std::unique_ptr<char[]> function_name = info->GetDebugName();
542 int pos = info->shared_info()->start_position(); 542 int pos = info->shared_info()->start_position();
543 json_of << "{\"function\":\"" << function_name.get() 543 json_of << "{\"function\":\"" << function_name.get()
544 << "\", \"sourcePosition\":" << pos << ", \"source\":\""; 544 << "\", \"sourcePosition\":" << pos << ", \"source\":\"";
(...skipping 16 matching lines...) Expand all
561 561
562 } // namespace 562 } // namespace
563 563
564 class PipelineCompilationJob final : public CompilationJob { 564 class PipelineCompilationJob final : public CompilationJob {
565 public: 565 public:
566 PipelineCompilationJob(Isolate* isolate, Handle<JSFunction> function) 566 PipelineCompilationJob(Isolate* isolate, Handle<JSFunction> function)
567 // Note that the CompilationInfo is not initialized at the time we pass it 567 // Note that the CompilationInfo is not initialized at the time we pass it
568 // to the CompilationJob constructor, but it is not dereferenced there. 568 // to the CompilationJob constructor, but it is not dereferenced there.
569 : CompilationJob(isolate, &info_, "TurboFan"), 569 : CompilationJob(isolate, &info_, "TurboFan"),
570 zone_(isolate->allocator()), 570 zone_(isolate->allocator()),
571 zone_stats_(isolate->allocator()), 571 zone_pool_(isolate->allocator()),
572 parse_info_(&zone_, function), 572 parse_info_(&zone_, function),
573 info_(&parse_info_, function), 573 info_(&parse_info_, function),
574 pipeline_statistics_(CreatePipelineStatistics(info(), &zone_stats_)), 574 pipeline_statistics_(CreatePipelineStatistics(info(), &zone_pool_)),
575 data_(&zone_stats_, info(), pipeline_statistics_.get()), 575 data_(&zone_pool_, info(), pipeline_statistics_.get()),
576 pipeline_(&data_), 576 pipeline_(&data_),
577 linkage_(nullptr) {} 577 linkage_(nullptr) {}
578 578
579 protected: 579 protected:
580 Status PrepareJobImpl() final; 580 Status PrepareJobImpl() final;
581 Status ExecuteJobImpl() final; 581 Status ExecuteJobImpl() final;
582 Status FinalizeJobImpl() final; 582 Status FinalizeJobImpl() final;
583 583
584 private: 584 private:
585 Zone zone_; 585 Zone zone_;
586 ZoneStats zone_stats_; 586 ZonePool zone_pool_;
587 ParseInfo parse_info_; 587 ParseInfo parse_info_;
588 CompilationInfo info_; 588 CompilationInfo info_;
589 std::unique_ptr<PipelineStatistics> pipeline_statistics_; 589 std::unique_ptr<PipelineStatistics> pipeline_statistics_;
590 PipelineData data_; 590 PipelineData data_;
591 PipelineImpl pipeline_; 591 PipelineImpl pipeline_;
592 Linkage* linkage_; 592 Linkage* linkage_;
593 593
594 DISALLOW_COPY_AND_ASSIGN(PipelineCompilationJob); 594 DISALLOW_COPY_AND_ASSIGN(PipelineCompilationJob);
595 }; 595 };
596 596
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 return SUCCEEDED; 662 return SUCCEEDED;
663 } 663 }
664 664
665 class PipelineWasmCompilationJob final : public CompilationJob { 665 class PipelineWasmCompilationJob final : public CompilationJob {
666 public: 666 public:
667 explicit PipelineWasmCompilationJob(CompilationInfo* info, Graph* graph, 667 explicit PipelineWasmCompilationJob(CompilationInfo* info, Graph* graph,
668 CallDescriptor* descriptor, 668 CallDescriptor* descriptor,
669 SourcePositionTable* source_positions) 669 SourcePositionTable* source_positions)
670 : CompilationJob(info->isolate(), info, "TurboFan", 670 : CompilationJob(info->isolate(), info, "TurboFan",
671 State::kReadyToExecute), 671 State::kReadyToExecute),
672 zone_stats_(info->isolate()->allocator()), 672 zone_pool_(info->isolate()->allocator()),
673 data_(&zone_stats_, info, graph, source_positions), 673 data_(&zone_pool_, info, graph, source_positions),
674 pipeline_(&data_), 674 pipeline_(&data_),
675 linkage_(descriptor) {} 675 linkage_(descriptor) {}
676 676
677 protected: 677 protected:
678 Status PrepareJobImpl() final; 678 Status PrepareJobImpl() final;
679 Status ExecuteJobImpl() final; 679 Status ExecuteJobImpl() final;
680 Status FinalizeJobImpl() final; 680 Status FinalizeJobImpl() final;
681 681
682 private: 682 private:
683 ZoneStats zone_stats_; 683 ZonePool zone_pool_;
684 PipelineData data_; 684 PipelineData data_;
685 PipelineImpl pipeline_; 685 PipelineImpl pipeline_;
686 Linkage linkage_; 686 Linkage linkage_;
687 }; 687 };
688 688
689 PipelineWasmCompilationJob::Status 689 PipelineWasmCompilationJob::Status
690 PipelineWasmCompilationJob::PrepareJobImpl() { 690 PipelineWasmCompilationJob::PrepareJobImpl() {
691 UNREACHABLE(); // Prepare should always be skipped for WasmCompilationJob. 691 UNREACHABLE(); // Prepare should always be skipped for WasmCompilationJob.
692 return SUCCEEDED; 692 return SUCCEEDED;
693 } 693 }
(...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after
1631 } 1631 }
1632 1632
1633 Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate, 1633 Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate,
1634 CallDescriptor* call_descriptor, 1634 CallDescriptor* call_descriptor,
1635 Graph* graph, Schedule* schedule, 1635 Graph* graph, Schedule* schedule,
1636 Code::Flags flags, 1636 Code::Flags flags,
1637 const char* debug_name) { 1637 const char* debug_name) {
1638 CompilationInfo info(CStrVector(debug_name), isolate, graph->zone(), flags); 1638 CompilationInfo info(CStrVector(debug_name), isolate, graph->zone(), flags);
1639 1639
1640 // Construct a pipeline for scheduling and code generation. 1640 // Construct a pipeline for scheduling and code generation.
1641 ZoneStats zone_stats(isolate->allocator()); 1641 ZonePool zone_pool(isolate->allocator());
1642 PipelineData data(&zone_stats, &info, graph, schedule); 1642 PipelineData data(&zone_pool, &info, graph, schedule);
1643 std::unique_ptr<PipelineStatistics> pipeline_statistics; 1643 std::unique_ptr<PipelineStatistics> pipeline_statistics;
1644 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) { 1644 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) {
1645 pipeline_statistics.reset(new PipelineStatistics(&info, &zone_stats)); 1645 pipeline_statistics.reset(new PipelineStatistics(&info, &zone_pool));
1646 pipeline_statistics->BeginPhaseKind("stub codegen"); 1646 pipeline_statistics->BeginPhaseKind("stub codegen");
1647 } 1647 }
1648 1648
1649 PipelineImpl pipeline(&data); 1649 PipelineImpl pipeline(&data);
1650 DCHECK_NOT_NULL(data.schedule()); 1650 DCHECK_NOT_NULL(data.schedule());
1651 1651
1652 if (FLAG_trace_turbo) { 1652 if (FLAG_trace_turbo) {
1653 { 1653 {
1654 TurboJsonFile json_of(&info, std::ios_base::trunc); 1654 TurboJsonFile json_of(&info, std::ios_base::trunc);
1655 json_of << "{\"function\":\"" << info.GetDebugName().get() 1655 json_of << "{\"function\":\"" << info.GetDebugName().get()
1656 << "\", \"source\":\"\",\n\"phases\":["; 1656 << "\", \"source\":\"\",\n\"phases\":[";
1657 } 1657 }
1658 pipeline.Run<PrintGraphPhase>("Machine"); 1658 pipeline.Run<PrintGraphPhase>("Machine");
1659 } 1659 }
1660 1660
1661 pipeline.Run<VerifyGraphPhase>(false, true); 1661 pipeline.Run<VerifyGraphPhase>(false, true);
1662 return pipeline.ScheduleAndGenerateCode(call_descriptor); 1662 return pipeline.ScheduleAndGenerateCode(call_descriptor);
1663 } 1663 }
1664 1664
1665 // static 1665 // static
1666 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info) { 1666 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info) {
1667 ZoneStats zone_stats(info->isolate()->allocator()); 1667 ZonePool zone_pool(info->isolate()->allocator());
1668 std::unique_ptr<PipelineStatistics> pipeline_statistics( 1668 std::unique_ptr<PipelineStatistics> pipeline_statistics(
1669 CreatePipelineStatistics(info, &zone_stats)); 1669 CreatePipelineStatistics(info, &zone_pool));
1670 PipelineData data(&zone_stats, info, pipeline_statistics.get()); 1670 PipelineData data(&zone_pool, info, pipeline_statistics.get());
1671 PipelineImpl pipeline(&data); 1671 PipelineImpl pipeline(&data);
1672 1672
1673 Linkage linkage(Linkage::ComputeIncoming(data.instruction_zone(), info)); 1673 Linkage linkage(Linkage::ComputeIncoming(data.instruction_zone(), info));
1674 1674
1675 if (!pipeline.CreateGraph()) return Handle<Code>::null(); 1675 if (!pipeline.CreateGraph()) return Handle<Code>::null();
1676 if (!pipeline.OptimizeGraph(&linkage)) return Handle<Code>::null(); 1676 if (!pipeline.OptimizeGraph(&linkage)) return Handle<Code>::null();
1677 return pipeline.GenerateCode(&linkage); 1677 return pipeline.GenerateCode(&linkage);
1678 } 1678 }
1679 1679
1680 // static 1680 // static
1681 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, 1681 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info,
1682 Graph* graph, 1682 Graph* graph,
1683 Schedule* schedule) { 1683 Schedule* schedule) {
1684 CallDescriptor* call_descriptor = 1684 CallDescriptor* call_descriptor =
1685 Linkage::ComputeIncoming(info->zone(), info); 1685 Linkage::ComputeIncoming(info->zone(), info);
1686 return GenerateCodeForTesting(info, call_descriptor, graph, schedule); 1686 return GenerateCodeForTesting(info, call_descriptor, graph, schedule);
1687 } 1687 }
1688 1688
1689 // static 1689 // static
1690 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, 1690 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info,
1691 CallDescriptor* call_descriptor, 1691 CallDescriptor* call_descriptor,
1692 Graph* graph, 1692 Graph* graph,
1693 Schedule* schedule) { 1693 Schedule* schedule) {
1694 // Construct a pipeline for scheduling and code generation. 1694 // Construct a pipeline for scheduling and code generation.
1695 ZoneStats zone_stats(info->isolate()->allocator()); 1695 ZonePool zone_pool(info->isolate()->allocator());
1696 PipelineData data(&zone_stats, info, graph, schedule); 1696 PipelineData data(&zone_pool, info, graph, schedule);
1697 std::unique_ptr<PipelineStatistics> pipeline_statistics; 1697 std::unique_ptr<PipelineStatistics> pipeline_statistics;
1698 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) { 1698 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) {
1699 pipeline_statistics.reset(new PipelineStatistics(info, &zone_stats)); 1699 pipeline_statistics.reset(new PipelineStatistics(info, &zone_pool));
1700 pipeline_statistics->BeginPhaseKind("test codegen"); 1700 pipeline_statistics->BeginPhaseKind("test codegen");
1701 } 1701 }
1702 1702
1703 PipelineImpl pipeline(&data); 1703 PipelineImpl pipeline(&data);
1704 1704
1705 if (FLAG_trace_turbo) { 1705 if (FLAG_trace_turbo) {
1706 TurboJsonFile json_of(info, std::ios_base::trunc); 1706 TurboJsonFile json_of(info, std::ios_base::trunc);
1707 json_of << "{\"function\":\"" << info->GetDebugName().get() 1707 json_of << "{\"function\":\"" << info->GetDebugName().get()
1708 << "\", \"source\":\"\",\n\"phases\":["; 1708 << "\", \"source\":\"\",\n\"phases\":[";
1709 } 1709 }
(...skipping 14 matching lines...) Expand all
1724 SourcePositionTable* source_positions) { 1724 SourcePositionTable* source_positions) {
1725 return new PipelineWasmCompilationJob(info, graph, descriptor, 1725 return new PipelineWasmCompilationJob(info, graph, descriptor,
1726 source_positions); 1726 source_positions);
1727 } 1727 }
1728 1728
1729 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, 1729 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config,
1730 InstructionSequence* sequence, 1730 InstructionSequence* sequence,
1731 bool run_verifier) { 1731 bool run_verifier) {
1732 CompilationInfo info(ArrayVector("testing"), sequence->isolate(), 1732 CompilationInfo info(ArrayVector("testing"), sequence->isolate(),
1733 sequence->zone(), Code::ComputeFlags(Code::STUB)); 1733 sequence->zone(), Code::ComputeFlags(Code::STUB));
1734 ZoneStats zone_stats(sequence->isolate()->allocator()); 1734 ZonePool zone_pool(sequence->isolate()->allocator());
1735 PipelineData data(&zone_stats, &info, sequence); 1735 PipelineData data(&zone_pool, &info, sequence);
1736 PipelineImpl pipeline(&data); 1736 PipelineImpl pipeline(&data);
1737 pipeline.data_->InitializeFrameData(nullptr); 1737 pipeline.data_->InitializeFrameData(nullptr);
1738 pipeline.AllocateRegisters(config, nullptr, run_verifier); 1738 pipeline.AllocateRegisters(config, nullptr, run_verifier);
1739 return !data.compilation_failed(); 1739 return !data.compilation_failed();
1740 } 1740 }
1741 1741
1742 bool PipelineImpl::ScheduleAndSelectInstructions(Linkage* linkage) { 1742 bool PipelineImpl::ScheduleAndSelectInstructions(Linkage* linkage) {
1743 CallDescriptor* call_descriptor = linkage->GetIncomingDescriptor(); 1743 CallDescriptor* call_descriptor = linkage->GetIncomingDescriptor();
1744 PipelineData* data = this->data_; 1744 PipelineData* data = this->data_;
1745 1745
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1946 data->DeleteRegisterAllocationZone(); 1946 data->DeleteRegisterAllocationZone();
1947 } 1947 }
1948 1948
1949 CompilationInfo* PipelineImpl::info() const { return data_->info(); } 1949 CompilationInfo* PipelineImpl::info() const { return data_->info(); }
1950 1950
1951 Isolate* PipelineImpl::isolate() const { return info()->isolate(); } 1951 Isolate* PipelineImpl::isolate() const { return info()->isolate(); }
1952 1952
1953 } // namespace compiler 1953 } // namespace compiler
1954 } // namespace internal 1954 } // namespace internal
1955 } // namespace v8 1955 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/move-optimizer.cc ('k') | src/compiler/pipeline-statistics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698