WebAssembly / WebAssembly/binaryen

optimize for if with return statement

Open
#5,549 2 comments 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

I have this code snippet

  local.get $0
  if
   local.get $0
   i32.const 1
   i32.add
   return
  end
  local.get $0
  if
   i32.const 100
   return
  end
  local.get $0

It can be optimized to

    local.get 0
    if  ;; label = @1
      local.get 0
      i32.const 1
      i32.add
      return
    end
    local.get 0
    if  ;; label = @1
      i32.const 100
      return
    end
    local.get 0

But it can be optimized as following code because second if conditional is always false.

    local.get 0
    if  ;; label = @1
      local.get 0
      i32.const 1
      i32.add
      return
    end
    local.get 0

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

The issue names no source file or test. Reproduce the supplied WAT snippet through Binaryen's optimizer, then trace the optimization handling the conditional returns; done when the second if is removed while behavior remains equivalent.

Written by the indexing model from the issue text.

Assessment

Tech stack
wasm
Domain
compilers
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.