[Emitting Zero] [Local Tracking] General rule might not handle unary ne emitting zero bits well
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 35/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- wasm
- 领域
- compilers
调研方向
首先,使用 commit 755a8d0e 中的 wasm-opt,以 -O2 和 -all -O3 运行所提供的 WebAssembly 模块,然后比较优化结果。以 issue #7492 作为相关上下文,跟踪 local tracking 和一元比较的处理。完成的标准是:在 -O3 下同样推导出该条件为 true,并且该分支变得不可达。
由索引模型根据 Issue 内容生成。
描述
Given the following code:
(module
(import "External" "external_function" (func $external_function))
(func $foo (result i32)
i32.const 0
i32.load)
(func $_start (param $0 i32) (param $1 i64) (param $2 i32)
(local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $9 i32)
call $foo
local.set $4
i32.const 1
local.set $3
local.get $4
local.get $3
i32.shl
i32.const 1
i32.shr_s
local.set $6
i32.const 0
i32.const 0
i32.store
i32.const -259031342
local.set $7
local.get $6
local.get $7
i32.ne
local.set $9
block ;; label = @1
local.get $9
i32.eqz
br_if 0 (;@1;)
unreachable
end
call $bar)
(func $bar call $external_function)
(memory $0 258 258)
(export "_start" (func $_start)))
wasm-opt (755a8d0e) should deduce the condition to false, thus fold the branch to unreachable (further deleting call $bar), which works under -O2 but fails under -O3.
Below is optimized by -all -O3:
(func $_start (type $1) (param $0 i32) (param $1 i64) (param $2 i32)
(local.set $0
(i32.shr_s
(i32.shl
(i32.load
(i32.const 0)
)
(i32.const 1)
)
(i32.const 1)
)
)
(i32.store
(i32.const 0)
(i32.const 0)
)
(if
(i32.ne
(local.get $0)
(i32.const -259031342)
)
(then
(unreachable)
)
)
(call $external_function)
)
As you can see, the condition here
(i32.ne
(local.get $0)
(i32.const -259031342)
)
is not deduced to true.
Similar to #7492, Maybe there a missing rule for it to emit zero bits, or is the local tracking insufficient?
- 主要语言
- 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
-
难度 2/5 1-3 小时 新手友好度 75/100
JakeChampion/lang#10213 ·
-
bug language-server
难度 2/5 1-3 小时 新手友好度 70/100
purefunctor/purescript-iris#552 ·
-
enhancement good first issue needs testing
难度 2/5 1-3 小时 新手友好度 75/100
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
bradcypert/plum#58 ·