mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: constant fold CtzNN
Change-Id: I3ecd2c7ed3c8ae35c2bb9562aed09f7ade5c8cdd Reviewed-on: https://go-review.googlesource.com/c/go/+/221609 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
7b30a2d268
commit
82253ddc7a
3 changed files with 166 additions and 3 deletions
|
|
@ -50,6 +50,14 @@ func rewriteValuegeneric(v *Value) bool {
|
|||
return rewriteValuegeneric_OpConstString(v)
|
||||
case OpConvert:
|
||||
return rewriteValuegeneric_OpConvert(v)
|
||||
case OpCtz16:
|
||||
return rewriteValuegeneric_OpCtz16(v)
|
||||
case OpCtz32:
|
||||
return rewriteValuegeneric_OpCtz32(v)
|
||||
case OpCtz64:
|
||||
return rewriteValuegeneric_OpCtz64(v)
|
||||
case OpCtz8:
|
||||
return rewriteValuegeneric_OpCtz8(v)
|
||||
case OpCvt32Fto32:
|
||||
return rewriteValuegeneric_OpCvt32Fto32(v)
|
||||
case OpCvt32Fto64:
|
||||
|
|
@ -4048,6 +4056,150 @@ func rewriteValuegeneric_OpConvert(v *Value) bool {
|
|||
}
|
||||
return false
|
||||
}
|
||||
func rewriteValuegeneric_OpCtz16(v *Value) bool {
|
||||
v_0 := v.Args[0]
|
||||
b := v.Block
|
||||
config := b.Func.Config
|
||||
// match: (Ctz16 (Const16 [c]))
|
||||
// cond: config.PtrSize == 4
|
||||
// result: (Const32 [ntz16(c)])
|
||||
for {
|
||||
if v_0.Op != OpConst16 {
|
||||
break
|
||||
}
|
||||
c := v_0.AuxInt
|
||||
if !(config.PtrSize == 4) {
|
||||
break
|
||||
}
|
||||
v.reset(OpConst32)
|
||||
v.AuxInt = ntz16(c)
|
||||
return true
|
||||
}
|
||||
// match: (Ctz16 (Const16 [c]))
|
||||
// cond: config.PtrSize == 8
|
||||
// result: (Const64 [ntz16(c)])
|
||||
for {
|
||||
if v_0.Op != OpConst16 {
|
||||
break
|
||||
}
|
||||
c := v_0.AuxInt
|
||||
if !(config.PtrSize == 8) {
|
||||
break
|
||||
}
|
||||
v.reset(OpConst64)
|
||||
v.AuxInt = ntz16(c)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
func rewriteValuegeneric_OpCtz32(v *Value) bool {
|
||||
v_0 := v.Args[0]
|
||||
b := v.Block
|
||||
config := b.Func.Config
|
||||
// match: (Ctz32 (Const32 [c]))
|
||||
// cond: config.PtrSize == 4
|
||||
// result: (Const32 [ntz32(c)])
|
||||
for {
|
||||
if v_0.Op != OpConst32 {
|
||||
break
|
||||
}
|
||||
c := v_0.AuxInt
|
||||
if !(config.PtrSize == 4) {
|
||||
break
|
||||
}
|
||||
v.reset(OpConst32)
|
||||
v.AuxInt = ntz32(c)
|
||||
return true
|
||||
}
|
||||
// match: (Ctz32 (Const32 [c]))
|
||||
// cond: config.PtrSize == 8
|
||||
// result: (Const64 [ntz32(c)])
|
||||
for {
|
||||
if v_0.Op != OpConst32 {
|
||||
break
|
||||
}
|
||||
c := v_0.AuxInt
|
||||
if !(config.PtrSize == 8) {
|
||||
break
|
||||
}
|
||||
v.reset(OpConst64)
|
||||
v.AuxInt = ntz32(c)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
func rewriteValuegeneric_OpCtz64(v *Value) bool {
|
||||
v_0 := v.Args[0]
|
||||
b := v.Block
|
||||
config := b.Func.Config
|
||||
// match: (Ctz64 (Const64 [c]))
|
||||
// cond: config.PtrSize == 4
|
||||
// result: (Const32 [ntz(c)])
|
||||
for {
|
||||
if v_0.Op != OpConst64 {
|
||||
break
|
||||
}
|
||||
c := v_0.AuxInt
|
||||
if !(config.PtrSize == 4) {
|
||||
break
|
||||
}
|
||||
v.reset(OpConst32)
|
||||
v.AuxInt = ntz(c)
|
||||
return true
|
||||
}
|
||||
// match: (Ctz64 (Const64 [c]))
|
||||
// cond: config.PtrSize == 8
|
||||
// result: (Const64 [ntz(c)])
|
||||
for {
|
||||
if v_0.Op != OpConst64 {
|
||||
break
|
||||
}
|
||||
c := v_0.AuxInt
|
||||
if !(config.PtrSize == 8) {
|
||||
break
|
||||
}
|
||||
v.reset(OpConst64)
|
||||
v.AuxInt = ntz(c)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
func rewriteValuegeneric_OpCtz8(v *Value) bool {
|
||||
v_0 := v.Args[0]
|
||||
b := v.Block
|
||||
config := b.Func.Config
|
||||
// match: (Ctz8 (Const8 [c]))
|
||||
// cond: config.PtrSize == 4
|
||||
// result: (Const32 [ntz8(c)])
|
||||
for {
|
||||
if v_0.Op != OpConst8 {
|
||||
break
|
||||
}
|
||||
c := v_0.AuxInt
|
||||
if !(config.PtrSize == 4) {
|
||||
break
|
||||
}
|
||||
v.reset(OpConst32)
|
||||
v.AuxInt = ntz8(c)
|
||||
return true
|
||||
}
|
||||
// match: (Ctz8 (Const8 [c]))
|
||||
// cond: config.PtrSize == 8
|
||||
// result: (Const64 [ntz8(c)])
|
||||
for {
|
||||
if v_0.Op != OpConst8 {
|
||||
break
|
||||
}
|
||||
c := v_0.AuxInt
|
||||
if !(config.PtrSize == 8) {
|
||||
break
|
||||
}
|
||||
v.reset(OpConst64)
|
||||
v.AuxInt = ntz8(c)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
func rewriteValuegeneric_OpCvt32Fto32(v *Value) bool {
|
||||
v_0 := v.Args[0]
|
||||
// match: (Cvt32Fto32 (Const32F [c]))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue