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

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

Issue 1890803002: [wasm] Generate source position information (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm-throw-error
Patch Set: some doc and fixes 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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 schedule_(nullptr), 96 schedule_(nullptr),
97 instruction_zone_scope_(zone_pool_), 97 instruction_zone_scope_(zone_pool_),
98 instruction_zone_(instruction_zone_scope_.zone()), 98 instruction_zone_(instruction_zone_scope_.zone()),
99 sequence_(nullptr), 99 sequence_(nullptr),
100 frame_(nullptr), 100 frame_(nullptr),
101 register_allocation_zone_scope_(zone_pool_), 101 register_allocation_zone_scope_(zone_pool_),
102 register_allocation_zone_(register_allocation_zone_scope_.zone()), 102 register_allocation_zone_(register_allocation_zone_scope_.zone()),
103 register_allocation_data_(nullptr) { 103 register_allocation_data_(nullptr) {
104 PhaseScope scope(pipeline_statistics, "init pipeline data"); 104 PhaseScope scope(pipeline_statistics, "init pipeline data");
105 graph_ = new (graph_zone_) Graph(graph_zone_); 105 graph_ = new (graph_zone_) Graph(graph_zone_);
106 source_positions_.Reset(new SourcePositionTable(graph_));
107 simplified_ = new (graph_zone_) SimplifiedOperatorBuilder(graph_zone_); 106 simplified_ = new (graph_zone_) SimplifiedOperatorBuilder(graph_zone_);
108 machine_ = new (graph_zone_) MachineOperatorBuilder( 107 machine_ = new (graph_zone_) MachineOperatorBuilder(
109 graph_zone_, MachineType::PointerRepresentation(), 108 graph_zone_, MachineType::PointerRepresentation(),
110 InstructionSelector::SupportedMachineOperatorFlags()); 109 InstructionSelector::SupportedMachineOperatorFlags());
111 common_ = new (graph_zone_) CommonOperatorBuilder(graph_zone_); 110 common_ = new (graph_zone_) CommonOperatorBuilder(graph_zone_);
112 javascript_ = new (graph_zone_) JSOperatorBuilder(graph_zone_); 111 javascript_ = new (graph_zone_) JSOperatorBuilder(graph_zone_);
113 jsgraph_ = new (graph_zone_) 112 jsgraph_ = new (graph_zone_)
114 JSGraph(isolate_, graph_, common_, javascript_, simplified_, machine_); 113 JSGraph(isolate_, graph_, common_, javascript_, simplified_, machine_);
115 } 114 }
116 115
117 // For machine graph testing entry point. 116 // For machine graph testing entry point.
118 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph, 117 PipelineData(ZonePool* zone_pool, CompilationInfo* info, Graph* graph,
119 Schedule* schedule) 118 Schedule* schedule)
120 : isolate_(info->isolate()), 119 : isolate_(info->isolate()),
121 info_(info), 120 info_(info),
122 outer_zone_(nullptr), 121 outer_zone_(nullptr),
123 zone_pool_(zone_pool), 122 zone_pool_(zone_pool),
124 pipeline_statistics_(nullptr), 123 pipeline_statistics_(nullptr),
125 compilation_failed_(false), 124 compilation_failed_(false),
126 code_(Handle<Code>::null()), 125 code_(Handle<Code>::null()),
127 graph_zone_scope_(zone_pool_), 126 graph_zone_scope_(zone_pool_),
128 graph_zone_(nullptr), 127 graph_zone_(nullptr),
129 graph_(graph), 128 graph_(graph),
130 source_positions_(new SourcePositionTable(graph_)),
131 loop_assignment_(nullptr), 129 loop_assignment_(nullptr),
132 simplified_(nullptr), 130 simplified_(nullptr),
133 machine_(nullptr), 131 machine_(nullptr),
134 common_(nullptr), 132 common_(nullptr),
135 javascript_(nullptr), 133 javascript_(nullptr),
136 jsgraph_(nullptr), 134 jsgraph_(nullptr),
137 schedule_(schedule), 135 schedule_(schedule),
138 instruction_zone_scope_(zone_pool_), 136 instruction_zone_scope_(zone_pool_),
139 instruction_zone_(instruction_zone_scope_.zone()), 137 instruction_zone_(instruction_zone_scope_.zone()),
140 sequence_(nullptr), 138 sequence_(nullptr),
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 void set_code(Handle<Code> code) { 185 void set_code(Handle<Code> code) {
188 DCHECK(code_.is_null()); 186 DCHECK(code_.is_null());
189 code_ = code; 187 code_ = code;
190 } 188 }
191 189
192 // RawMachineAssembler generally produces graphs which cannot be verified. 190 // RawMachineAssembler generally produces graphs which cannot be verified.
193 bool MayHaveUnverifiableGraph() const { return outer_zone_ == nullptr; } 191 bool MayHaveUnverifiableGraph() const { return outer_zone_ == nullptr; }
194 192
195 Zone* graph_zone() const { return graph_zone_; } 193 Zone* graph_zone() const { return graph_zone_; }
196 Graph* graph() const { return graph_; } 194 Graph* graph() const { return graph_; }
197 SourcePositionTable* source_positions() const { 195 SourcePositionTable* source_positions() {
196 // First check whether the CompilationInfo provides the table
197 if (auto* table = info()->GetSourcePositionTable()) return table;
198 // Lazy initialization
199 if (source_positions_.is_empty())
200 source_positions_.Reset(new SourcePositionTable(graph()));
198 return source_positions_.get(); 201 return source_positions_.get();
199 } 202 }
200 MachineOperatorBuilder* machine() const { return machine_; } 203 MachineOperatorBuilder* machine() const { return machine_; }
201 CommonOperatorBuilder* common() const { return common_; } 204 CommonOperatorBuilder* common() const { return common_; }
202 JSOperatorBuilder* javascript() const { return javascript_; } 205 JSOperatorBuilder* javascript() const { return javascript_; }
203 JSGraph* jsgraph() const { return jsgraph_; } 206 JSGraph* jsgraph() const { return jsgraph_; }
204 MaybeHandle<Context> native_context() const { 207 MaybeHandle<Context> native_context() const {
205 if (info()->is_native_context_specializing()) { 208 if (info()->is_native_context_specializing()) {
206 return handle(info()->native_context(), isolate()); 209 return handle(info()->native_context(), isolate());
207 } 210 }
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 JSGraph* jsgraph, 396 JSGraph* jsgraph,
394 LoopAssignmentAnalysis* loop_assignment, 397 LoopAssignmentAnalysis* loop_assignment,
395 TypeHintAnalysis* type_hint_analysis, 398 TypeHintAnalysis* type_hint_analysis,
396 SourcePositionTable* source_positions) 399 SourcePositionTable* source_positions)
397 : AstGraphBuilder(local_zone, info, jsgraph, loop_assignment, 400 : AstGraphBuilder(local_zone, info, jsgraph, loop_assignment,
398 type_hint_analysis), 401 type_hint_analysis),
399 source_positions_(source_positions), 402 source_positions_(source_positions),
400 start_position_(info->shared_info()->start_position()) {} 403 start_position_(info->shared_info()->start_position()) {}
401 404
402 bool CreateGraph(bool stack_check) { 405 bool CreateGraph(bool stack_check) {
403 SourcePositionTable::Scope pos_scope(source_positions_, start_position_); 406 SourcePositionScope pos_scope(source_positions_, start_position_);
404 return AstGraphBuilder::CreateGraph(stack_check); 407 return AstGraphBuilder::CreateGraph(stack_check);
405 } 408 }
406 409
407 #define DEF_VISIT(type) \ 410 #define DEF_VISIT(type) \
408 void Visit##type(type* node) override { \ 411 void Visit##type(type* node) override { \
409 SourcePositionTable::Scope pos(source_positions_, \ 412 SourcePositionScope pos(source_positions_, \
410 SourcePosition(node->position())); \ 413 SourcePosition(node->position())); \
411 AstGraphBuilder::Visit##type(node); \ 414 AstGraphBuilder::Visit##type(node); \
412 } 415 }
413 AST_NODE_LIST(DEF_VISIT) 416 AST_NODE_LIST(DEF_VISIT)
414 #undef DEF_VISIT 417 #undef DEF_VISIT
415 418
416 private: 419 private:
417 SourcePositionTable* const source_positions_; 420 SourcePositionTable* const source_positions_;
418 SourcePosition const start_position_; 421 SourcePosition const start_position_;
419 }; 422 };
420 423
421 424
422 class SourcePositionWrapper final : public Reducer { 425 class SourcePositionWrapper final : public Reducer {
423 public: 426 public:
424 SourcePositionWrapper(Reducer* reducer, SourcePositionTable* table) 427 SourcePositionWrapper(Reducer* reducer, SourcePositionTable* table)
425 : reducer_(reducer), table_(table) {} 428 : reducer_(reducer), table_(table) {}
426 ~SourcePositionWrapper() final {} 429 ~SourcePositionWrapper() final {}
427 430
428 Reduction Reduce(Node* node) final { 431 Reduction Reduce(Node* node) final {
429 SourcePosition const pos = table_->GetSourcePosition(node); 432 SourcePosition const pos = table_->GetSourcePosition(node);
430 SourcePositionTable::Scope position(table_, pos); 433 SourcePositionScope position(table_, pos);
431 return reducer_->Reduce(node); 434 return reducer_->Reduce(node);
432 } 435 }
433 436
434 void Finalize() final { reducer_->Finalize(); } 437 void Finalize() final { reducer_->Finalize(); }
435 438
436 private: 439 private:
437 Reducer* const reducer_; 440 Reducer* const reducer_;
438 SourcePositionTable* const table_; 441 SourcePositionTable* const table_;
439 442
440 DISALLOW_COPY_AND_ASSIGN(SourcePositionWrapper); 443 DISALLOW_COPY_AND_ASSIGN(SourcePositionWrapper);
(...skipping 1123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 } 1567 }
1565 1568
1566 data->DeleteRegisterAllocationZone(); 1569 data->DeleteRegisterAllocationZone();
1567 } 1570 }
1568 1571
1569 Isolate* Pipeline::isolate() const { return info()->isolate(); } 1572 Isolate* Pipeline::isolate() const { return info()->isolate(); }
1570 1573
1571 } // namespace compiler 1574 } // namespace compiler
1572 } // namespace internal 1575 } // namespace internal
1573 } // namespace v8 1576 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698