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

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

Issue 2528033002: [wasm] Add a flag --wasm-opt to test optimizations in the WASM pipeline. (Closed)
Patch Set: Created 4 years 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 <memory> 8 #include <memory>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
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(ZoneStats* zone_stats, CompilationInfo* info, JSGraph* jsgraph,
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_stats_(zone_stats),
122 graph_zone_scope_(zone_stats_, ZONE_NAME), 122 graph_zone_scope_(zone_stats_, ZONE_NAME),
123 graph_(graph), 123 graph_(jsgraph->graph()),
124 source_positions_(source_positions), 124 source_positions_(source_positions),
125 machine_(jsgraph->machine()),
126 common_(jsgraph->common()),
127 javascript_(jsgraph->javascript()),
ahaas 2016/11/28 08:34:43 I think jsgraph->javascript() should always be nul
titzer 2016/11/28 09:31:53 I think that would just made the code brittle with
128 jsgraph_(jsgraph),
125 instruction_zone_scope_(zone_stats_, ZONE_NAME), 129 instruction_zone_scope_(zone_stats_, ZONE_NAME),
126 instruction_zone_(instruction_zone_scope_.zone()), 130 instruction_zone_(instruction_zone_scope_.zone()),
127 register_allocation_zone_scope_(zone_stats_, ZONE_NAME), 131 register_allocation_zone_scope_(zone_stats_, ZONE_NAME),
128 register_allocation_zone_(register_allocation_zone_scope_.zone()) {} 132 register_allocation_zone_(register_allocation_zone_scope_.zone()) {}
129 133
130 // For machine graph testing entry point. 134 // For machine graph testing entry point.
131 PipelineData(ZoneStats* zone_stats, CompilationInfo* info, Graph* graph, 135 PipelineData(ZoneStats* zone_stats, CompilationInfo* info, Graph* graph,
132 Schedule* schedule) 136 Schedule* schedule)
133 : isolate_(info->isolate()), 137 : isolate_(info->isolate()),
134 info_(info), 138 info_(info),
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 info()->SetCode(code); 596 info()->SetCode(code);
593 if (info()->is_deoptimization_enabled()) { 597 if (info()->is_deoptimization_enabled()) {
594 info()->context()->native_context()->AddOptimizedCode(*code); 598 info()->context()->native_context()->AddOptimizedCode(*code);
595 RegisterWeakObjectsInOptimizedCode(code); 599 RegisterWeakObjectsInOptimizedCode(code);
596 } 600 }
597 return SUCCEEDED; 601 return SUCCEEDED;
598 } 602 }
599 603
600 class PipelineWasmCompilationJob final : public CompilationJob { 604 class PipelineWasmCompilationJob final : public CompilationJob {
601 public: 605 public:
602 explicit PipelineWasmCompilationJob(CompilationInfo* info, Graph* graph, 606 explicit PipelineWasmCompilationJob(CompilationInfo* info, JSGraph* jsgraph,
603 CallDescriptor* descriptor, 607 CallDescriptor* descriptor,
604 SourcePositionTable* source_positions) 608 SourcePositionTable* source_positions)
605 : CompilationJob(info->isolate(), info, "TurboFan", 609 : CompilationJob(info->isolate(), info, "TurboFan",
606 State::kReadyToExecute), 610 State::kReadyToExecute),
607 zone_stats_(info->isolate()->allocator()), 611 zone_stats_(info->isolate()->allocator()),
608 data_(&zone_stats_, info, graph, source_positions), 612 data_(&zone_stats_, info, jsgraph, source_positions),
609 pipeline_(&data_), 613 pipeline_(&data_),
610 linkage_(descriptor) {} 614 linkage_(descriptor) {}
611 615
612 protected: 616 protected:
613 Status PrepareJobImpl() final; 617 Status PrepareJobImpl() final;
614 Status ExecuteJobImpl() final; 618 Status ExecuteJobImpl() final;
615 Status FinalizeJobImpl() final; 619 Status FinalizeJobImpl() final;
616 620
617 private: 621 private:
618 ZoneStats zone_stats_; 622 ZoneStats zone_stats_;
(...skipping 10 matching lines...) Expand all
629 633
630 PipelineWasmCompilationJob::Status 634 PipelineWasmCompilationJob::Status
631 PipelineWasmCompilationJob::ExecuteJobImpl() { 635 PipelineWasmCompilationJob::ExecuteJobImpl() {
632 if (FLAG_trace_turbo) { 636 if (FLAG_trace_turbo) {
633 TurboJsonFile json_of(info(), std::ios_base::trunc); 637 TurboJsonFile json_of(info(), std::ios_base::trunc);
634 json_of << "{\"function\":\"" << info()->GetDebugName().get() 638 json_of << "{\"function\":\"" << info()->GetDebugName().get()
635 << "\", \"source\":\"\",\n\"phases\":["; 639 << "\", \"source\":\"\",\n\"phases\":[";
636 } 640 }
637 641
638 pipeline_.RunPrintAndVerify("Machine", true); 642 pipeline_.RunPrintAndVerify("Machine", true);
643 if (FLAG_wasm_opt) {
644 PipelineData* data = &data_;
645 PipelineRunScope scope(data, "WASM optimization");
646 JSGraphReducer graph_reducer(data->jsgraph(), scope.zone());
647 DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(),
648 data->common());
649 ValueNumberingReducer value_numbering(scope.zone(), data->graph()->zone());
650 MachineOperatorReducer machine_reducer(data->jsgraph());
651 CommonOperatorReducer common_reducer(&graph_reducer, data->graph(),
652 data->common(), data->machine());
653 AddReducer(data, &graph_reducer, &dead_code_elimination);
654 AddReducer(data, &graph_reducer, &value_numbering);
655 AddReducer(data, &graph_reducer, &machine_reducer);
656 AddReducer(data, &graph_reducer, &common_reducer);
657 graph_reducer.ReduceGraph();
658 pipeline_.RunPrintAndVerify("Optimized Machine", true);
659 }
639 660
640 if (!pipeline_.ScheduleAndSelectInstructions(&linkage_, true)) return FAILED; 661 if (!pipeline_.ScheduleAndSelectInstructions(&linkage_, true)) return FAILED;
641 return SUCCEEDED; 662 return SUCCEEDED;
642 } 663 }
643 664
644 PipelineWasmCompilationJob::Status 665 PipelineWasmCompilationJob::Status
645 PipelineWasmCompilationJob::FinalizeJobImpl() { 666 PipelineWasmCompilationJob::FinalizeJobImpl() {
646 pipeline_.GenerateCode(&linkage_); 667 pipeline_.GenerateCode(&linkage_);
647 return SUCCEEDED; 668 return SUCCEEDED;
648 } 669 }
(...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after
1692 return pipeline.ScheduleAndGenerateCode(call_descriptor); 1713 return pipeline.ScheduleAndGenerateCode(call_descriptor);
1693 } 1714 }
1694 1715
1695 // static 1716 // static
1696 CompilationJob* Pipeline::NewCompilationJob(Handle<JSFunction> function) { 1717 CompilationJob* Pipeline::NewCompilationJob(Handle<JSFunction> function) {
1697 return new PipelineCompilationJob(function->GetIsolate(), function); 1718 return new PipelineCompilationJob(function->GetIsolate(), function);
1698 } 1719 }
1699 1720
1700 // static 1721 // static
1701 CompilationJob* Pipeline::NewWasmCompilationJob( 1722 CompilationJob* Pipeline::NewWasmCompilationJob(
1702 CompilationInfo* info, Graph* graph, CallDescriptor* descriptor, 1723 CompilationInfo* info, JSGraph* jsgraph, CallDescriptor* descriptor,
1703 SourcePositionTable* source_positions) { 1724 SourcePositionTable* source_positions) {
1704 return new PipelineWasmCompilationJob(info, graph, descriptor, 1725 return new PipelineWasmCompilationJob(info, jsgraph, descriptor,
1705 source_positions); 1726 source_positions);
1706 } 1727 }
1707 1728
1708 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, 1729 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config,
1709 InstructionSequence* sequence, 1730 InstructionSequence* sequence,
1710 bool run_verifier) { 1731 bool run_verifier) {
1711 CompilationInfo info(ArrayVector("testing"), sequence->isolate(), 1732 CompilationInfo info(ArrayVector("testing"), sequence->isolate(),
1712 sequence->zone(), Code::ComputeFlags(Code::STUB)); 1733 sequence->zone(), Code::ComputeFlags(Code::STUB));
1713 ZoneStats zone_stats(sequence->isolate()->allocator()); 1734 ZoneStats zone_stats(sequence->isolate()->allocator());
1714 PipelineData data(&zone_stats, &info, sequence); 1735 PipelineData data(&zone_stats, &info, sequence);
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1944 data->DeleteRegisterAllocationZone(); 1965 data->DeleteRegisterAllocationZone();
1945 } 1966 }
1946 1967
1947 CompilationInfo* PipelineImpl::info() const { return data_->info(); } 1968 CompilationInfo* PipelineImpl::info() const { return data_->info(); }
1948 1969
1949 Isolate* PipelineImpl::isolate() const { return info()->isolate(); } 1970 Isolate* PipelineImpl::isolate() const { return info()->isolate(); }
1950 1971
1951 } // namespace compiler 1972 } // namespace compiler
1952 } // namespace internal 1973 } // namespace internal
1953 } // namespace v8 1974 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698