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

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: 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 side-by-side diff with in-line comments
Download patch
Index: src/compiler/wasm-compiler.cc
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc
index 395f2e8103c43eb829a96a4e273c0a8f6227cb11..5ba177b89c9ed838b512e86fb935f38eef506362 100644
--- a/src/compiler/wasm-compiler.cc
+++ b/src/compiler/wasm-compiler.cc
@@ -248,8 +248,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),
@@ -261,8 +262,11 @@ 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_);
+ DCHECK_IMPLIES(source_position_table != nullptr,
+ source_position_table->GetGraph() == graph());
}
@@ -2479,6 +2483,27 @@ void WasmGraphBuilder::Int64LoweringForTesting() {
}
}
+void WasmGraphBuilder::EnterSourcePositionScope() {
+ DCHECK_NULL(source_position_scope_);
+ if (source_position_table_) {
+ source_position_table_->AddDecorator();
+ source_position_scope_ = new SourcePositionScope(source_position_table_);
+ }
+}
+
+void WasmGraphBuilder::LeaveSourcePositionScope() {
+ DCHECK_EQ(!!source_position_table_, !!source_position_scope_);
+ if (!source_position_scope_) return;
+ delete source_position_scope_;
+ source_position_scope_ = nullptr;
+ source_position_table_->RemoveDecorator();
+}
+
+void WasmGraphBuilder::SetCurrentSourcePosition(int position) {
+ if (source_position_scope_)
+ source_position_scope_->SetCurrentPosition(SourcePosition(position));
+}
+
static void RecordFunctionCompilation(Logger::LogEventsAndTags tag,
CompilationInfo* info,
const char* message, uint32_t index,
@@ -2711,13 +2736,18 @@ Handle<Code> CompileWasmFunction(wasm::ErrorThrower& thrower, Isolate* isolate,
&zone, MachineType::PointerRepresentation(),
InstructionSelector::SupportedMachineOperatorFlags());
JSGraph jsgraph(isolate, &graph, &common, nullptr, nullptr, &machine);
- WasmGraphBuilder builder(&zone, &jsgraph, function.sig);
+ SourcePositionTable source_position_table(&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,
module_env->module->module_start + function.code_end_offset};
+
+ builder.EnterSourcePositionScope();
wasm::TreeResult result =
wasm::BuildTFGraph(isolate->allocator(), &builder, body);
+ builder.LeaveSourcePositionScope();
if (result.failed()) {
if (FLAG_trace_wasm_compiler) {
@@ -2753,6 +2783,7 @@ Handle<Code> CompileWasmFunction(wasm::ErrorThrower& thrower, Isolate* isolate,
if (machine.Is32()) {
descriptor = module_env->GetI32WasmCallDescriptor(&zone, descriptor);
}
+
Code::Flags flags = Code::ComputeFlags(Code::WASM_FUNCTION);
// add flags here if a meaningful name is helpful for debugging.
bool debugging =
@@ -2772,6 +2803,9 @@ Handle<Code> CompileWasmFunction(wasm::ErrorThrower& thrower, Isolate* isolate,
func_name = buffer.start();
}
CompilationInfo info(func_name, isolate, &zone, flags);
+ // TODO(clemensh): make source position tracking optional
+ info.MarkAsSourcePositionsEnabled();
+ info.SetSourcePositionTable(&source_position_table);
Handle<Code> code =
Pipeline::GenerateCodeForTesting(&info, descriptor, &graph);

Powered by Google App Engine
This is Rietveld 408576698