Closed Bug 1979829 Opened 8 months ago Closed 8 months ago

Ion's EAA pass: limit EffectiveAddress2 nodes to constants synthesisable in a single instruction.

Categories

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

enhancement

Tracking

()

RESOLVED FIXED
143 Branch
Tracking Status
firefox143 --- fixed

People

(Reporter: jseward, Assigned: jseward)

References

Details

Attachments

(1 file)

Ion's EAA pass can produce MEffectiveAddress2 nodes, which compute
constant +32 (index << {1,2,3}). On Intel that is fine; we can roll any
value of constant (an int32_t) into the resulting leal instruction. But
on arm64 (and all other targets) we have to synthesise it into a register,
which can take two instructions for larger values. That causes a perf
regression for JS3/gcc-loops-wasm.

Ion's EAA pass can produce MEffectiveAddress2 nodes, which compute
constant +32 (index << {1,2,3}). On Intel that is fine; we can roll any
value of constant (an int32_t) into the resulting leal instruction. But
on arm64 (and all other targets) we have to synthesise it into a register,
which can take two instructions for larger values. That causes a perf
regression for JS3/gcc-loops-wasm.

This patch limits formation of MEffectiveAddress2 nodes to constant values
that we know the backend can synthesise into a register in at most one
instruction.

Pushed by jseward@mozilla.com: https://github.com/mozilla-firefox/firefox/commit/b905964ae5e7 https://hg.mozilla.org/integration/autoland/rev/7fafb4b912a8 Ion's EAA pass: limit EffectiveAddress2 nodes to constants synthesisable in a single instruction. r=rhunt.
Status: NEW → RESOLVED
Closed: 8 months ago
Resolution: --- → FIXED
Target Milestone: --- → 143 Branch
QA Whiteboard: [qa-triage-done-c144/b143]
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: