Closed Bug 1735481 Opened 3 years ago Closed 3 years ago

Spurious zero constant generated into register for addressing expression in 64-bit memories

Categories

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

x86_64
All
enhancement

Tracking

()

RESOLVED FIXED
95 Branch
Tracking Status
firefox95 --- fixed

People

(Reporter: lth, Assigned: lth)

References

(Blocks 1 open bug)

Details

Attachments

(2 files)

Test case:

var mod = new WebAssembly.Module(wasmTextToBinary(
`(module
   (memory i64 1)
   (func (result i32)
     (i32.load (i64.const 16))))`));
wasmDis(mod)

Output with --wasm-compiler=ion --wasm-memory64:

00000010  55                        push %rbp
00000011  48 8b ec                  mov %rsp, %rbp
00000014  33 c0                     xor %eax, %eax
00000016  41 8b 44 07 10            movl 0x10(%r15,%rax,1), %eax
0000001B  5d                        pop %rbp
0000001C  c3                        ret

Instead of generating a zero with the xor and then using Base+Index addressing, we could have used a simple Address here (base+constant) and generated movl 0x10(%r15) as we do for 32-bit memories, and as we do for arm64 for that matter.

Currently a test case that fails because there's an interesting
wrinkle in code generation (or more likely a missing optimization
somewhere before code generation).

Depends on D127064

For addressing expressions we want to special-case zero. Now that
pointers can be 64-bit values, recognize also 64-bit zeroes.

Depends on D127064

Attachment #9245689 - Attachment description: WIP: Bug 1735481 - Memory64 - Optimize m64 code, WIP → WIP: Bug 1735481 - Memory64 - White-box tests for m64 bce
Attachment #9245725 - Attachment description: WIP: Bug 1735481 - Memory64 - Make useRegisterOrZero work for i64 values. → Bug 1735481 - Memory64 - Make useRegisterOrZero work for i64 values.
Attachment #9245725 - Attachment description: Bug 1735481 - Memory64 - Make useRegisterOrZero work for i64 values. → Bug 1735481 - Memory64 - Make useRegisterOrZero work for i64 values. r?jseward
Attachment #9245689 - Attachment description: WIP: Bug 1735481 - Memory64 - White-box tests for m64 bce → Bug 1735481 - Memory64 - White-box tests for m64 bce. r?jseward
Pushed by lhansen@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/320b7d0b5790
Memory64 - Make useRegisterOrZero work for i64 values.  r=jseward
https://hg.mozilla.org/integration/autoland/rev/d7d3cda7b6be
Memory64 - White-box tests for m64 bce. r=jseward
Status: ASSIGNED → RESOLVED
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → 95 Branch
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: