binaryen
binaryen copied to clipboard
miss-optimization for continuous add
These assemblyscript code
(func $assembly/index/_start (result i32)
global.get $assembly/index/a0
global.get $assembly/index/a1
i32.add
global.get $assembly/index/a2
i32.add
global.get $assembly/index/a3
i32.add
global.get $assembly/index/a4
i32.add
global.get $assembly/index/a5
i32.add
global.get $assembly/index/a6
i32.add
return
)
will be optimized to
(func $assembly/index/_start (result i32)
global.get $assembly/index/a6
global.get $assembly/index/a5
global.get $assembly/index/a4
global.get $assembly/index/a3
global.get $assembly/index/a2
global.get $assembly/index/a0
global.get $assembly/index/a1
i32.add
i32.add
i32.add
i32.add
i32.add
i32.add
)
Is there any benefit to exchange the operand of i32.add. the optimized version looks like cause higher register pressure for JIT / AOT wasm runtime.
Thanks for the proposal @CNSeniorious000!
I'm personally a "Soft No" on this one. If there is a good reason, I might change my mind. But since there are some ambiguities, like the one you mentioned at the end, like import a, b or from a import *, I'm not sure that the convenience gains from adding this outweigh the various ambiguous cases.