Closed Bug 1316802 Opened 8 years ago Closed 2 years ago

Wasm baseline: Avoid a sync() to free a specific register when a same-type register is available

Categories

(Core :: JavaScript: WebAssembly, enhancement, P5)

enhancement

Tracking

()

RESOLVED INACTIVE

People

(Reporter: lth, Unassigned)

References

Details

The specific-register allocator (the needI32(r), needI64(r) etc methods) can avoid syncing the value stack if the specific register is in use but there is a free register of the correct type to shuffle the specific register into.  (Doing so will also improve the generated code.)

The sync happens often enough to show up in profiles, because it is triggered by integer multiply and divide on x86-class systems, and reducing sync() cost is probably the most important optimization to compile time we can do inside the compiler.
Summary: Wasm baseline: Reduce sync() costs → Wasm baseline: Avoid a sync() to free a specific register when a same-type register is available
This problem accounts for a small number of the syncs: on AngryBots, 10K out of 380K syncs.  That's not negligble but we should address other concerns first:

Data from a run today on AngryBots, see bug 1316818 for some code and an explanation:

[Profiling] WASM BASELINE SYNC: total=377856 capacity=7 specific=10521 local=575 join=181835 call=184918
Priority: P3 → P5
Per policy at https://wiki.mozilla.org/Bug_Triage/Projects/Bug_Handling/Bug_Husbandry#Inactive_Bugs. If this bug is not an enhancement request or a bug not present in a supported release of Firefox, then it may be reopened.
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → INACTIVE
Status: RESOLVED → REOPENED
Resolution: INACTIVE → ---
Component: JavaScript Engine: JIT → Javascript: Web Assembly
Type: defect → enhancement
Status: REOPENED → RESOLVED
Closed: 6 years ago2 years ago
Resolution: --- → INACTIVE
You need to log in before you can comment on or make changes to this bug.