(I64Add x (I64Const [y])) -> (I64AddConst [y] x)
(I64Eqz (I64Eqz (I64Eqz x))) -> (I64Eqz x)
-(I64Store8 [off] (I64AddConst [off2] ptr) val mem) && off+off2 >= 0 -> (I64Store8 [off+off2] ptr val mem)
-(I64Store16 [off] (I64AddConst [off2] ptr) val mem) && off+off2 >= 0 -> (I64Store16 [off+off2] ptr val mem)
-(I64Store32 [off] (I64AddConst [off2] ptr) val mem) && off+off2 >= 0 -> (I64Store32 [off+off2] ptr val mem)
-(I64Store [off] (I64AddConst [off2] ptr) val mem) && off+off2 >= 0 -> (I64Store [off+off2] ptr val mem)
-
-(I64Load8U [off] (I64AddConst [off2] ptr) mem) && off+off2 >= 0 -> (I64Load8U [off+off2] ptr mem)
-(I64Load8S [off] (I64AddConst [off2] ptr) mem) && off+off2 >= 0 -> (I64Load8S [off+off2] ptr mem)
-(I64Load16U [off] (I64AddConst [off2] ptr) mem) && off+off2 >= 0 -> (I64Load16U [off+off2] ptr mem)
-(I64Load16S [off] (I64AddConst [off2] ptr) mem) && off+off2 >= 0 -> (I64Load16S [off+off2] ptr mem)
-(I64Load32U [off] (I64AddConst [off2] ptr) mem) && off+off2 >= 0 -> (I64Load32U [off+off2] ptr mem)
-(I64Load32S [off] (I64AddConst [off2] ptr) mem) && off+off2 >= 0 -> (I64Load32S [off+off2] ptr mem)
-(I64Load [off] (I64AddConst [off2] ptr) mem) && off+off2 >= 0 -> (I64Load [off+off2] ptr mem)
+((I64Load|I64Load32U|I64Load32S|I64Load16U|I64Load16S|I64Load8U|I64Load8S) [off] (I64AddConst [off2] ptr) mem)
+ && isU32Bit(off+off2) ->
+ ((I64Load|I64Load32U|I64Load32S|I64Load16U|I64Load16S|I64Load8U|I64Load8S) [off+off2] ptr mem)
+
+((I64Store|I64Store32|I64Store16|I64Store8) [off] (I64AddConst [off2] ptr) val mem)
+ && isU32Bit(off+off2) ->
+ ((I64Store|I64Store32|I64Store16|I64Store8) [off+off2] ptr val mem)
}
func rewriteValueWasm_OpWasmI64Load_0(v *Value) bool {
// match: (I64Load [off] (I64AddConst [off2] ptr) mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Load [off+off2] ptr mem)
for {
off := v.AuxInt
off2 := v_0.AuxInt
ptr := v_0.Args[0]
mem := v.Args[1]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Load)
}
func rewriteValueWasm_OpWasmI64Load16S_0(v *Value) bool {
// match: (I64Load16S [off] (I64AddConst [off2] ptr) mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Load16S [off+off2] ptr mem)
for {
off := v.AuxInt
off2 := v_0.AuxInt
ptr := v_0.Args[0]
mem := v.Args[1]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Load16S)
}
func rewriteValueWasm_OpWasmI64Load16U_0(v *Value) bool {
// match: (I64Load16U [off] (I64AddConst [off2] ptr) mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Load16U [off+off2] ptr mem)
for {
off := v.AuxInt
off2 := v_0.AuxInt
ptr := v_0.Args[0]
mem := v.Args[1]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Load16U)
}
func rewriteValueWasm_OpWasmI64Load32S_0(v *Value) bool {
// match: (I64Load32S [off] (I64AddConst [off2] ptr) mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Load32S [off+off2] ptr mem)
for {
off := v.AuxInt
off2 := v_0.AuxInt
ptr := v_0.Args[0]
mem := v.Args[1]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Load32S)
}
func rewriteValueWasm_OpWasmI64Load32U_0(v *Value) bool {
// match: (I64Load32U [off] (I64AddConst [off2] ptr) mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Load32U [off+off2] ptr mem)
for {
off := v.AuxInt
off2 := v_0.AuxInt
ptr := v_0.Args[0]
mem := v.Args[1]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Load32U)
}
func rewriteValueWasm_OpWasmI64Load8S_0(v *Value) bool {
// match: (I64Load8S [off] (I64AddConst [off2] ptr) mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Load8S [off+off2] ptr mem)
for {
off := v.AuxInt
off2 := v_0.AuxInt
ptr := v_0.Args[0]
mem := v.Args[1]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Load8S)
}
func rewriteValueWasm_OpWasmI64Load8U_0(v *Value) bool {
// match: (I64Load8U [off] (I64AddConst [off2] ptr) mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Load8U [off+off2] ptr mem)
for {
off := v.AuxInt
off2 := v_0.AuxInt
ptr := v_0.Args[0]
mem := v.Args[1]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Load8U)
}
func rewriteValueWasm_OpWasmI64Store_0(v *Value) bool {
// match: (I64Store [off] (I64AddConst [off2] ptr) val mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Store [off+off2] ptr val mem)
for {
off := v.AuxInt
ptr := v_0.Args[0]
val := v.Args[1]
mem := v.Args[2]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Store)
}
func rewriteValueWasm_OpWasmI64Store16_0(v *Value) bool {
// match: (I64Store16 [off] (I64AddConst [off2] ptr) val mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Store16 [off+off2] ptr val mem)
for {
off := v.AuxInt
ptr := v_0.Args[0]
val := v.Args[1]
mem := v.Args[2]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Store16)
}
func rewriteValueWasm_OpWasmI64Store32_0(v *Value) bool {
// match: (I64Store32 [off] (I64AddConst [off2] ptr) val mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Store32 [off+off2] ptr val mem)
for {
off := v.AuxInt
ptr := v_0.Args[0]
val := v.Args[1]
mem := v.Args[2]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Store32)
}
func rewriteValueWasm_OpWasmI64Store8_0(v *Value) bool {
// match: (I64Store8 [off] (I64AddConst [off2] ptr) val mem)
- // cond: off+off2 >= 0
+ // cond: isU32Bit(off+off2)
// result: (I64Store8 [off+off2] ptr val mem)
for {
off := v.AuxInt
ptr := v_0.Args[0]
val := v.Args[1]
mem := v.Args[2]
- if !(off+off2 >= 0) {
+ if !(isU32Bit(off + off2)) {
break
}
v.reset(OpWasmI64Store8)