Commit a537cb6a authored by Alessandro Pignotti's avatar Alessandro Pignotti Committed by V8 LUCI CQ

[wasm] Avoid SSA environment reload after calls when possible

This patch takes advantage of memory information from the module
to avoid unnecessary reloads of the SSA environment after a Wasm call.

As far as I can sse, the SSA envinronment consists of the mem_start
and mem_size values. Both these values cannot ever change if:

	initial_mem_size == max_mem_size.

Although this should be obviously true for memories defined in the
module itself, some explanation may be necessary for imported memories.

During module instantiation, the imported memory is checked as part of
InstanceBuilder::ProcessImportedMemory. The following properties are verified:

1) The current size of the imported memory is >= the initial declared size
2) The maximal size of the imported memory is <= the maximal declared size

The effective maximal limit will be min(imported_max, declared_max),
hence the optimization will only trigger if the imported memory is
already as large as it can be.

Since memory growth is impossible, there is no point in reloading the
environment anyway.

Change-Id: Ie6c6ad278175d253b61131972a6db7530bd52b90
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3412082Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/main@{#78782}
parent 57de5c1b
...@@ -1731,9 +1731,11 @@ class WasmGraphBuildingInterface { ...@@ -1731,9 +1731,11 @@ class WasmGraphBuildingInterface {
for (size_t i = 0; i < return_count; ++i) { for (size_t i = 0; i < return_count; ++i) {
returns[i].node = return_nodes[i]; returns[i].node = return_nodes[i];
} }
// The invoked function could have used grow_memory, so we need to if (decoder->module_->initial_pages != decoder->module_->maximum_pages) {
// reload mem_size and mem_start. // The invoked function could have used grow_memory, so we need to
LoadContextIntoSsa(ssa_env_); // reload mem_size and mem_start.
LoadContextIntoSsa(ssa_env_);
}
} }
void DoReturnCall(FullDecoder* decoder, CallInfo call_info, void DoReturnCall(FullDecoder* decoder, CallInfo call_info,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment