Commit 0780be44 authored by Clemens Backes's avatar Clemens Backes Committed by V8 LUCI CQ

[liftoff] Do not initialize unused frame slots

The dynamic tiering budget slot will never be used if dynamic tiering is
disabled. As it's un untagged field (never visited by GC), we can just
leave it uninitialized.

Similarly, the feedback vector slot is only used (and visited by the GC)
if --wasm-speculative-inlining is enabled.

Since both is disabled by default, we can save two spills in each
function, saving 16 bytes on x64.

Drive-by: Add code comments for both code blocks.

R=jkummerow@chromium.org

Change-Id: If325e795f6368e02ed687697c4bdac208214103b
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3468348Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/main@{#79192}
parent 079ef09f
......@@ -826,12 +826,13 @@ class LiftoffCompiler {
.AsRegister()));
__ cache_state()->SetInstanceCacheRegister(kWasmInstanceRegister);
// Load the feedback vector and cache it in a stack slot.
constexpr LiftoffRegList parameter_registers = GetGpParamRegisters();
constexpr LiftoffRegList kGpParamRegisters = GetGpParamRegisters();
if (FLAG_wasm_speculative_inlining) {
CODE_COMMENT("load feedback vector");
int declared_func_index =
func_index_ - env_->module->num_imported_functions;
DCHECK_GE(declared_func_index, 0);
LiftoffRegList pinned = parameter_registers;
LiftoffRegList pinned = kGpParamRegisters;
LiftoffRegister tmp = pinned.set(__ GetUnusedRegister(kGpReg, pinned));
__ LoadTaggedPointerFromInstance(
tmp.gp(), kWasmInstanceRegister,
......@@ -841,11 +842,10 @@ class LiftoffCompiler {
declared_func_index),
pinned);
__ Spill(liftoff::kFeedbackVectorOffset, tmp, kPointerKind);
} else {
__ Spill(liftoff::kFeedbackVectorOffset, WasmValue::ForUintPtr(0));
}
if (dynamic_tiering()) {
LiftoffRegList pinned = parameter_registers;
CODE_COMMENT("load tier up budget");
LiftoffRegList pinned = kGpParamRegisters;
LiftoffRegister tmp = pinned.set(__ GetUnusedRegister(kGpReg, pinned));
LOAD_INSTANCE_FIELD(tmp.gp(), TieringBudgetArray, kSystemPointerSize,
pinned);
......@@ -853,8 +853,6 @@ class LiftoffCompiler {
kInt32Size * declared_function_index(env_->module, func_index_);
__ Load(tmp, tmp.gp(), no_reg, offset, LoadType::kI32Load, pinned);
__ Spill(liftoff::kTierupBudgetOffset, tmp, ValueKind::kI32);
} else {
__ Spill(liftoff::kTierupBudgetOffset, WasmValue::ForUintPtr(0));
}
if (for_debugging_) __ ResetOSRTarget();
......
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