Index: src/compiler/wasm-compiler.cc |
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc |
index 82b5b151b03fb0d2e78ac03629b184399a020492..86ed71c586126e9053853dd4bd930348b64da93a 100644 |
--- a/src/compiler/wasm-compiler.cc |
+++ b/src/compiler/wasm-compiler.cc |
@@ -245,8 +245,9 @@ class WasmTrapHelper : public ZoneObject { |
} |
}; |
-WasmGraphBuilder::WasmGraphBuilder(Zone* zone, JSGraph* jsgraph, |
- wasm::FunctionSig* function_signature) |
+WasmGraphBuilder::WasmGraphBuilder( |
+ Zone* zone, JSGraph* jsgraph, wasm::FunctionSig* function_signature, |
+ compiler::SourcePositionTable* source_position_table) |
: zone_(zone), |
jsgraph_(jsgraph), |
module_(nullptr), |
@@ -258,7 +259,8 @@ WasmGraphBuilder::WasmGraphBuilder(Zone* zone, JSGraph* jsgraph, |
cur_buffer_(def_buffer_), |
cur_bufsize_(kDefaultBufferSize), |
trap_(new (zone) WasmTrapHelper(this)), |
- function_signature_(function_signature) { |
+ function_signature_(function_signature), |
+ source_position_table_(source_position_table) { |
DCHECK_NOT_NULL(jsgraph_); |
} |
@@ -2664,6 +2666,12 @@ void WasmGraphBuilder::Int64LoweringForTesting() { |
} |
} |
+void WasmGraphBuilder::SetSourcePosition(Node* node, int position) { |
+ compiler::SourcePosition pos(position); |
+ if (source_position_table_) |
+ source_position_table_->SetSourcePosition(node, pos); |
+} |
+ |
static void RecordFunctionCompilation(Logger::LogEventsAndTags tag, |
CompilationInfo* info, |
const char* message, uint32_t index, |
@@ -2756,7 +2764,7 @@ Handle<JSFunction> CompileJSToWasmWrapper( |
CompilationInfo info(func_name, isolate, &zone, flags); |
Handle<Code> code = |
- Pipeline::GenerateCodeForTesting(&info, incoming, &graph, nullptr); |
+ Pipeline::GenerateCodeForTesting(&info, incoming, &graph); |
#ifdef ENABLE_DISASSEMBLER |
if (FLAG_print_opt_code && !code.is_null()) { |
OFStream os(stdout); |
@@ -2847,11 +2855,10 @@ Handle<Code> CompileWasmToJSWrapper(Isolate* isolate, wasm::ModuleEnv* module, |
return code; |
} |
-JSGraph* BuildGraphForWasmFunction(Zone* zone, wasm::ErrorThrower& thrower, |
- Isolate* isolate, |
- wasm::ModuleEnv*& module_env, |
- const wasm::WasmFunction& function, |
- double* decode_ms) { |
+std::pair<JSGraph*, SourcePositionTable*> BuildGraphForWasmFunction( |
+ Zone* zone, wasm::ErrorThrower& thrower, Isolate* isolate, |
+ wasm::ModuleEnv*& module_env, const wasm::WasmFunction& function, |
+ double* decode_ms) { |
base::ElapsedTimer decode_timer; |
if (FLAG_trace_wasm_decode_time) { |
decode_timer.Start(); |
@@ -2864,7 +2871,9 @@ JSGraph* BuildGraphForWasmFunction(Zone* zone, wasm::ErrorThrower& thrower, |
InstructionSelector::SupportedMachineOperatorFlags()); |
JSGraph* jsgraph = |
new (zone) JSGraph(isolate, graph, common, nullptr, nullptr, machine); |
- WasmGraphBuilder builder(zone, jsgraph, function.sig); |
+ SourcePositionTable* source_position_table = |
+ new (zone) SourcePositionTable(graph); |
+ WasmGraphBuilder builder(zone, jsgraph, function.sig, source_position_table); |
wasm::FunctionBody body = { |
module_env, function.sig, module_env->module->module_start, |
module_env->module->module_start + function.code_start_offset, |
@@ -2889,7 +2898,7 @@ JSGraph* BuildGraphForWasmFunction(Zone* zone, wasm::ErrorThrower& thrower, |
SNPrintF(buffer, "Compiling WASM function #%d:%.*s failed:", |
function.func_index, name.length, name.name); |
thrower.Failed(buffer.start(), result); |
- return nullptr; |
+ return std::make_pair(nullptr, nullptr); |
} |
int index = static_cast<int>(function.func_index); |
if (index >= FLAG_trace_wasm_ast_start && index < FLAG_trace_wasm_ast_end) { |
@@ -2898,7 +2907,7 @@ JSGraph* BuildGraphForWasmFunction(Zone* zone, wasm::ErrorThrower& thrower, |
if (FLAG_trace_wasm_decode_time) { |
*decode_ms = decode_timer.Elapsed().InMillisecondsF(); |
} |
- return jsgraph; |
+ return std::make_pair(jsgraph, source_position_table); |
} |
// Helper function to compile a single function. |
@@ -2917,9 +2926,11 @@ Handle<Code> CompileWasmFunction(wasm::ErrorThrower& thrower, Isolate* isolate, |
compiler::ZonePool zone_pool(isolate->allocator()); |
compiler::ZonePool::Scope graph_zone_scope(&zone_pool); |
double decode_ms = 0; |
- JSGraph* jsgraph = |
+ std::pair<JSGraph*, SourcePositionTable*> graph_result = |
BuildGraphForWasmFunction(graph_zone_scope.zone(), thrower, isolate, |
module_env, function, &decode_ms); |
+ JSGraph* jsgraph = graph_result.first; |
+ SourcePositionTable* source_positions = graph_result.second; |
if (jsgraph == nullptr) { |
return Handle<Code>::null(); |
@@ -2958,7 +2969,7 @@ Handle<Code> CompileWasmFunction(wasm::ErrorThrower& thrower, Isolate* isolate, |
compiler::ZonePool::Scope pipeline_zone_scope(&zone_pool); |
Pipeline pipeline(&info); |
pipeline.InitializeWasmCompilation(pipeline_zone_scope.zone(), &zone_pool, |
- jsgraph->graph()); |
+ jsgraph->graph(), source_positions); |
Handle<Code> code; |
if (pipeline.ExecuteWasmCompilation(descriptor)) { |
code = pipeline.FinalizeWasmCompilation(descriptor); |