[liftoff] Speed up check for debug info
The {NextInstruction} method is quite hot, since it's called for every since Wasm instruction. It currently does several checks to figure out if - a breakpoint needs to be emitted, - extra source positions are needed, or - tracing is active. The first two can only happen if we are generating debug code, hence check for that first. The last can only happen in debug mode, so it's not an issue in production. Finally, outline the emission of debug information. This leads to inlining of the {NextInstruction} method into callers, where it is a single check followed by a call to {EmitDebuggingInfo} (in release mode). R=thibaudm@chromium.org Bug: v8:10576 Change-Id: I5047406f55cd14c6c639528ef6e3422af27d16b1 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2249671 Commit-Queue: Clemens Backes <clemensb@chromium.org> Reviewed-by: Thibaud Michaud <thibaudm@chromium.org> Cr-Commit-Position: refs/heads/master@{#68399}
This commit is contained in:
parent
44a655c8af
commit
f38e409323
@ -709,9 +709,10 @@ class LiftoffCompiler {
|
||||
asm_.AbortCompilation();
|
||||
}
|
||||
|
||||
void NextInstruction(FullDecoder* decoder, WasmOpcode opcode) {
|
||||
V8_NOINLINE void EmitDebuggingInfo(FullDecoder* decoder, WasmOpcode opcode) {
|
||||
DCHECK(V8_UNLIKELY(for_debugging_));
|
||||
bool breakpoint = false;
|
||||
if (V8_UNLIKELY(next_breakpoint_ptr_)) {
|
||||
if (next_breakpoint_ptr_) {
|
||||
if (*next_breakpoint_ptr_ == 0) {
|
||||
// A single breakpoint at offset 0 indicates stepping.
|
||||
DCHECK_EQ(next_breakpoint_ptr_ + 1, next_breakpoint_end_);
|
||||
@ -736,6 +737,12 @@ class LiftoffCompiler {
|
||||
}
|
||||
// Potentially generate the source position to OSR to this instruction.
|
||||
MaybeGenerateExtraSourcePos(decoder, !breakpoint);
|
||||
}
|
||||
|
||||
void NextInstruction(FullDecoder* decoder, WasmOpcode opcode) {
|
||||
// Add a single check, so that the fast path can be inlined while
|
||||
// {EmitDebuggingInfo} stays outlined.
|
||||
if (V8_UNLIKELY(for_debugging_)) EmitDebuggingInfo(decoder, opcode);
|
||||
TraceCacheState(decoder);
|
||||
#ifdef DEBUG
|
||||
SLOW_DCHECK(__ ValidateCacheState());
|
||||
|
Loading…
Reference in New Issue
Block a user