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

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

Issue 2726553003: [wasm] Prepare WasmCompilationUnit for lazy compilation (Closed)
Patch Set: Minor fix in vector.h Created 3 years, 10 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 85b3d09d7d275d04f10c921eccbadb1543f0135b..92f389261bdd822118fd1df271a2932dd1011ab7 100644
--- a/src/compiler/wasm-compiler.cc
+++ b/src/compiler/wasm-compiler.cc
@@ -4053,14 +4053,10 @@ SourcePositionTable* WasmCompilationUnit::BuildGraphForWasmFunction(
MachineOperatorBuilder* machine = jsgraph_->machine();
SourcePositionTable* source_position_table =
new (jsgraph_->zone()) SourcePositionTable(graph);
- WasmGraphBuilder builder(&module_env_->module_env, jsgraph_->zone(), jsgraph_,
- function_->sig, source_position_table);
- const byte* module_start = module_env_->wire_bytes.start();
- wasm::FunctionBody body = {function_->sig, module_start,
- module_start + function_->code_start_offset,
- module_start + function_->code_end_offset};
+ WasmGraphBuilder builder(module_env_, jsgraph_->zone(), jsgraph_,
+ func_body_.sig, source_position_table);
graph_construction_result_ =
- wasm::BuildTFGraph(isolate_->allocator(), &builder, body);
+ wasm::BuildTFGraph(isolate_->allocator(), &builder, func_body_);
if (graph_construction_result_.failed()) {
if (FLAG_trace_wasm_compiler) {
@@ -4071,65 +4067,64 @@ SourcePositionTable* WasmCompilationUnit::BuildGraphForWasmFunction(
}
if (machine->Is32()) {
- Int64Lowering(graph, machine, common, jsgraph_->zone(), function_->sig)
+ Int64Lowering(graph, machine, common, jsgraph_->zone(), func_body_.sig)
.LowerGraph();
}
if (builder.has_simd() && !CpuFeatures::SupportsSimd128()) {
- SimdScalarLowering(jsgraph_, function_->sig).LowerGraph();
+ SimdScalarLowering(jsgraph_, func_body_.sig).LowerGraph();
}
- int index = static_cast<int>(function_->func_index);
-
- if (index >= FLAG_trace_wasm_ast_start && index < FLAG_trace_wasm_ast_end) {
- OFStream os(stdout);
- PrintRawWasmCode(isolate_->allocator(), body,
- module_env_->module_env.module);
- }
- if (index >= FLAG_trace_wasm_text_start && index < FLAG_trace_wasm_text_end) {
- OFStream os(stdout);
- PrintWasmText(module_env_->module_env.module, module_env_->wire_bytes,
- function_->func_index, os, nullptr);
+ if (func_index_ >= FLAG_trace_wasm_ast_start &&
+ func_index_ < FLAG_trace_wasm_ast_end) {
+ PrintRawWasmCode(isolate_->allocator(), func_body_, module_env_->module);
}
+ // TODO(clemens): Remove the trace_wasm_text_start flag.
+ // if (func_index_ >= FLAG_trace_wasm_text_start && func_index_ <
+ // FLAG_trace_wasm_text_end) {
+ // OFStream os(stdout);
+ // PrintWasmText(module_env_.module, module_env_->wire_bytes,
+ // function_->func_index, os, nullptr);
+ //}
if (FLAG_trace_wasm_decode_time) {
*decode_ms = decode_timer.Elapsed().InMillisecondsF();
}
return source_position_table;
}
-char* WasmCompilationUnit::GetTaggedFunctionName(
- const wasm::WasmFunction* function) {
- snprintf(function_name_, sizeof(function_name_), "wasm#%d",
- function->func_index);
- return function_name_;
-}
-
-WasmCompilationUnit::WasmCompilationUnit(wasm::ErrorThrower* thrower,
- Isolate* isolate,
+WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate,
wasm::ModuleBytesEnv* module_env,
- const wasm::WasmFunction* function,
- uint32_t index)
- : thrower_(thrower),
- isolate_(isolate),
+ const wasm::WasmFunction* function)
+ : WasmCompilationUnit(
+ isolate, &module_env->module_env,
+ wasm::FunctionBody{
+ function->sig, module_env->wire_bytes.start(),
+ module_env->wire_bytes.start() + function->code_start_offset,
+ module_env->wire_bytes.start() + function->code_end_offset},
+ module_env->wire_bytes.GetNameOrNull(function),
+ function->func_index) {}
+
+WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate,
+ wasm::ModuleEnv* module_env,
+ wasm::FunctionBody body,
+ wasm::WasmName name, int index)
+ : isolate_(isolate),
module_env_(module_env),
- function_(&module_env->module_env.module->functions[index]),
+ func_body_(body),
+ func_name_(name),
graph_zone_(new Zone(isolate->allocator(), ZONE_NAME)),
jsgraph_(new (graph_zone()) JSGraph(
isolate, new (graph_zone()) Graph(graph_zone()),
new (graph_zone()) CommonOperatorBuilder(graph_zone()), nullptr,
- nullptr, new (graph_zone()) MachineOperatorBuilder(
- graph_zone(), MachineType::PointerRepresentation(),
- InstructionSelector::SupportedMachineOperatorFlags(),
- InstructionSelector::AlignmentRequirements()))),
+ nullptr,
+ new (graph_zone()) MachineOperatorBuilder(
+ graph_zone(), MachineType::PointerRepresentation(),
+ InstructionSelector::SupportedMachineOperatorFlags(),
+ InstructionSelector::AlignmentRequirements()))),
compilation_zone_(isolate->allocator(), ZONE_NAME),
- info_(function->name_length != 0
- ? module_env->wire_bytes.GetNameOrNull(function)
- : CStrVector(GetTaggedFunctionName(function)),
- isolate, &compilation_zone_,
+ info_(name, isolate, &compilation_zone_,
Code::ComputeFlags(Code::WASM_FUNCTION)),
- job_(),
- index_(index),
- ok_(true),
+ func_index_(index),
protected_instructions_(&compilation_zone_) {
// Create and cache this node in the main thread.
jsgraph_->CEntryStubConstant(1);
@@ -4140,12 +4135,12 @@ void WasmCompilationUnit::ExecuteCompilation() {
// HistogramTimerScope wasm_compile_function_time_scope(
// isolate_->counters()->wasm_compile_function_time());
if (FLAG_trace_wasm_compiler) {
- OFStream os(stdout);
- os << "Compiling WASM function "
- << wasm::WasmFunctionName(
- function_, module_env_->wire_bytes.GetNameOrNull(function_))
- << std::endl;
- os << std::endl;
+ if (func_name_.start() != nullptr) {
+ PrintF("Compiling WASM function %d:'%.*s'\n\n", func_index(),
+ func_name_.length(), func_name_.start());
+ } else {
+ PrintF("Compiling WASM function %d:<unnamed>\n\n", func_index());
+ }
}
double decode_ms = 0;
@@ -4167,14 +4162,14 @@ void WasmCompilationUnit::ExecuteCompilation() {
// Run the compiler pipeline to generate machine code.
CallDescriptor* descriptor = wasm::ModuleEnv::GetWasmCallDescriptor(
- &compilation_zone_, function_->sig);
+ &compilation_zone_, func_body_.sig);
if (jsgraph_->machine()->Is32()) {
- descriptor = module_env_->module_env.GetI32WasmCallDescriptor(
- &compilation_zone_, descriptor);
+ descriptor =
+ module_env_->GetI32WasmCallDescriptor(&compilation_zone_, descriptor);
}
job_.reset(Pipeline::NewWasmCompilationJob(
&info_, jsgraph_, descriptor, source_positions, &protected_instructions_,
- module_env_->module_env.module->origin != wasm::kWasmOrigin));
+ module_env_->module->origin != wasm::kWasmOrigin));
ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED;
// TODO(bradnelson): Improve histogram handling of size_t.
// TODO(ahaas): The counters are not thread-safe at the moment.
@@ -4187,20 +4182,25 @@ void WasmCompilationUnit::ExecuteCompilation() {
PrintF(
"wasm-compilation phase 1 ok: %u bytes, %0.3f ms decode, %zu nodes, "
"%0.3f ms pipeline\n",
- function_->code_end_offset - function_->code_start_offset, decode_ms,
+ static_cast<unsigned>(func_body_.end - func_body_.start), decode_ms,
node_count, pipeline_ms);
}
}
-Handle<Code> WasmCompilationUnit::FinishCompilation() {
+Handle<Code> WasmCompilationUnit::FinishCompilation(
+ wasm::ErrorThrower* thrower) {
if (!ok_) {
if (graph_construction_result_.failed()) {
// Add the function as another context for the exception
ScopedVector<char> buffer(128);
- wasm::WasmName name = module_env_->wire_bytes.GetName(function_);
- SNPrintF(buffer, "Compiling WASM function #%d:%.*s failed:",
- function_->func_index, name.length(), name.start());
- thrower_->CompileFailed(buffer.start(), graph_construction_result_);
+ if (func_name_.start() == nullptr) {
+ SNPrintF(buffer,
+ "Compiling WASM function #%d:%.*s failed:", func_index_,
+ func_name_.length(), func_name_.start());
+ } else {
+ SNPrintF(buffer, "Compiling WASM function #%d failed:", func_index_);
+ }
+ thrower->CompileFailed(buffer.start(), graph_construction_result_);
}
return Handle<Code>::null();
@@ -4218,21 +4218,29 @@ Handle<Code> WasmCompilationUnit::FinishCompilation() {
if (isolate_->logger()->is_logging_code_events() ||
isolate_->is_profiling()) {
RecordFunctionCompilation(CodeEventListener::FUNCTION_TAG, isolate_, code,
- "WASM_function", function_->func_index,
- wasm::WasmName("module"),
- module_env_->wire_bytes.GetName(function_));
+ "WASM_function", func_index_,
+ wasm::WasmName("module"), func_name_);
}
if (FLAG_trace_wasm_decode_time) {
double codegen_ms = codegen_timer.Elapsed().InMillisecondsF();
PrintF("wasm-code-generation ok: %u bytes, %0.3f ms code generation\n",
- function_->code_end_offset - function_->code_start_offset,
+ static_cast<unsigned>(func_body_.end - func_body_.start),
codegen_ms);
}
return code;
}
+// static
+Handle<Code> WasmCompilationUnit::CompileWasmFunction(
+ wasm::ErrorThrower* thrower, Isolate* isolate,
+ wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) {
+ WasmCompilationUnit unit(isolate, module_env, function);
+ unit.ExecuteCompilation();
+ return unit.FinishCompilation(thrower);
+}
+
} // namespace compiler
} // namespace internal
} // namespace v8

Powered by Google App Engine
This is Rietveld 408576698