Commit 19fb1f4
authored
[EH] Test StackIR's local2stack on translator output (#6264)
This adds `STACKIR-OPT` filecheck lines to `translate-to-new-eh.wast`
to see if StackIR's `local2stack` optimization successfully removes some
of unnecessary `local.set`/`local.get`s.
While supporting the whole Binayren optimization pipeline for the new EH
instructions is not the goal for the very near-term future, StackIR's
`local2stack` optimization can help with a very common pattern generated
by this translator, which is:
```wast
(try $l
(do ... )
(catch_all
(call $destructor)
(rethrow $l)
)
)
```
is translated to
```wast
(block $outer
(local.set $exn ;; can be optimized away
(block $catch_all (result exnref)
(try_table (catch_all_ref $catch_all)
...
)
(br $outer)
)
)
(call $destructor)
(throw_ref
(local.get $exn) ;; can be optimized away
)
)
```
Here we don't really need `local.set $exn` and `local.get $exn`, and
these can be optimized away using StackIR's local2stack. After
optimizing them away in Stack IR, the code can be like
```wast
block $outer
block $catch_all (result exnref)
try_table (catch_all_ref $catch_all)
...
end
br $outer
end
call $destructor
throw_ref
end
```
This optimization alone reduces the code size increased caused by
translating significantly. For Adobe Photoshop, the code size increase
goes down from 4.2% to 2.8%, and for Binaryen, it goes down from 3.8% to
2.0%.1 parent b593849 commit 19fb1f4
1 file changed
Lines changed: 649 additions & 0 deletions
0 commit comments