WebAssembly / WebAssembly/binaryen

Recreate and optimize control flow

Open
#953 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
WebAssembly
Stars
8.6k
Forks
885
Avg merge
1d 19h
Merged PRs (30d)
69

Description

We have a relooper API, which allows an arbitrary CFG as input, but it would also be useful to receive a wasm and go back to an arbitrary CFG from there. This would let us better optimize wasms not generated by us.

For example, the loop-switch pattern is something specifically worth making sure we can optimize well https://github.com/pipcet/asmjs/issues/7#issuecomment-287445096

Recreating a CFG is fairly easy (we have the CFGWalker for that). However, to fully optimize the loop-switch pattern and other things, we'd need to identify and utilize control flow / jump threading variables too.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the relooper API and CFGWalker mentioned in the issue, then review the linked loop-switch example. Determine how a wasm input should be converted into an arbitrary CFG and how control-flow or jump-threading variables would be identified. Done means the resulting CFG can support optimization of the loop-switch pattern and similar cases.

Written by the indexing model from the issue text.

Assessment

Tech stack
wasm
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.