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

Unified Diff: src/compiler/wasm-compiler.cc

Issue 1890803002: [wasm] Generate source position information (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm-throw-error
Patch Set: avoid using std::tie 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/wasm-compiler.h ('k') | src/wasm/ast-decoder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « src/compiler/wasm-compiler.h ('k') | src/wasm/ast-decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698