SimplifyLocals causes ineffective code
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 35/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- wasm
- 领域
- compilers
调研方向
使用 -O3 和 -O3 -sp=simplify-locals 通过 wasm-opt 重现该示例,然后检查 simplify-locals 的入口点以及后续的条件优化。比较两次运行生成的 WebAssembly。完成的标准是:修复遗漏的优化,同时不错误地移除可达行为,并为此输入添加回归测试。
由索引模型根据 Issue 内容生成。
描述
Given the following code:
(module
(type (;0;) (func))
(import "External" "external_function" (func $external_function (type 0)))
(func $_start (type 0)
i32.const 9576
i32.load
i32.load
i32.load
drop
i32.const 9576
i32.load
i32.load
i32.load
i32.const 9576
i32.load
i32.load
i32.load
i32.gt_s
if (result i32) ;; label = @1
call $external_function
i32.const 1
else
i32.const 0
end
drop
unreachable)
(memory $0 258 258)
(export "_start" (func $_start)))
For wasm-opt (c91c0520a61), -O3 -sp=simplify-locals can eliminate the unreachable code, while -O3 cannot:
(func $_start
(local $0 i32)
(if
(i32.gt_s
(local.tee $0
(i32.load
(i32.load
(i32.load
(i32.const 9576)
)
)
)
)
(local.get $0)
)
(then
(call $external_function)
)
)
(unreachable)
)
After investigating, it is the Wasm-specific optimization simplify-locals causes the counter-intuitive code. Below is the change made by simplify-locals:
As you can see, the currently wasm-opt cannot optimize the if condition on the right---it can only do that on the left, which I think it is missed optimization (It is not the simplify-locals fault...).
- 主要语言
- WebAssembly
- 星标
- 8.6k
- 派生
- 885
- 平均合并
- 2 天 4 小时
- 30 天内合并 PR
- 77
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
WebAssembly/binaryen 的其他 Issue
-
难度 1/5 1 小时以内 新手友好度 88/100
WebAssembly/binaryen#9135 · 1 条评论 ·
-
难度 2/5 半天 新手友好度 76/100
WebAssembly/binaryen#9018 · 3 条评论 ·
-
难度 5/5 一周以上 新手友好度 25/100
WebAssembly/binaryen#9133 ·
-
难度 4/5 3-5 天 新手友好度 52/100
WebAssembly/binaryen#9123 ·
-
难度 5/5 一周以上 新手友好度 35/100
WebAssembly/binaryen#9122 ·
查看 WebAssembly/binaryen 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 75/100
JakeChampion/lang#10213 ·
-
enhancement good first issue needs testing
难度 2/5 1-3 小时 新手友好度 75/100
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
bradcypert/plum#58 ·
-
flang:fir-hlfir
难度 2/5 1-3 小时 新手友好度 70/100
llvm/llvm-project#225935 ·
-
area:cards hand-tail ready-for-agent
难度 2/5 1-3 小时 新手友好度 65/100
fil-donadoni/tolaria#4446 ·