binaryen icon indicating copy to clipboard operation
binaryen copied to clipboard

miss-optimization for continuous add

Open HerrCai0907 opened this issue 1 year ago • 2 comments

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.

HerrCai0907 avatar Aug 10 '24 16:08 HerrCai0907

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.

ryanking13 avatar Jul 14 '24 08:07 ryanking13