WebAssembly / WebAssembly/binaryen
Missing opportunity for redundant set elimination
Open
Nobody has claimed this yet.
- Dominant language
- WebAssembly
- Stars
- 8.6k
- Forks
- 885
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 69
Description
When variable used in basic block it could be also eliminated.
Simple example:
export function test(x: i32, y: i32): i32 {
x = y;
if (x) return x; // With "return y" RSE works as expected
return 0;
}
Current output:
(func $test (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.tee $0
if
local.get $0
return
end
i32.const 0
)
expected output:
(func $test (param $0 i32) (param $1 i32) (result i32)
local.get $1
if
local.get $1
return
end
i32.const 0
)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Begin by reproducing the shown function and inspecting Binaryen's redundant set elimination (RSE) handling for assignments used in the same basic block. Confirm that generated WebAssembly changes from local.tee/local.get to the expected direct parameter use, then locate the relevant optimizer regression coverage and verify the expected output.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- wasm
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100