Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

SimplifyLocals causes ineffective code

未关闭
#7,672 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 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:

Image

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

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

WebAssembly/binaryen 的其他 Issue

查看 WebAssembly/binaryen 的全部 Issue

相似的 Issue

更多 Compilers Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。