Ion's EAA pass: limit EffectiveAddress2 nodes to constants synthesisable in a single instruction.
Categories
(Core :: JavaScript: WebAssembly, enhancement, P2)
Tracking
()
| 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.
| Assignee | ||
Comment 1•8 months ago
|
||
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.
Comment 3•8 months ago
|
||
| bugherder | ||
Updated•7 months ago
|
Description
•