diff options
| author | George Adams <georgeadams1995@gmail.com> | 2026-03-09 08:56:37 +0000 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2026-03-10 04:52:13 -0700 |
| commit | def4e491be636d5fda1f1d36bd17fbf3f8a37ea7 (patch) | |
| tree | 68299f889ca5e8557790fe8f1898ca06eebefda5 /src/cmd/internal | |
| parent | 28b1d8886b3bd5645f8bfebb7713358a1551d435 (diff) | |
| download | go-def4e491be636d5fda1f1d36bd17fbf3f8a37ea7.tar.xz | |
cmd/compile: add identity and absorption rules for wasm
Add post-lowering identity and absorption rules for I64And, I64Or,
I64Xor, and I64Mul with constant operands:
(I64And x (I64Const [-1])) => x
(I64And x (I64Const [0])) => (I64Const [0])
(I64Or x (I64Const [0])) => x
(I64Or x (I64Const [-1])) => (I64Const [-1])
(I64Xor x (I64Const [0])) => x
(I64Mul x (I64Const [0])) => (I64Const [0])
(I64Mul x (I64Const [1])) => x
The generic SSA rules handle these patterns before lowering, but
these rules catch cases where wasm-specific lowering or other
post-lowering optimization passes produce new nodes with identity
or absorbing constant operands.
For example, the complement rule lowers Com64(x) to
(I64Xor x (I64Const [-1])), and if x is later determined to be
all-ones, the I64And absorption rule can fold the result to zero.
Cq-Include-Trybots: luci.golang.try:gotip-wasip1-wasm_wasmtime,gotip-wasip1-wasm_wazero
Change-Id: Ie9a40e075662d4828a70e30b258d92ee171d0bc2
Reviewed-on: https://go-review.googlesource.com/c/go/+/752861
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/internal')
0 files changed, 0 insertions, 0 deletions
