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

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

Issue 2575473002: [interpreter][stubs] Enable graph verification for bytecode handlers and stubs included into snapsh… (Closed)
Patch Set: Addressing comments 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
« no previous file with comments | « src/compiler/pipeline.h ('k') | src/flag-definitions.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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 DeleteInstructionZone(); 170 DeleteInstructionZone();
171 DeleteGraphZone(); 171 DeleteGraphZone();
172 } 172 }
173 173
174 Isolate* isolate() const { return isolate_; } 174 Isolate* isolate() const { return isolate_; }
175 CompilationInfo* info() const { return info_; } 175 CompilationInfo* info() const { return info_; }
176 ZoneStats* zone_stats() const { return zone_stats_; } 176 ZoneStats* zone_stats() const { return zone_stats_; }
177 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; } 177 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; }
178 bool compilation_failed() const { return compilation_failed_; } 178 bool compilation_failed() const { return compilation_failed_; }
179 void set_compilation_failed() { compilation_failed_ = true; } 179 void set_compilation_failed() { compilation_failed_ = true; }
180
181 bool verify_graph() const { return verify_graph_; }
182 void set_verify_graph(bool value) { verify_graph_ = value; }
183
180 Handle<Code> code() { return code_; } 184 Handle<Code> code() { return code_; }
181 void set_code(Handle<Code> code) { 185 void set_code(Handle<Code> code) {
182 DCHECK(code_.is_null()); 186 DCHECK(code_.is_null());
183 code_ = code; 187 code_ = code;
184 } 188 }
185 189
186 // RawMachineAssembler generally produces graphs which cannot be verified. 190 // RawMachineAssembler generally produces graphs which cannot be verified.
187 bool MayHaveUnverifiableGraph() const { return outer_zone_ == nullptr; } 191 bool MayHaveUnverifiableGraph() const { return outer_zone_ == nullptr; }
188 192
189 Zone* graph_zone() const { return graph_zone_; } 193 Zone* graph_zone() const { return graph_zone_; }
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 } 318 }
315 319
316 private: 320 private:
317 Isolate* const isolate_; 321 Isolate* const isolate_;
318 CompilationInfo* const info_; 322 CompilationInfo* const info_;
319 std::unique_ptr<char[]> debug_name_; 323 std::unique_ptr<char[]> debug_name_;
320 Zone* outer_zone_ = nullptr; 324 Zone* outer_zone_ = nullptr;
321 ZoneStats* const zone_stats_; 325 ZoneStats* const zone_stats_;
322 PipelineStatistics* pipeline_statistics_ = nullptr; 326 PipelineStatistics* pipeline_statistics_ = nullptr;
323 bool compilation_failed_ = false; 327 bool compilation_failed_ = false;
328 bool verify_graph_ = false;
324 Handle<Code> code_ = Handle<Code>::null(); 329 Handle<Code> code_ = Handle<Code>::null();
325 330
326 // All objects in the following group of fields are allocated in graph_zone_. 331 // All objects in the following group of fields are allocated in graph_zone_.
327 // They are all set to nullptr when the graph_zone_ is destroyed. 332 // They are all set to nullptr when the graph_zone_ is destroyed.
328 ZoneStats::Scope graph_zone_scope_; 333 ZoneStats::Scope graph_zone_scope_;
329 Zone* graph_zone_ = nullptr; 334 Zone* graph_zone_ = nullptr;
330 Graph* graph_ = nullptr; 335 Graph* graph_ = nullptr;
331 SourcePositionTable* source_positions_ = nullptr; 336 SourcePositionTable* source_positions_ = nullptr;
332 LoopAssignmentAnalysis* loop_assignment_ = nullptr; 337 LoopAssignmentAnalysis* loop_assignment_ = nullptr;
333 SimplifiedOperatorBuilder* simplified_ = nullptr; 338 SimplifiedOperatorBuilder* simplified_ = nullptr;
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after
1624 // Lower changes that have been inserted before. 1629 // Lower changes that have been inserted before.
1625 Run<LateOptimizationPhase>(); 1630 Run<LateOptimizationPhase>();
1626 // TODO(jarin, rossberg): Remove UNTYPED once machine typing works. 1631 // TODO(jarin, rossberg): Remove UNTYPED once machine typing works.
1627 RunPrintAndVerify("Late optimized", true); 1632 RunPrintAndVerify("Late optimized", true);
1628 1633
1629 data->source_positions()->RemoveDecorator(); 1634 data->source_positions()->RemoveDecorator();
1630 1635
1631 return ScheduleAndSelectInstructions(linkage, true); 1636 return ScheduleAndSelectInstructions(linkage, true);
1632 } 1637 }
1633 1638
1639 // TODO(ishell): Remove verify_graph parameter and always enable the
1640 // verification once all the issues are fixed.
1634 Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate, 1641 Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate,
1635 CallDescriptor* call_descriptor, 1642 CallDescriptor* call_descriptor,
1636 Graph* graph, Schedule* schedule, 1643 Graph* graph, Schedule* schedule,
1637 Code::Flags flags, 1644 Code::Flags flags,
1638 const char* debug_name) { 1645 const char* debug_name,
1646 bool verify_graph) {
1639 CompilationInfo info(CStrVector(debug_name), isolate, graph->zone(), flags); 1647 CompilationInfo info(CStrVector(debug_name), isolate, graph->zone(), flags);
1640 if (isolate->serializer_enabled()) info.PrepareForSerializing(); 1648 if (isolate->serializer_enabled()) info.PrepareForSerializing();
1641 1649
1642 // Construct a pipeline for scheduling and code generation. 1650 // Construct a pipeline for scheduling and code generation.
1643 ZoneStats zone_stats(isolate->allocator()); 1651 ZoneStats zone_stats(isolate->allocator());
1644 SourcePositionTable source_positions(graph); 1652 SourcePositionTable source_positions(graph);
1645 PipelineData data(&zone_stats, &info, graph, schedule, &source_positions); 1653 PipelineData data(&zone_stats, &info, graph, schedule, &source_positions);
1654 data.set_verify_graph(verify_graph);
1646 std::unique_ptr<PipelineStatistics> pipeline_statistics; 1655 std::unique_ptr<PipelineStatistics> pipeline_statistics;
1647 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) { 1656 if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) {
1648 pipeline_statistics.reset(new PipelineStatistics(&info, &zone_stats)); 1657 pipeline_statistics.reset(new PipelineStatistics(&info, &zone_stats));
1649 pipeline_statistics->BeginPhaseKind("stub codegen"); 1658 pipeline_statistics->BeginPhaseKind("stub codegen");
1650 } 1659 }
1651 1660
1652 PipelineImpl pipeline(&data); 1661 PipelineImpl pipeline(&data);
1653 DCHECK_NOT_NULL(data.schedule()); 1662 DCHECK_NOT_NULL(data.schedule());
1654 1663
1655 if (FLAG_trace_turbo) { 1664 if (FLAG_trace_turbo) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1765 RunPrintAndVerify("Late trimmed", true); 1774 RunPrintAndVerify("Late trimmed", true);
1766 } 1775 }
1767 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>(); 1776 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>();
1768 TraceSchedule(data->info(), data->schedule()); 1777 TraceSchedule(data->info(), data->schedule());
1769 1778
1770 if (FLAG_turbo_profiling) { 1779 if (FLAG_turbo_profiling) {
1771 data->set_profiler_data(BasicBlockInstrumentor::Instrument( 1780 data->set_profiler_data(BasicBlockInstrumentor::Instrument(
1772 info(), data->graph(), data->schedule())); 1781 info(), data->graph(), data->schedule()));
1773 } 1782 }
1774 1783
1775 // TODO(ishell): Always enable graph verification of stubs in debug mode 1784 bool verify_stub_graph = data->verify_graph();
1776 // once all the issues are fixed.
1777 bool verify_stub_graph =
1778 DEBUG_BOOL && FLAG_csa_verify && data->info()->IsStub();
1779
1780 if (verify_stub_graph || (FLAG_turbo_verify_machine_graph != nullptr && 1785 if (verify_stub_graph || (FLAG_turbo_verify_machine_graph != nullptr &&
1781 (!strcmp(FLAG_turbo_verify_machine_graph, "*") || 1786 (!strcmp(FLAG_turbo_verify_machine_graph, "*") ||
1782 !strcmp(FLAG_turbo_verify_machine_graph, 1787 !strcmp(FLAG_turbo_verify_machine_graph,
1783 data->info()->GetDebugName().get())))) { 1788 data->info()->GetDebugName().get())))) {
1784 if (FLAG_trace_csa_verify) { 1789 if (FLAG_trace_csa_verify) {
1785 AllowHandleDereference allow_deref; 1790 AllowHandleDereference allow_deref;
1786 CompilationInfo* info = data->info(); 1791 CompilationInfo* info = data->info();
1787 CodeTracer::Scope tracing_scope(info->isolate()->GetCodeTracer()); 1792 CodeTracer::Scope tracing_scope(info->isolate()->GetCodeTracer());
1788 OFStream os(tracing_scope.file()); 1793 OFStream os(tracing_scope.file());
1789 os << "--------------------------------------------------\n" 1794 os << "--------------------------------------------------\n"
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1999 data->DeleteRegisterAllocationZone(); 2004 data->DeleteRegisterAllocationZone();
2000 } 2005 }
2001 2006
2002 CompilationInfo* PipelineImpl::info() const { return data_->info(); } 2007 CompilationInfo* PipelineImpl::info() const { return data_->info(); }
2003 2008
2004 Isolate* PipelineImpl::isolate() const { return info()->isolate(); } 2009 Isolate* PipelineImpl::isolate() const { return info()->isolate(); }
2005 2010
2006 } // namespace compiler 2011 } // namespace compiler
2007 } // namespace internal 2012 } // namespace internal
2008 } // namespace v8 2013 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/pipeline.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698