mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: ignore div/mod in prove on non-x86 architectures
Instead of writing AuxInt during prove and then zeroing it during lower, just don't write it in the first place. Passes toolstash-check -all. Change-Id: Iea4b555029a9d69332e835536f9cf3a42b8223db Reviewed-on: https://go-review.googlesource.com/c/go/+/220682 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
4ae1879dda
commit
2c859eae1d
11 changed files with 48 additions and 224 deletions
|
|
@ -18,9 +18,9 @@
|
||||||
(Hmul32u x y) -> (SRAconst (UMULL <typ.UInt64> x y) [32])
|
(Hmul32u x y) -> (SRAconst (UMULL <typ.UInt64> x y) [32])
|
||||||
(Mul64uhilo ...) -> (LoweredMuluhilo ...)
|
(Mul64uhilo ...) -> (LoweredMuluhilo ...)
|
||||||
|
|
||||||
(Div64 [a] x y) -> (DIV x y)
|
(Div64 ...) -> (DIV ...)
|
||||||
(Div64u ...) -> (UDIV ...)
|
(Div64u ...) -> (UDIV ...)
|
||||||
(Div32 [a] x y) -> (DIVW x y)
|
(Div32 ...) -> (DIVW ...)
|
||||||
(Div32u ...) -> (UDIVW ...)
|
(Div32u ...) -> (UDIVW ...)
|
||||||
(Div16 x y) -> (DIVW (SignExt16to32 x) (SignExt16to32 y))
|
(Div16 x y) -> (DIVW (SignExt16to32 x) (SignExt16to32 y))
|
||||||
(Div16u x y) -> (UDIVW (ZeroExt16to32 x) (ZeroExt16to32 y))
|
(Div16u x y) -> (UDIVW (ZeroExt16to32 x) (ZeroExt16to32 y))
|
||||||
|
|
@ -29,9 +29,9 @@
|
||||||
(Div32F ...) -> (FDIVS ...)
|
(Div32F ...) -> (FDIVS ...)
|
||||||
(Div64F ...) -> (FDIVD ...)
|
(Div64F ...) -> (FDIVD ...)
|
||||||
|
|
||||||
(Mod64 [a] x y) -> (MOD x y)
|
(Mod64 ...) -> (MOD ...)
|
||||||
(Mod64u ...) -> (UMOD ...)
|
(Mod64u ...) -> (UMOD ...)
|
||||||
(Mod32 [a] x y) -> (MODW x y)
|
(Mod32 ...) -> (MODW ...)
|
||||||
(Mod32u ...) -> (UMODW ...)
|
(Mod32u ...) -> (UMODW ...)
|
||||||
(Mod16 x y) -> (MODW (SignExt16to32 x) (SignExt16to32 y))
|
(Mod16 x y) -> (MODW (SignExt16to32 x) (SignExt16to32 y))
|
||||||
(Mod16u x y) -> (UMODW (ZeroExt16to32 x) (ZeroExt16to32 y))
|
(Mod16u x y) -> (UMODW (ZeroExt16to32 x) (ZeroExt16to32 y))
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,9 @@
|
||||||
(Mul(32|16|8) ...) -> (MULLW ...)
|
(Mul(32|16|8) ...) -> (MULLW ...)
|
||||||
(Mul64uhilo ...) -> (LoweredMuluhilo ...)
|
(Mul64uhilo ...) -> (LoweredMuluhilo ...)
|
||||||
|
|
||||||
(Div64 [a] x y) -> (DIVD x y)
|
(Div64 ...) -> (DIVD ...)
|
||||||
(Div64u ...) -> (DIVDU ...)
|
(Div64u ...) -> (DIVDU ...)
|
||||||
(Div32 [a] x y) -> (DIVW x y)
|
(Div32 ...) -> (DIVW ...)
|
||||||
(Div32u ...) -> (DIVWU ...)
|
(Div32u ...) -> (DIVWU ...)
|
||||||
(Div16 x y) -> (DIVW (SignExt16to32 x) (SignExt16to32 y))
|
(Div16 x y) -> (DIVW (SignExt16to32 x) (SignExt16to32 y))
|
||||||
(Div16u x y) -> (DIVWU (ZeroExt16to32 x) (ZeroExt16to32 y))
|
(Div16u x y) -> (DIVWU (ZeroExt16to32 x) (ZeroExt16to32 y))
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,9 @@
|
||||||
(Div32F ...) -> (FDIVS ...)
|
(Div32F ...) -> (FDIVS ...)
|
||||||
(Div64F ...) -> (FDIVD ...)
|
(Div64F ...) -> (FDIVD ...)
|
||||||
|
|
||||||
(Div64 [a] x y) -> (DIV x y)
|
(Div64 ...) -> (DIV ...)
|
||||||
(Div64u ...) -> (DIVU ...)
|
(Div64u ...) -> (DIVU ...)
|
||||||
(Div32 [a] x y) -> (DIVW x y)
|
(Div32 ...) -> (DIVW ...)
|
||||||
(Div32u ...) -> (DIVUW ...)
|
(Div32u ...) -> (DIVUW ...)
|
||||||
(Div16 x y) -> (DIVW (SignExt16to32 x) (SignExt16to32 y))
|
(Div16 x y) -> (DIVW (SignExt16to32 x) (SignExt16to32 y))
|
||||||
(Div16u x y) -> (DIVUW (ZeroExt16to32 x) (ZeroExt16to32 y))
|
(Div16u x y) -> (DIVUW (ZeroExt16to32 x) (ZeroExt16to32 y))
|
||||||
|
|
@ -60,9 +60,9 @@
|
||||||
// (x + y) / 2 -> (x / 2) + (y / 2) + (x & y & 1)
|
// (x + y) / 2 -> (x / 2) + (y / 2) + (x & y & 1)
|
||||||
(Avg64u <t> x y) -> (ADD (ADD <t> (SRLI <t> [1] x) (SRLI <t> [1] y)) (ANDI <t> [1] (AND <t> x y)))
|
(Avg64u <t> x y) -> (ADD (ADD <t> (SRLI <t> [1] x) (SRLI <t> [1] y)) (ANDI <t> [1] (AND <t> x y)))
|
||||||
|
|
||||||
(Mod64 [a] x y) -> (REM x y)
|
(Mod64 ...) -> (REM ...)
|
||||||
(Mod64u ...) -> (REMU ...)
|
(Mod64u ...) -> (REMU ...)
|
||||||
(Mod32 [a] x y) -> (REMW x y)
|
(Mod32 ...) -> (REMW ...)
|
||||||
(Mod32u ...) -> (REMUW ...)
|
(Mod32u ...) -> (REMUW ...)
|
||||||
(Mod16 x y) -> (REMW (SignExt16to32 x) (SignExt16to32 y))
|
(Mod16 x y) -> (REMW (SignExt16to32 x) (SignExt16to32 y))
|
||||||
(Mod16u x y) -> (REMUW (ZeroExt16to32 x) (ZeroExt16to32 y))
|
(Mod16u x y) -> (REMUW (ZeroExt16to32 x) (ZeroExt16to32 y))
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
(Div32F ...) -> (FDIVS ...)
|
(Div32F ...) -> (FDIVS ...)
|
||||||
(Div64F ...) -> (FDIV ...)
|
(Div64F ...) -> (FDIV ...)
|
||||||
|
|
||||||
(Div64 [a] x y) -> (DIVD x y)
|
(Div64 ...) -> (DIVD ...)
|
||||||
(Div64u ...) -> (DIVDU ...)
|
(Div64u ...) -> (DIVDU ...)
|
||||||
// DIVW/DIVWU has a 64-bit dividend and a 32-bit divisor,
|
// DIVW/DIVWU has a 64-bit dividend and a 32-bit divisor,
|
||||||
// so a sign/zero extension of the dividend is required.
|
// so a sign/zero extension of the dividend is required.
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
(Hmul32 x y) -> (SRDconst [32] (MULLD (MOVWreg x) (MOVWreg y)))
|
(Hmul32 x y) -> (SRDconst [32] (MULLD (MOVWreg x) (MOVWreg y)))
|
||||||
(Hmul32u x y) -> (SRDconst [32] (MULLD (MOVWZreg x) (MOVWZreg y)))
|
(Hmul32u x y) -> (SRDconst [32] (MULLD (MOVWZreg x) (MOVWZreg y)))
|
||||||
|
|
||||||
(Mod64 [a] x y) -> (MODD x y)
|
(Mod64 ...) -> (MODD ...)
|
||||||
(Mod64u ...) -> (MODDU ...)
|
(Mod64u ...) -> (MODDU ...)
|
||||||
// MODW/MODWU has a 64-bit dividend and a 32-bit divisor,
|
// MODW/MODWU has a 64-bit dividend and a 32-bit divisor,
|
||||||
// so a sign/zero extension of the dividend is required.
|
// so a sign/zero extension of the dividend is required.
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
(Mul(64|32|16|8) ...) -> (I64Mul ...)
|
(Mul(64|32|16|8) ...) -> (I64Mul ...)
|
||||||
(Mul(64|32)F ...) -> (F(64|32)Mul ...)
|
(Mul(64|32)F ...) -> (F(64|32)Mul ...)
|
||||||
|
|
||||||
(Div64 [a] x y) -> (I64DivS x y)
|
(Div64 ...) -> (I64DivS ...)
|
||||||
(Div64u ...) -> (I64DivU ...)
|
(Div64u ...) -> (I64DivU ...)
|
||||||
(Div32 x y) -> (I64DivS (SignExt32to64 x) (SignExt32to64 y))
|
(Div32 x y) -> (I64DivS (SignExt32to64 x) (SignExt32to64 y))
|
||||||
(Div32u x y) -> (I64DivU (ZeroExt32to64 x) (ZeroExt32to64 y))
|
(Div32u x y) -> (I64DivU (ZeroExt32to64 x) (ZeroExt32to64 y))
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
(Div8u x y) -> (I64DivU (ZeroExt8to64 x) (ZeroExt8to64 y))
|
(Div8u x y) -> (I64DivU (ZeroExt8to64 x) (ZeroExt8to64 y))
|
||||||
(Div(64|32)F ...) -> (F(64|32)Div ...)
|
(Div(64|32)F ...) -> (F(64|32)Div ...)
|
||||||
|
|
||||||
(Mod64 [a] x y) -> (I64RemS x y)
|
(Mod64 ...) -> (I64RemS ...)
|
||||||
(Mod64u ...) -> (I64RemU ...)
|
(Mod64u ...) -> (I64RemU ...)
|
||||||
(Mod32 x y) -> (I64RemS (SignExt32to64 x) (SignExt32to64 y))
|
(Mod32 x y) -> (I64RemS (SignExt32to64 x) (SignExt32to64 y))
|
||||||
(Mod32u x y) -> (I64RemU (ZeroExt32to64 x) (ZeroExt32to64 y))
|
(Mod32u x y) -> (I64RemU (ZeroExt32to64 x) (ZeroExt32to64 y))
|
||||||
|
|
|
||||||
|
|
@ -1219,6 +1219,12 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) {
|
||||||
case OpDiv16, OpDiv32, OpDiv64, OpMod16, OpMod32, OpMod64:
|
case OpDiv16, OpDiv32, OpDiv64, OpMod16, OpMod32, OpMod64:
|
||||||
// On amd64 and 386 fix-up code can be avoided if we know
|
// On amd64 and 386 fix-up code can be avoided if we know
|
||||||
// the divisor is not -1 or the dividend > MinIntNN.
|
// the divisor is not -1 or the dividend > MinIntNN.
|
||||||
|
// Don't modify AuxInt on other architectures,
|
||||||
|
// as that can interfere with CSE.
|
||||||
|
// TODO: add other architectures?
|
||||||
|
if b.Func.Config.arch != "386" && b.Func.Config.arch != "amd64" {
|
||||||
|
break
|
||||||
|
}
|
||||||
divr := v.Args[1]
|
divr := v.Args[1]
|
||||||
divrLim, divrLimok := ft.limits[divr.ID]
|
divrLim, divrLimok := ft.limits[divr.ID]
|
||||||
divd := v.Args[0]
|
divd := v.Args[0]
|
||||||
|
|
|
||||||
|
|
@ -609,7 +609,8 @@ func rewriteValueARM64(v *Value) bool {
|
||||||
case OpDiv16u:
|
case OpDiv16u:
|
||||||
return rewriteValueARM64_OpDiv16u(v)
|
return rewriteValueARM64_OpDiv16u(v)
|
||||||
case OpDiv32:
|
case OpDiv32:
|
||||||
return rewriteValueARM64_OpDiv32(v)
|
v.Op = OpARM64DIVW
|
||||||
|
return true
|
||||||
case OpDiv32F:
|
case OpDiv32F:
|
||||||
v.Op = OpARM64FDIVS
|
v.Op = OpARM64FDIVS
|
||||||
return true
|
return true
|
||||||
|
|
@ -617,7 +618,8 @@ func rewriteValueARM64(v *Value) bool {
|
||||||
v.Op = OpARM64UDIVW
|
v.Op = OpARM64UDIVW
|
||||||
return true
|
return true
|
||||||
case OpDiv64:
|
case OpDiv64:
|
||||||
return rewriteValueARM64_OpDiv64(v)
|
v.Op = OpARM64DIV
|
||||||
|
return true
|
||||||
case OpDiv64F:
|
case OpDiv64F:
|
||||||
v.Op = OpARM64FDIVD
|
v.Op = OpARM64FDIVD
|
||||||
return true
|
return true
|
||||||
|
|
@ -766,12 +768,14 @@ func rewriteValueARM64(v *Value) bool {
|
||||||
case OpMod16u:
|
case OpMod16u:
|
||||||
return rewriteValueARM64_OpMod16u(v)
|
return rewriteValueARM64_OpMod16u(v)
|
||||||
case OpMod32:
|
case OpMod32:
|
||||||
return rewriteValueARM64_OpMod32(v)
|
v.Op = OpARM64MODW
|
||||||
|
return true
|
||||||
case OpMod32u:
|
case OpMod32u:
|
||||||
v.Op = OpARM64UMODW
|
v.Op = OpARM64UMODW
|
||||||
return true
|
return true
|
||||||
case OpMod64:
|
case OpMod64:
|
||||||
return rewriteValueARM64_OpMod64(v)
|
v.Op = OpARM64MOD
|
||||||
|
return true
|
||||||
case OpMod64u:
|
case OpMod64u:
|
||||||
v.Op = OpARM64UMOD
|
v.Op = OpARM64UMOD
|
||||||
return true
|
return true
|
||||||
|
|
@ -23150,34 +23154,6 @@ func rewriteValueARM64_OpDiv16u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValueARM64_OpDiv32(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Div32 [a] x y)
|
|
||||||
// result: (DIVW x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpARM64DIVW)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueARM64_OpDiv64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Div64 [a] x y)
|
|
||||||
// result: (DIV x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpARM64DIV)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueARM64_OpDiv8(v *Value) bool {
|
func rewriteValueARM64_OpDiv8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
@ -24604,34 +24580,6 @@ func rewriteValueARM64_OpMod16u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValueARM64_OpMod32(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Mod32 [a] x y)
|
|
||||||
// result: (MODW x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpARM64MODW)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueARM64_OpMod64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Mod64 [a] x y)
|
|
||||||
// result: (MOD x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpARM64MOD)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueARM64_OpMod8(v *Value) bool {
|
func rewriteValueARM64_OpMod8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,8 @@ func rewriteValuePPC64(v *Value) bool {
|
||||||
case OpDiv16u:
|
case OpDiv16u:
|
||||||
return rewriteValuePPC64_OpDiv16u(v)
|
return rewriteValuePPC64_OpDiv16u(v)
|
||||||
case OpDiv32:
|
case OpDiv32:
|
||||||
return rewriteValuePPC64_OpDiv32(v)
|
v.Op = OpPPC64DIVW
|
||||||
|
return true
|
||||||
case OpDiv32F:
|
case OpDiv32F:
|
||||||
v.Op = OpPPC64FDIVS
|
v.Op = OpPPC64FDIVS
|
||||||
return true
|
return true
|
||||||
|
|
@ -192,7 +193,8 @@ func rewriteValuePPC64(v *Value) bool {
|
||||||
v.Op = OpPPC64DIVWU
|
v.Op = OpPPC64DIVWU
|
||||||
return true
|
return true
|
||||||
case OpDiv64:
|
case OpDiv64:
|
||||||
return rewriteValuePPC64_OpDiv64(v)
|
v.Op = OpPPC64DIVD
|
||||||
|
return true
|
||||||
case OpDiv64F:
|
case OpDiv64F:
|
||||||
v.Op = OpPPC64FDIV
|
v.Op = OpPPC64FDIV
|
||||||
return true
|
return true
|
||||||
|
|
@ -1446,34 +1448,6 @@ func rewriteValuePPC64_OpDiv16u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValuePPC64_OpDiv32(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Div32 [a] x y)
|
|
||||||
// result: (DIVW x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpPPC64DIVW)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValuePPC64_OpDiv64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Div64 [a] x y)
|
|
||||||
// result: (DIVD x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpPPC64DIVD)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValuePPC64_OpDiv8(v *Value) bool {
|
func rewriteValuePPC64_OpDiv8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,8 @@ func rewriteValueRISCV64(v *Value) bool {
|
||||||
case OpDiv16u:
|
case OpDiv16u:
|
||||||
return rewriteValueRISCV64_OpDiv16u(v)
|
return rewriteValueRISCV64_OpDiv16u(v)
|
||||||
case OpDiv32:
|
case OpDiv32:
|
||||||
return rewriteValueRISCV64_OpDiv32(v)
|
v.Op = OpRISCV64DIVW
|
||||||
|
return true
|
||||||
case OpDiv32F:
|
case OpDiv32F:
|
||||||
v.Op = OpRISCV64FDIVS
|
v.Op = OpRISCV64FDIVS
|
||||||
return true
|
return true
|
||||||
|
|
@ -127,7 +128,8 @@ func rewriteValueRISCV64(v *Value) bool {
|
||||||
v.Op = OpRISCV64DIVUW
|
v.Op = OpRISCV64DIVUW
|
||||||
return true
|
return true
|
||||||
case OpDiv64:
|
case OpDiv64:
|
||||||
return rewriteValueRISCV64_OpDiv64(v)
|
v.Op = OpRISCV64DIV
|
||||||
|
return true
|
||||||
case OpDiv64F:
|
case OpDiv64F:
|
||||||
v.Op = OpRISCV64FDIVD
|
v.Op = OpRISCV64FDIVD
|
||||||
return true
|
return true
|
||||||
|
|
@ -281,12 +283,14 @@ func rewriteValueRISCV64(v *Value) bool {
|
||||||
case OpMod16u:
|
case OpMod16u:
|
||||||
return rewriteValueRISCV64_OpMod16u(v)
|
return rewriteValueRISCV64_OpMod16u(v)
|
||||||
case OpMod32:
|
case OpMod32:
|
||||||
return rewriteValueRISCV64_OpMod32(v)
|
v.Op = OpRISCV64REMW
|
||||||
|
return true
|
||||||
case OpMod32u:
|
case OpMod32u:
|
||||||
v.Op = OpRISCV64REMUW
|
v.Op = OpRISCV64REMUW
|
||||||
return true
|
return true
|
||||||
case OpMod64:
|
case OpMod64:
|
||||||
return rewriteValueRISCV64_OpMod64(v)
|
v.Op = OpRISCV64REM
|
||||||
|
return true
|
||||||
case OpMod64u:
|
case OpMod64u:
|
||||||
v.Op = OpRISCV64REMU
|
v.Op = OpRISCV64REMU
|
||||||
return true
|
return true
|
||||||
|
|
@ -724,34 +728,6 @@ func rewriteValueRISCV64_OpDiv16u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValueRISCV64_OpDiv32(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Div32 [a] x y)
|
|
||||||
// result: (DIVW x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpRISCV64DIVW)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueRISCV64_OpDiv64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Div64 [a] x y)
|
|
||||||
// result: (DIV x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpRISCV64DIV)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueRISCV64_OpDiv8(v *Value) bool {
|
func rewriteValueRISCV64_OpDiv8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
@ -1911,34 +1887,6 @@ func rewriteValueRISCV64_OpMod16u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValueRISCV64_OpMod32(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Mod32 [a] x y)
|
|
||||||
// result: (REMW x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpRISCV64REMW)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueRISCV64_OpMod64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Mod64 [a] x y)
|
|
||||||
// result: (REM x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpRISCV64REM)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueRISCV64_OpMod8(v *Value) bool {
|
func rewriteValueRISCV64_OpMod8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
|
||||||
|
|
@ -195,7 +195,8 @@ func rewriteValueS390X(v *Value) bool {
|
||||||
case OpDiv32u:
|
case OpDiv32u:
|
||||||
return rewriteValueS390X_OpDiv32u(v)
|
return rewriteValueS390X_OpDiv32u(v)
|
||||||
case OpDiv64:
|
case OpDiv64:
|
||||||
return rewriteValueS390X_OpDiv64(v)
|
v.Op = OpS390XDIVD
|
||||||
|
return true
|
||||||
case OpDiv64F:
|
case OpDiv64F:
|
||||||
v.Op = OpS390XFDIV
|
v.Op = OpS390XFDIV
|
||||||
return true
|
return true
|
||||||
|
|
@ -352,7 +353,8 @@ func rewriteValueS390X(v *Value) bool {
|
||||||
case OpMod32u:
|
case OpMod32u:
|
||||||
return rewriteValueS390X_OpMod32u(v)
|
return rewriteValueS390X_OpMod32u(v)
|
||||||
case OpMod64:
|
case OpMod64:
|
||||||
return rewriteValueS390X_OpMod64(v)
|
v.Op = OpS390XMODD
|
||||||
|
return true
|
||||||
case OpMod64u:
|
case OpMod64u:
|
||||||
v.Op = OpS390XMODDU
|
v.Op = OpS390XMODDU
|
||||||
return true
|
return true
|
||||||
|
|
@ -1272,20 +1274,6 @@ func rewriteValueS390X_OpDiv32u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValueS390X_OpDiv64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Div64 [a] x y)
|
|
||||||
// result: (DIVD x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpS390XDIVD)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueS390X_OpDiv8(v *Value) bool {
|
func rewriteValueS390X_OpDiv8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
@ -3252,20 +3240,6 @@ func rewriteValueS390X_OpMod32u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValueS390X_OpMod64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Mod64 [a] x y)
|
|
||||||
// result: (MODD x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpS390XMODD)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueS390X_OpMod8(v *Value) bool {
|
func rewriteValueS390X_OpMod8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
|
||||||
|
|
@ -181,7 +181,8 @@ func rewriteValueWasm(v *Value) bool {
|
||||||
case OpDiv32u:
|
case OpDiv32u:
|
||||||
return rewriteValueWasm_OpDiv32u(v)
|
return rewriteValueWasm_OpDiv32u(v)
|
||||||
case OpDiv64:
|
case OpDiv64:
|
||||||
return rewriteValueWasm_OpDiv64(v)
|
v.Op = OpWasmI64DivS
|
||||||
|
return true
|
||||||
case OpDiv64F:
|
case OpDiv64F:
|
||||||
v.Op = OpWasmF64Div
|
v.Op = OpWasmF64Div
|
||||||
return true
|
return true
|
||||||
|
|
@ -344,7 +345,8 @@ func rewriteValueWasm(v *Value) bool {
|
||||||
case OpMod32u:
|
case OpMod32u:
|
||||||
return rewriteValueWasm_OpMod32u(v)
|
return rewriteValueWasm_OpMod32u(v)
|
||||||
case OpMod64:
|
case OpMod64:
|
||||||
return rewriteValueWasm_OpMod64(v)
|
v.Op = OpWasmI64RemS
|
||||||
|
return true
|
||||||
case OpMod64u:
|
case OpMod64u:
|
||||||
v.Op = OpWasmI64RemU
|
v.Op = OpWasmI64RemU
|
||||||
return true
|
return true
|
||||||
|
|
@ -954,20 +956,6 @@ func rewriteValueWasm_OpDiv32u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValueWasm_OpDiv64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Div64 [a] x y)
|
|
||||||
// result: (I64DivS x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpWasmI64DivS)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueWasm_OpDiv8(v *Value) bool {
|
func rewriteValueWasm_OpDiv8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
@ -1871,20 +1859,6 @@ func rewriteValueWasm_OpMod32u(v *Value) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func rewriteValueWasm_OpMod64(v *Value) bool {
|
|
||||||
v_1 := v.Args[1]
|
|
||||||
v_0 := v.Args[0]
|
|
||||||
// match: (Mod64 [a] x y)
|
|
||||||
// result: (I64RemS x y)
|
|
||||||
for {
|
|
||||||
x := v_0
|
|
||||||
y := v_1
|
|
||||||
v.reset(OpWasmI64RemS)
|
|
||||||
v.AddArg(x)
|
|
||||||
v.AddArg(y)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func rewriteValueWasm_OpMod8(v *Value) bool {
|
func rewriteValueWasm_OpMod8(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue