mirror of
https://github.com/golang/go.git
synced 2025-05-18 22:04:38 +00:00
Make sure that when a pointer value is live across a function call, we save it as a pointer. (And similarly a uintptr live across a function call should not be saved as a pointer.) Add a nasty test case. This is probably what is preventing the merge from master to dev.ssa. Signs point to something like this bug happening in mallocgc. Change-Id: Ib23fa1251b8d1c50d82c6a448cb4a4fc28219029 Reviewed-on: https://go-review.googlesource.com/16830 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
3970 lines
90 KiB
Go
3970 lines
90 KiB
Go
// autogenerated from gen/generic.rules: do not edit!
|
|
// generated with: cd gen; go run *.go
|
|
package ssa
|
|
|
|
import "math"
|
|
|
|
var _ = math.MinInt8 // in case not otherwise used
|
|
func rewriteValuegeneric(v *Value, config *Config) bool {
|
|
switch v.Op {
|
|
case OpAdd16:
|
|
return rewriteValuegeneric_OpAdd16(v, config)
|
|
case OpAdd32:
|
|
return rewriteValuegeneric_OpAdd32(v, config)
|
|
case OpAdd64:
|
|
return rewriteValuegeneric_OpAdd64(v, config)
|
|
case OpAdd8:
|
|
return rewriteValuegeneric_OpAdd8(v, config)
|
|
case OpAnd16:
|
|
return rewriteValuegeneric_OpAnd16(v, config)
|
|
case OpAnd32:
|
|
return rewriteValuegeneric_OpAnd32(v, config)
|
|
case OpAnd64:
|
|
return rewriteValuegeneric_OpAnd64(v, config)
|
|
case OpAnd8:
|
|
return rewriteValuegeneric_OpAnd8(v, config)
|
|
case OpArg:
|
|
return rewriteValuegeneric_OpArg(v, config)
|
|
case OpArrayIndex:
|
|
return rewriteValuegeneric_OpArrayIndex(v, config)
|
|
case OpCom16:
|
|
return rewriteValuegeneric_OpCom16(v, config)
|
|
case OpCom32:
|
|
return rewriteValuegeneric_OpCom32(v, config)
|
|
case OpCom64:
|
|
return rewriteValuegeneric_OpCom64(v, config)
|
|
case OpCom8:
|
|
return rewriteValuegeneric_OpCom8(v, config)
|
|
case OpComplexImag:
|
|
return rewriteValuegeneric_OpComplexImag(v, config)
|
|
case OpComplexReal:
|
|
return rewriteValuegeneric_OpComplexReal(v, config)
|
|
case OpConstInterface:
|
|
return rewriteValuegeneric_OpConstInterface(v, config)
|
|
case OpConstSlice:
|
|
return rewriteValuegeneric_OpConstSlice(v, config)
|
|
case OpConstString:
|
|
return rewriteValuegeneric_OpConstString(v, config)
|
|
case OpConvert:
|
|
return rewriteValuegeneric_OpConvert(v, config)
|
|
case OpEq16:
|
|
return rewriteValuegeneric_OpEq16(v, config)
|
|
case OpEq32:
|
|
return rewriteValuegeneric_OpEq32(v, config)
|
|
case OpEq64:
|
|
return rewriteValuegeneric_OpEq64(v, config)
|
|
case OpEq8:
|
|
return rewriteValuegeneric_OpEq8(v, config)
|
|
case OpEqInter:
|
|
return rewriteValuegeneric_OpEqInter(v, config)
|
|
case OpEqPtr:
|
|
return rewriteValuegeneric_OpEqPtr(v, config)
|
|
case OpEqSlice:
|
|
return rewriteValuegeneric_OpEqSlice(v, config)
|
|
case OpGeq16:
|
|
return rewriteValuegeneric_OpGeq16(v, config)
|
|
case OpGeq16U:
|
|
return rewriteValuegeneric_OpGeq16U(v, config)
|
|
case OpGeq32:
|
|
return rewriteValuegeneric_OpGeq32(v, config)
|
|
case OpGeq32U:
|
|
return rewriteValuegeneric_OpGeq32U(v, config)
|
|
case OpGeq64:
|
|
return rewriteValuegeneric_OpGeq64(v, config)
|
|
case OpGeq64U:
|
|
return rewriteValuegeneric_OpGeq64U(v, config)
|
|
case OpGeq8:
|
|
return rewriteValuegeneric_OpGeq8(v, config)
|
|
case OpGeq8U:
|
|
return rewriteValuegeneric_OpGeq8U(v, config)
|
|
case OpGreater16:
|
|
return rewriteValuegeneric_OpGreater16(v, config)
|
|
case OpGreater16U:
|
|
return rewriteValuegeneric_OpGreater16U(v, config)
|
|
case OpGreater32:
|
|
return rewriteValuegeneric_OpGreater32(v, config)
|
|
case OpGreater32U:
|
|
return rewriteValuegeneric_OpGreater32U(v, config)
|
|
case OpGreater64:
|
|
return rewriteValuegeneric_OpGreater64(v, config)
|
|
case OpGreater64U:
|
|
return rewriteValuegeneric_OpGreater64U(v, config)
|
|
case OpGreater8:
|
|
return rewriteValuegeneric_OpGreater8(v, config)
|
|
case OpGreater8U:
|
|
return rewriteValuegeneric_OpGreater8U(v, config)
|
|
case OpIData:
|
|
return rewriteValuegeneric_OpIData(v, config)
|
|
case OpITab:
|
|
return rewriteValuegeneric_OpITab(v, config)
|
|
case OpIsInBounds:
|
|
return rewriteValuegeneric_OpIsInBounds(v, config)
|
|
case OpIsSliceInBounds:
|
|
return rewriteValuegeneric_OpIsSliceInBounds(v, config)
|
|
case OpLeq16:
|
|
return rewriteValuegeneric_OpLeq16(v, config)
|
|
case OpLeq16U:
|
|
return rewriteValuegeneric_OpLeq16U(v, config)
|
|
case OpLeq32:
|
|
return rewriteValuegeneric_OpLeq32(v, config)
|
|
case OpLeq32U:
|
|
return rewriteValuegeneric_OpLeq32U(v, config)
|
|
case OpLeq64:
|
|
return rewriteValuegeneric_OpLeq64(v, config)
|
|
case OpLeq64U:
|
|
return rewriteValuegeneric_OpLeq64U(v, config)
|
|
case OpLeq8:
|
|
return rewriteValuegeneric_OpLeq8(v, config)
|
|
case OpLeq8U:
|
|
return rewriteValuegeneric_OpLeq8U(v, config)
|
|
case OpLess16:
|
|
return rewriteValuegeneric_OpLess16(v, config)
|
|
case OpLess16U:
|
|
return rewriteValuegeneric_OpLess16U(v, config)
|
|
case OpLess32:
|
|
return rewriteValuegeneric_OpLess32(v, config)
|
|
case OpLess32U:
|
|
return rewriteValuegeneric_OpLess32U(v, config)
|
|
case OpLess64:
|
|
return rewriteValuegeneric_OpLess64(v, config)
|
|
case OpLess64U:
|
|
return rewriteValuegeneric_OpLess64U(v, config)
|
|
case OpLess8:
|
|
return rewriteValuegeneric_OpLess8(v, config)
|
|
case OpLess8U:
|
|
return rewriteValuegeneric_OpLess8U(v, config)
|
|
case OpLoad:
|
|
return rewriteValuegeneric_OpLoad(v, config)
|
|
case OpMul16:
|
|
return rewriteValuegeneric_OpMul16(v, config)
|
|
case OpMul32:
|
|
return rewriteValuegeneric_OpMul32(v, config)
|
|
case OpMul64:
|
|
return rewriteValuegeneric_OpMul64(v, config)
|
|
case OpMul8:
|
|
return rewriteValuegeneric_OpMul8(v, config)
|
|
case OpNeq16:
|
|
return rewriteValuegeneric_OpNeq16(v, config)
|
|
case OpNeq32:
|
|
return rewriteValuegeneric_OpNeq32(v, config)
|
|
case OpNeq64:
|
|
return rewriteValuegeneric_OpNeq64(v, config)
|
|
case OpNeq8:
|
|
return rewriteValuegeneric_OpNeq8(v, config)
|
|
case OpNeqInter:
|
|
return rewriteValuegeneric_OpNeqInter(v, config)
|
|
case OpNeqPtr:
|
|
return rewriteValuegeneric_OpNeqPtr(v, config)
|
|
case OpNeqSlice:
|
|
return rewriteValuegeneric_OpNeqSlice(v, config)
|
|
case OpOr16:
|
|
return rewriteValuegeneric_OpOr16(v, config)
|
|
case OpOr32:
|
|
return rewriteValuegeneric_OpOr32(v, config)
|
|
case OpOr64:
|
|
return rewriteValuegeneric_OpOr64(v, config)
|
|
case OpOr8:
|
|
return rewriteValuegeneric_OpOr8(v, config)
|
|
case OpPtrIndex:
|
|
return rewriteValuegeneric_OpPtrIndex(v, config)
|
|
case OpSliceCap:
|
|
return rewriteValuegeneric_OpSliceCap(v, config)
|
|
case OpSliceLen:
|
|
return rewriteValuegeneric_OpSliceLen(v, config)
|
|
case OpSlicePtr:
|
|
return rewriteValuegeneric_OpSlicePtr(v, config)
|
|
case OpStore:
|
|
return rewriteValuegeneric_OpStore(v, config)
|
|
case OpStringLen:
|
|
return rewriteValuegeneric_OpStringLen(v, config)
|
|
case OpStringPtr:
|
|
return rewriteValuegeneric_OpStringPtr(v, config)
|
|
case OpStructSelect:
|
|
return rewriteValuegeneric_OpStructSelect(v, config)
|
|
case OpSub16:
|
|
return rewriteValuegeneric_OpSub16(v, config)
|
|
case OpSub32:
|
|
return rewriteValuegeneric_OpSub32(v, config)
|
|
case OpSub64:
|
|
return rewriteValuegeneric_OpSub64(v, config)
|
|
case OpSub8:
|
|
return rewriteValuegeneric_OpSub8(v, config)
|
|
case OpXor16:
|
|
return rewriteValuegeneric_OpXor16(v, config)
|
|
case OpXor32:
|
|
return rewriteValuegeneric_OpXor32(v, config)
|
|
case OpXor64:
|
|
return rewriteValuegeneric_OpXor64(v, config)
|
|
case OpXor8:
|
|
return rewriteValuegeneric_OpXor8(v, config)
|
|
}
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpAdd16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Add16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (Const16 [c+d])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end359c546ef662b7990116329cb30d6892
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end359c546ef662b7990116329cb30d6892
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst16
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c + d
|
|
return true
|
|
}
|
|
goto end359c546ef662b7990116329cb30d6892
|
|
end359c546ef662b7990116329cb30d6892:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpAdd32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Add32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (Const32 [c+d])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto enda3edaa9a512bd1d7a95f002c890bfb88
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto enda3edaa9a512bd1d7a95f002c890bfb88
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst32
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c + d
|
|
return true
|
|
}
|
|
goto enda3edaa9a512bd1d7a95f002c890bfb88
|
|
enda3edaa9a512bd1d7a95f002c890bfb88:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpAdd64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Add64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (Const64 [c+d])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end8c46df6f85a11cb1d594076b0e467908
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end8c46df6f85a11cb1d594076b0e467908
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst64
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c + d
|
|
return true
|
|
}
|
|
goto end8c46df6f85a11cb1d594076b0e467908
|
|
end8c46df6f85a11cb1d594076b0e467908:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpAdd8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Add8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (Const8 [c+d])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto end60c66721511a442aade8e4da2fb326bd
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto end60c66721511a442aade8e4da2fb326bd
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst8
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c + d
|
|
return true
|
|
}
|
|
goto end60c66721511a442aade8e4da2fb326bd
|
|
end60c66721511a442aade8e4da2fb326bd:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpAnd16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (And16 x x)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end69ed6ee2a4fb0491b56c17f3c1926b10
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end69ed6ee2a4fb0491b56c17f3c1926b10
|
|
end69ed6ee2a4fb0491b56c17f3c1926b10:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpAnd32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (And32 x x)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto endbbe8c3c5b2ca8f013aa178d856f3a99c
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto endbbe8c3c5b2ca8f013aa178d856f3a99c
|
|
endbbe8c3c5b2ca8f013aa178d856f3a99c:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpAnd64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (And64 x x)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto endc9736bf24d2e5cd8d662e1bcf3164640
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto endc9736bf24d2e5cd8d662e1bcf3164640
|
|
endc9736bf24d2e5cd8d662e1bcf3164640:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpAnd8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (And8 x x)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto endeaf127389bd0d4b0e0e297830f8f463b
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto endeaf127389bd0d4b0e0e297830f8f463b
|
|
endeaf127389bd0d4b0e0e297830f8f463b:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpArg(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Arg {n} [off])
|
|
// cond: v.Type.IsString()
|
|
// result: (StringMake (Arg <config.fe.TypeBytePtr()> {n} [off]) (Arg <config.fe.TypeInt()> {n} [off+config.PtrSize]))
|
|
{
|
|
n := v.Aux
|
|
off := v.AuxInt
|
|
if !(v.Type.IsString()) {
|
|
goto end939d3f946bf61eb85b46b374e7afa9e9
|
|
}
|
|
v.Op = OpStringMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v0.Aux = n
|
|
v0.AuxInt = off
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v1.Aux = n
|
|
v1.AuxInt = off + config.PtrSize
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end939d3f946bf61eb85b46b374e7afa9e9
|
|
end939d3f946bf61eb85b46b374e7afa9e9:
|
|
;
|
|
// match: (Arg {n} [off])
|
|
// cond: v.Type.IsSlice()
|
|
// result: (SliceMake (Arg <config.fe.TypeBytePtr()> {n} [off]) (Arg <config.fe.TypeInt()> {n} [off+config.PtrSize]) (Arg <config.fe.TypeInt()> {n} [off+2*config.PtrSize]))
|
|
{
|
|
n := v.Aux
|
|
off := v.AuxInt
|
|
if !(v.Type.IsSlice()) {
|
|
goto endab4b93ad3b1cf55e5bf25d1fd9cd498e
|
|
}
|
|
v.Op = OpSliceMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v0.Aux = n
|
|
v0.AuxInt = off
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v1.Aux = n
|
|
v1.AuxInt = off + config.PtrSize
|
|
v.AddArg(v1)
|
|
v2 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v2.Type = config.fe.TypeInt()
|
|
v2.Aux = n
|
|
v2.AuxInt = off + 2*config.PtrSize
|
|
v.AddArg(v2)
|
|
return true
|
|
}
|
|
goto endab4b93ad3b1cf55e5bf25d1fd9cd498e
|
|
endab4b93ad3b1cf55e5bf25d1fd9cd498e:
|
|
;
|
|
// match: (Arg {n} [off])
|
|
// cond: v.Type.IsInterface()
|
|
// result: (IMake (Arg <config.fe.TypeBytePtr()> {n} [off]) (Arg <config.fe.TypeBytePtr()> {n} [off+config.PtrSize]))
|
|
{
|
|
n := v.Aux
|
|
off := v.AuxInt
|
|
if !(v.Type.IsInterface()) {
|
|
goto end851de8e588a39e81b4e2aef06566bf3e
|
|
}
|
|
v.Op = OpIMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v0.Aux = n
|
|
v0.AuxInt = off
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v1.Type = config.fe.TypeBytePtr()
|
|
v1.Aux = n
|
|
v1.AuxInt = off + config.PtrSize
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end851de8e588a39e81b4e2aef06566bf3e
|
|
end851de8e588a39e81b4e2aef06566bf3e:
|
|
;
|
|
// match: (Arg {n} [off])
|
|
// cond: v.Type.IsComplex() && v.Type.Size() == 16
|
|
// result: (ComplexMake (Arg <config.fe.TypeFloat64()> {n} [off]) (Arg <config.fe.TypeFloat64()> {n} [off+8]))
|
|
{
|
|
n := v.Aux
|
|
off := v.AuxInt
|
|
if !(v.Type.IsComplex() && v.Type.Size() == 16) {
|
|
goto end0988fc6a62c810b2f4976cb6cf44387f
|
|
}
|
|
v.Op = OpComplexMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v0.Type = config.fe.TypeFloat64()
|
|
v0.Aux = n
|
|
v0.AuxInt = off
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v1.Type = config.fe.TypeFloat64()
|
|
v1.Aux = n
|
|
v1.AuxInt = off + 8
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end0988fc6a62c810b2f4976cb6cf44387f
|
|
end0988fc6a62c810b2f4976cb6cf44387f:
|
|
;
|
|
// match: (Arg {n} [off])
|
|
// cond: v.Type.IsComplex() && v.Type.Size() == 8
|
|
// result: (ComplexMake (Arg <config.fe.TypeFloat32()> {n} [off]) (Arg <config.fe.TypeFloat32()> {n} [off+4]))
|
|
{
|
|
n := v.Aux
|
|
off := v.AuxInt
|
|
if !(v.Type.IsComplex() && v.Type.Size() == 8) {
|
|
goto enda348e93e0036873dd7089a2939c22e3e
|
|
}
|
|
v.Op = OpComplexMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v0.Type = config.fe.TypeFloat32()
|
|
v0.Aux = n
|
|
v0.AuxInt = off
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpArg, TypeInvalid)
|
|
v1.Type = config.fe.TypeFloat32()
|
|
v1.Aux = n
|
|
v1.AuxInt = off + 4
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto enda348e93e0036873dd7089a2939c22e3e
|
|
enda348e93e0036873dd7089a2939c22e3e:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpArrayIndex(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (ArrayIndex (Load ptr mem) idx)
|
|
// cond: b == v.Args[0].Block
|
|
// result: (Load (PtrIndex <v.Type.PtrTo()> ptr idx) mem)
|
|
{
|
|
if v.Args[0].Op != OpLoad {
|
|
goto end68b373270d9d605c420497edefaa71df
|
|
}
|
|
ptr := v.Args[0].Args[0]
|
|
mem := v.Args[0].Args[1]
|
|
idx := v.Args[1]
|
|
if !(b == v.Args[0].Block) {
|
|
goto end68b373270d9d605c420497edefaa71df
|
|
}
|
|
v.Op = OpLoad
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpPtrIndex, TypeInvalid)
|
|
v0.Type = v.Type.PtrTo()
|
|
v0.AddArg(ptr)
|
|
v0.AddArg(idx)
|
|
v.AddArg(v0)
|
|
v.AddArg(mem)
|
|
return true
|
|
}
|
|
goto end68b373270d9d605c420497edefaa71df
|
|
end68b373270d9d605c420497edefaa71df:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpCom16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Com16 (Com16 x))
|
|
// cond:
|
|
// result: x
|
|
{
|
|
if v.Args[0].Op != OpCom16 {
|
|
goto end1ea17710dd4dd7ba4e710e0e4c7b5a56
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end1ea17710dd4dd7ba4e710e0e4c7b5a56
|
|
end1ea17710dd4dd7ba4e710e0e4c7b5a56:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpCom32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Com32 (Com32 x))
|
|
// cond:
|
|
// result: x
|
|
{
|
|
if v.Args[0].Op != OpCom32 {
|
|
goto end9a04ed536496e292c27bef4414128cbf
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end9a04ed536496e292c27bef4414128cbf
|
|
end9a04ed536496e292c27bef4414128cbf:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpCom64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Com64 (Com64 x))
|
|
// cond:
|
|
// result: x
|
|
{
|
|
if v.Args[0].Op != OpCom64 {
|
|
goto ended44e29d5968f0f7b86972b7bf417ab3
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto ended44e29d5968f0f7b86972b7bf417ab3
|
|
ended44e29d5968f0f7b86972b7bf417ab3:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpCom8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Com8 (Com8 x))
|
|
// cond:
|
|
// result: x
|
|
{
|
|
if v.Args[0].Op != OpCom8 {
|
|
goto end4d92ff3ba567d9afd38fc9ca113602ad
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end4d92ff3ba567d9afd38fc9ca113602ad
|
|
end4d92ff3ba567d9afd38fc9ca113602ad:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpComplexImag(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (ComplexImag (ComplexMake _ imag ))
|
|
// cond:
|
|
// result: imag
|
|
{
|
|
if v.Args[0].Op != OpComplexMake {
|
|
goto endec3009fd8727d03002021997936e091f
|
|
}
|
|
imag := v.Args[0].Args[1]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = imag.Type
|
|
v.AddArg(imag)
|
|
return true
|
|
}
|
|
goto endec3009fd8727d03002021997936e091f
|
|
endec3009fd8727d03002021997936e091f:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpComplexReal(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (ComplexReal (ComplexMake real _ ))
|
|
// cond:
|
|
// result: real
|
|
{
|
|
if v.Args[0].Op != OpComplexMake {
|
|
goto end8db3e16bd59af1adaa4b734c8adcc71d
|
|
}
|
|
real := v.Args[0].Args[0]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = real.Type
|
|
v.AddArg(real)
|
|
return true
|
|
}
|
|
goto end8db3e16bd59af1adaa4b734c8adcc71d
|
|
end8db3e16bd59af1adaa4b734c8adcc71d:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpConstInterface(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (ConstInterface)
|
|
// cond:
|
|
// result: (IMake (ConstNil <config.fe.TypeBytePtr()>) (ConstNil <config.fe.TypeBytePtr()>))
|
|
{
|
|
v.Op = OpIMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpConstNil, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpConstNil, TypeInvalid)
|
|
v1.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end0367bd8f20a320cc41568f2b28657f6b
|
|
end0367bd8f20a320cc41568f2b28657f6b:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpConstSlice(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (ConstSlice)
|
|
// cond: config.PtrSize == 4
|
|
// result: (SliceMake (ConstNil <config.fe.TypeBytePtr()>) (Const32 <config.fe.TypeInt()> [0]) (Const32 <config.fe.TypeInt()> [0]))
|
|
{
|
|
if !(config.PtrSize == 4) {
|
|
goto end9ba6baf9c7247b1f5ba4099c0c3910ce
|
|
}
|
|
v.Op = OpSliceMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpConstNil, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpConst32, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v1.AuxInt = 0
|
|
v.AddArg(v1)
|
|
v2 := b.NewValue0(v.Line, OpConst32, TypeInvalid)
|
|
v2.Type = config.fe.TypeInt()
|
|
v2.AuxInt = 0
|
|
v.AddArg(v2)
|
|
return true
|
|
}
|
|
goto end9ba6baf9c7247b1f5ba4099c0c3910ce
|
|
end9ba6baf9c7247b1f5ba4099c0c3910ce:
|
|
;
|
|
// match: (ConstSlice)
|
|
// cond: config.PtrSize == 8
|
|
// result: (SliceMake (ConstNil <config.fe.TypeBytePtr()>) (Const64 <config.fe.TypeInt()> [0]) (Const64 <config.fe.TypeInt()> [0]))
|
|
{
|
|
if !(config.PtrSize == 8) {
|
|
goto endabee2aa6bd3e3261628f677221ad2640
|
|
}
|
|
v.Op = OpSliceMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpConstNil, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpConst64, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v1.AuxInt = 0
|
|
v.AddArg(v1)
|
|
v2 := b.NewValue0(v.Line, OpConst64, TypeInvalid)
|
|
v2.Type = config.fe.TypeInt()
|
|
v2.AuxInt = 0
|
|
v.AddArg(v2)
|
|
return true
|
|
}
|
|
goto endabee2aa6bd3e3261628f677221ad2640
|
|
endabee2aa6bd3e3261628f677221ad2640:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpConstString(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (ConstString {s})
|
|
// cond: config.PtrSize == 4 && s.(string) == ""
|
|
// result: (StringMake (ConstNil) (Const32 <config.fe.TypeInt()> [0]))
|
|
{
|
|
s := v.Aux
|
|
if !(config.PtrSize == 4 && s.(string) == "") {
|
|
goto end85d5f388ba947643af63cdc68c1155a5
|
|
}
|
|
v.Op = OpStringMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpConstNil, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpConst32, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v1.AuxInt = 0
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end85d5f388ba947643af63cdc68c1155a5
|
|
end85d5f388ba947643af63cdc68c1155a5:
|
|
;
|
|
// match: (ConstString {s})
|
|
// cond: config.PtrSize == 8 && s.(string) == ""
|
|
// result: (StringMake (ConstNil) (Const64 <config.fe.TypeInt()> [0]))
|
|
{
|
|
s := v.Aux
|
|
if !(config.PtrSize == 8 && s.(string) == "") {
|
|
goto endc807259a5ed2760fbbd3dc7386641343
|
|
}
|
|
v.Op = OpStringMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpConstNil, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpConst64, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v1.AuxInt = 0
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto endc807259a5ed2760fbbd3dc7386641343
|
|
endc807259a5ed2760fbbd3dc7386641343:
|
|
;
|
|
// match: (ConstString {s})
|
|
// cond: config.PtrSize == 4 && s.(string) != ""
|
|
// result: (StringMake (Addr <config.fe.TypeBytePtr()> {config.fe.StringData(s.(string))} (SB)) (Const32 <config.fe.TypeInt()> [int64(len(s.(string)))]))
|
|
{
|
|
s := v.Aux
|
|
if !(config.PtrSize == 4 && s.(string) != "") {
|
|
goto end107a700a4519d18f418602421444ddb6
|
|
}
|
|
v.Op = OpStringMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpAddr, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v0.Aux = config.fe.StringData(s.(string))
|
|
v1 := b.NewValue0(v.Line, OpSB, TypeInvalid)
|
|
v1.Type = config.fe.TypeUintptr()
|
|
v0.AddArg(v1)
|
|
v.AddArg(v0)
|
|
v2 := b.NewValue0(v.Line, OpConst32, TypeInvalid)
|
|
v2.Type = config.fe.TypeInt()
|
|
v2.AuxInt = int64(len(s.(string)))
|
|
v.AddArg(v2)
|
|
return true
|
|
}
|
|
goto end107a700a4519d18f418602421444ddb6
|
|
end107a700a4519d18f418602421444ddb6:
|
|
;
|
|
// match: (ConstString {s})
|
|
// cond: config.PtrSize == 8 && s.(string) != ""
|
|
// result: (StringMake (Addr <config.fe.TypeBytePtr()> {config.fe.StringData(s.(string))} (SB)) (Const64 <config.fe.TypeInt()> [int64(len(s.(string)))]))
|
|
{
|
|
s := v.Aux
|
|
if !(config.PtrSize == 8 && s.(string) != "") {
|
|
goto end7ce9db29d17866f26d21e6e12f442e54
|
|
}
|
|
v.Op = OpStringMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpAddr, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v0.Aux = config.fe.StringData(s.(string))
|
|
v1 := b.NewValue0(v.Line, OpSB, TypeInvalid)
|
|
v1.Type = config.fe.TypeUintptr()
|
|
v0.AddArg(v1)
|
|
v.AddArg(v0)
|
|
v2 := b.NewValue0(v.Line, OpConst64, TypeInvalid)
|
|
v2.Type = config.fe.TypeInt()
|
|
v2.AuxInt = int64(len(s.(string)))
|
|
v.AddArg(v2)
|
|
return true
|
|
}
|
|
goto end7ce9db29d17866f26d21e6e12f442e54
|
|
end7ce9db29d17866f26d21e6e12f442e54:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpConvert(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Convert (Add64 (Convert ptr mem) off) mem)
|
|
// cond:
|
|
// result: (Add64 ptr off)
|
|
{
|
|
if v.Args[0].Op != OpAdd64 {
|
|
goto endbbc9f1666b4d39a130e1b86f109e7c1b
|
|
}
|
|
if v.Args[0].Args[0].Op != OpConvert {
|
|
goto endbbc9f1666b4d39a130e1b86f109e7c1b
|
|
}
|
|
ptr := v.Args[0].Args[0].Args[0]
|
|
mem := v.Args[0].Args[0].Args[1]
|
|
off := v.Args[0].Args[1]
|
|
if v.Args[1] != mem {
|
|
goto endbbc9f1666b4d39a130e1b86f109e7c1b
|
|
}
|
|
v.Op = OpAdd64
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AddArg(ptr)
|
|
v.AddArg(off)
|
|
return true
|
|
}
|
|
goto endbbc9f1666b4d39a130e1b86f109e7c1b
|
|
endbbc9f1666b4d39a130e1b86f109e7c1b:
|
|
;
|
|
// match: (Convert (Convert ptr mem) mem)
|
|
// cond:
|
|
// result: ptr
|
|
{
|
|
if v.Args[0].Op != OpConvert {
|
|
goto end98c5e0ca257eb216989171786f91b42d
|
|
}
|
|
ptr := v.Args[0].Args[0]
|
|
mem := v.Args[0].Args[1]
|
|
if v.Args[1] != mem {
|
|
goto end98c5e0ca257eb216989171786f91b42d
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = ptr.Type
|
|
v.AddArg(ptr)
|
|
return true
|
|
}
|
|
goto end98c5e0ca257eb216989171786f91b42d
|
|
end98c5e0ca257eb216989171786f91b42d:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpEq16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Eq16 x x)
|
|
// cond:
|
|
// result: (ConstBool [1])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end0c0fe5fdfba3821add3448fd3f1fc6b7
|
|
}
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 1
|
|
return true
|
|
}
|
|
goto end0c0fe5fdfba3821add3448fd3f1fc6b7
|
|
end0c0fe5fdfba3821add3448fd3f1fc6b7:
|
|
;
|
|
// match: (Eq16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int16(c) == int16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end4532e1d01c10d8906fe1da14f9dfaa88
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end4532e1d01c10d8906fe1da14f9dfaa88
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int16(c) == int16(d))
|
|
return true
|
|
}
|
|
goto end4532e1d01c10d8906fe1da14f9dfaa88
|
|
end4532e1d01c10d8906fe1da14f9dfaa88:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpEq32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Eq32 x x)
|
|
// cond:
|
|
// result: (ConstBool [1])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end6da547ec4ee93d787434f3bda873e4a0
|
|
}
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 1
|
|
return true
|
|
}
|
|
goto end6da547ec4ee93d787434f3bda873e4a0
|
|
end6da547ec4ee93d787434f3bda873e4a0:
|
|
;
|
|
// match: (Eq32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int32(c) == int32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end00a2464e02c9ca00e8d0077acacbb5ad
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end00a2464e02c9ca00e8d0077acacbb5ad
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int32(c) == int32(d))
|
|
return true
|
|
}
|
|
goto end00a2464e02c9ca00e8d0077acacbb5ad
|
|
end00a2464e02c9ca00e8d0077acacbb5ad:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpEq64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Eq64 x x)
|
|
// cond:
|
|
// result: (ConstBool [1])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto endb1d471cc503ba8bb05440f01dbf33d81
|
|
}
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 1
|
|
return true
|
|
}
|
|
goto endb1d471cc503ba8bb05440f01dbf33d81
|
|
endb1d471cc503ba8bb05440f01dbf33d81:
|
|
;
|
|
// match: (Eq64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int64(c) == int64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end405568a707dbbc86432e91f4ce7d97d7
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end405568a707dbbc86432e91f4ce7d97d7
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int64(c) == int64(d))
|
|
return true
|
|
}
|
|
goto end405568a707dbbc86432e91f4ce7d97d7
|
|
end405568a707dbbc86432e91f4ce7d97d7:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpEq8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Eq8 x x)
|
|
// cond:
|
|
// result: (ConstBool [1])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto enda66da0d3e7e51624ee46527727c48a9a
|
|
}
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 1
|
|
return true
|
|
}
|
|
goto enda66da0d3e7e51624ee46527727c48a9a
|
|
enda66da0d3e7e51624ee46527727c48a9a:
|
|
;
|
|
// match: (Eq8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int8(c) == int8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto endd49f3700ba2d1e500d3ab4fa34fd090d
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto endd49f3700ba2d1e500d3ab4fa34fd090d
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int8(c) == int8(d))
|
|
return true
|
|
}
|
|
goto endd49f3700ba2d1e500d3ab4fa34fd090d
|
|
endd49f3700ba2d1e500d3ab4fa34fd090d:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpEqInter(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (EqInter x y)
|
|
// cond:
|
|
// result: (EqPtr (ITab x) (ITab y))
|
|
{
|
|
x := v.Args[0]
|
|
y := v.Args[1]
|
|
v.Op = OpEqPtr
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpITab, TypeInvalid)
|
|
v0.AddArg(x)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpITab, TypeInvalid)
|
|
v1.AddArg(y)
|
|
v1.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end1cc40483caab33ece971ab7e6c8fdfca
|
|
end1cc40483caab33ece971ab7e6c8fdfca:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpEqPtr(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (EqPtr p (ConstNil))
|
|
// cond:
|
|
// result: (Not (IsNonNil p))
|
|
{
|
|
p := v.Args[0]
|
|
if v.Args[1].Op != OpConstNil {
|
|
goto ende701cdb6a2c1fff4d4b283b7f8f6178b
|
|
}
|
|
v.Op = OpNot
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpIsNonNil, TypeInvalid)
|
|
v0.AddArg(p)
|
|
v0.Type = config.fe.TypeBool()
|
|
v.AddArg(v0)
|
|
return true
|
|
}
|
|
goto ende701cdb6a2c1fff4d4b283b7f8f6178b
|
|
ende701cdb6a2c1fff4d4b283b7f8f6178b:
|
|
;
|
|
// match: (EqPtr (ConstNil) p)
|
|
// cond:
|
|
// result: (Not (IsNonNil p))
|
|
{
|
|
if v.Args[0].Op != OpConstNil {
|
|
goto end7cdc0d5c38fbffe6287c8928803b038e
|
|
}
|
|
p := v.Args[1]
|
|
v.Op = OpNot
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpIsNonNil, TypeInvalid)
|
|
v0.AddArg(p)
|
|
v0.Type = config.fe.TypeBool()
|
|
v.AddArg(v0)
|
|
return true
|
|
}
|
|
goto end7cdc0d5c38fbffe6287c8928803b038e
|
|
end7cdc0d5c38fbffe6287c8928803b038e:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpEqSlice(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (EqSlice x y)
|
|
// cond:
|
|
// result: (EqPtr (SlicePtr x) (SlicePtr y))
|
|
{
|
|
x := v.Args[0]
|
|
y := v.Args[1]
|
|
v.Op = OpEqPtr
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpSlicePtr, TypeInvalid)
|
|
v0.AddArg(x)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpSlicePtr, TypeInvalid)
|
|
v1.AddArg(y)
|
|
v1.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end9cd53ca57ee90aa09c54f8071c8e8769
|
|
end9cd53ca57ee90aa09c54f8071c8e8769:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGeq16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Geq16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int16(c) >= int16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto endbac100e9f1065e7d2ff863951f686f4b
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto endbac100e9f1065e7d2ff863951f686f4b
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int16(c) >= int16(d))
|
|
return true
|
|
}
|
|
goto endbac100e9f1065e7d2ff863951f686f4b
|
|
endbac100e9f1065e7d2ff863951f686f4b:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGeq16U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Geq16U (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint16(c) >= uint16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end11c6acbc5827fc9508424b0ffcf98b34
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end11c6acbc5827fc9508424b0ffcf98b34
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint16(c) >= uint16(d))
|
|
return true
|
|
}
|
|
goto end11c6acbc5827fc9508424b0ffcf98b34
|
|
end11c6acbc5827fc9508424b0ffcf98b34:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGeq32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Geq32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int32(c) >= int32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end89ced97524ac75045911ca7cf6d44b28
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end89ced97524ac75045911ca7cf6d44b28
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int32(c) >= int32(d))
|
|
return true
|
|
}
|
|
goto end89ced97524ac75045911ca7cf6d44b28
|
|
end89ced97524ac75045911ca7cf6d44b28:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGeq32U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Geq32U (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint32(c) >= uint32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end92fbe85c7bbbf0db287932822bdde991
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end92fbe85c7bbbf0db287932822bdde991
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint32(c) >= uint32(d))
|
|
return true
|
|
}
|
|
goto end92fbe85c7bbbf0db287932822bdde991
|
|
end92fbe85c7bbbf0db287932822bdde991:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGeq64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Geq64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int64(c) >= int64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end08a5a4bff12a346befe05ad561b080ac
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end08a5a4bff12a346befe05ad561b080ac
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int64(c) >= int64(d))
|
|
return true
|
|
}
|
|
goto end08a5a4bff12a346befe05ad561b080ac
|
|
end08a5a4bff12a346befe05ad561b080ac:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGeq64U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Geq64U (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint64(c) >= uint64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto endd72c497b6cc2b01d43a39ec12d5010b3
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto endd72c497b6cc2b01d43a39ec12d5010b3
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint64(c) >= uint64(d))
|
|
return true
|
|
}
|
|
goto endd72c497b6cc2b01d43a39ec12d5010b3
|
|
endd72c497b6cc2b01d43a39ec12d5010b3:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGeq8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Geq8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int8(c) >= int8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto endea141068e84038c63cbdd87a8cb227d7
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto endea141068e84038c63cbdd87a8cb227d7
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int8(c) >= int8(d))
|
|
return true
|
|
}
|
|
goto endea141068e84038c63cbdd87a8cb227d7
|
|
endea141068e84038c63cbdd87a8cb227d7:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGeq8U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Geq8U (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint8(c) >= uint8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto end47c128ccdc54151a243c5856b0c52ef1
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto end47c128ccdc54151a243c5856b0c52ef1
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint8(c) >= uint8(d))
|
|
return true
|
|
}
|
|
goto end47c128ccdc54151a243c5856b0c52ef1
|
|
end47c128ccdc54151a243c5856b0c52ef1:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGreater16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Greater16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int16(c) > int16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end390bae49463ace4d703dd24e18920f66
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end390bae49463ace4d703dd24e18920f66
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int16(c) > int16(d))
|
|
return true
|
|
}
|
|
goto end390bae49463ace4d703dd24e18920f66
|
|
end390bae49463ace4d703dd24e18920f66:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGreater16U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Greater16U (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint16(c) > uint16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end89ba3caf5c156fa6d908ac04c058187b
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end89ba3caf5c156fa6d908ac04c058187b
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint16(c) > uint16(d))
|
|
return true
|
|
}
|
|
goto end89ba3caf5c156fa6d908ac04c058187b
|
|
end89ba3caf5c156fa6d908ac04c058187b:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGreater32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Greater32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int32(c) > int32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end86482a9dc6439e8470da5352dd74d68d
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end86482a9dc6439e8470da5352dd74d68d
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int32(c) > int32(d))
|
|
return true
|
|
}
|
|
goto end86482a9dc6439e8470da5352dd74d68d
|
|
end86482a9dc6439e8470da5352dd74d68d:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGreater32U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Greater32U (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint32(c) > uint32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end1bf3f05c1e3599a969b8be1f5f6949e4
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end1bf3f05c1e3599a969b8be1f5f6949e4
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint32(c) > uint32(d))
|
|
return true
|
|
}
|
|
goto end1bf3f05c1e3599a969b8be1f5f6949e4
|
|
end1bf3f05c1e3599a969b8be1f5f6949e4:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGreater64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Greater64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int64(c) > int64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end96a82e893fda4882f23b6bab5f7fbff7
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end96a82e893fda4882f23b6bab5f7fbff7
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int64(c) > int64(d))
|
|
return true
|
|
}
|
|
goto end96a82e893fda4882f23b6bab5f7fbff7
|
|
end96a82e893fda4882f23b6bab5f7fbff7:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGreater64U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Greater64U (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint64(c) > uint64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end2d8f5ad85fbffeb92af985a888f6fa69
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end2d8f5ad85fbffeb92af985a888f6fa69
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint64(c) > uint64(d))
|
|
return true
|
|
}
|
|
goto end2d8f5ad85fbffeb92af985a888f6fa69
|
|
end2d8f5ad85fbffeb92af985a888f6fa69:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGreater8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Greater8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int8(c) > int8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto ende221967c7516b7749109cf8343fe9c83
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto ende221967c7516b7749109cf8343fe9c83
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int8(c) > int8(d))
|
|
return true
|
|
}
|
|
goto ende221967c7516b7749109cf8343fe9c83
|
|
ende221967c7516b7749109cf8343fe9c83:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpGreater8U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Greater8U (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint8(c) > uint8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto enda9398c8188156dd46689fa2939147525
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto enda9398c8188156dd46689fa2939147525
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint8(c) > uint8(d))
|
|
return true
|
|
}
|
|
goto enda9398c8188156dd46689fa2939147525
|
|
enda9398c8188156dd46689fa2939147525:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpIData(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (IData (IMake _ data))
|
|
// cond:
|
|
// result: data
|
|
{
|
|
if v.Args[0].Op != OpIMake {
|
|
goto endbfa1bb944cdc07933effb16a35152e12
|
|
}
|
|
data := v.Args[0].Args[1]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = data.Type
|
|
v.AddArg(data)
|
|
return true
|
|
}
|
|
goto endbfa1bb944cdc07933effb16a35152e12
|
|
endbfa1bb944cdc07933effb16a35152e12:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpITab(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (ITab (IMake itab _))
|
|
// cond:
|
|
// result: itab
|
|
{
|
|
if v.Args[0].Op != OpIMake {
|
|
goto endfcbb9414a776ff9c8512da3e0f4d8fbd
|
|
}
|
|
itab := v.Args[0].Args[0]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = itab.Type
|
|
v.AddArg(itab)
|
|
return true
|
|
}
|
|
goto endfcbb9414a776ff9c8512da3e0f4d8fbd
|
|
endfcbb9414a776ff9c8512da3e0f4d8fbd:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpIsInBounds(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (IsInBounds (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(inBounds32(c,d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto endf0a2ecfe84b293de6ff0919e45d19d9d
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto endf0a2ecfe84b293de6ff0919e45d19d9d
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(inBounds32(c, d))
|
|
return true
|
|
}
|
|
goto endf0a2ecfe84b293de6ff0919e45d19d9d
|
|
endf0a2ecfe84b293de6ff0919e45d19d9d:
|
|
;
|
|
// match: (IsInBounds (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(inBounds64(c,d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end4b406f402c135f50f71effcc904ecb2b
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end4b406f402c135f50f71effcc904ecb2b
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(inBounds64(c, d))
|
|
return true
|
|
}
|
|
goto end4b406f402c135f50f71effcc904ecb2b
|
|
end4b406f402c135f50f71effcc904ecb2b:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpIsSliceInBounds(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (IsSliceInBounds (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(sliceInBounds32(c,d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end5e84a230c28cac987437cfed8f432cc3
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end5e84a230c28cac987437cfed8f432cc3
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(sliceInBounds32(c, d))
|
|
return true
|
|
}
|
|
goto end5e84a230c28cac987437cfed8f432cc3
|
|
end5e84a230c28cac987437cfed8f432cc3:
|
|
;
|
|
// match: (IsSliceInBounds (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(sliceInBounds64(c,d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end3880a6fe20ad4152e98f76d84da233a7
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end3880a6fe20ad4152e98f76d84da233a7
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(sliceInBounds64(c, d))
|
|
return true
|
|
}
|
|
goto end3880a6fe20ad4152e98f76d84da233a7
|
|
end3880a6fe20ad4152e98f76d84da233a7:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLeq16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Leq16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int16(c) <= int16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end76b1c51f9b7cd7ee2f75b9f7057569de
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end76b1c51f9b7cd7ee2f75b9f7057569de
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int16(c) <= int16(d))
|
|
return true
|
|
}
|
|
goto end76b1c51f9b7cd7ee2f75b9f7057569de
|
|
end76b1c51f9b7cd7ee2f75b9f7057569de:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLeq16U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Leq16U (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint16(c) <= uint16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto endf010fdf7f2c438ec18c33f493dd062aa
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto endf010fdf7f2c438ec18c33f493dd062aa
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint16(c) <= uint16(d))
|
|
return true
|
|
}
|
|
goto endf010fdf7f2c438ec18c33f493dd062aa
|
|
endf010fdf7f2c438ec18c33f493dd062aa:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLeq32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Leq32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int32(c) <= int32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end6c7d61cfd188680bea8a5e23f08ca1de
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end6c7d61cfd188680bea8a5e23f08ca1de
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int32(c) <= int32(d))
|
|
return true
|
|
}
|
|
goto end6c7d61cfd188680bea8a5e23f08ca1de
|
|
end6c7d61cfd188680bea8a5e23f08ca1de:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLeq32U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Leq32U (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint32(c) <= uint32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end4363555333511ee9b649b36f1a0ba34e
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end4363555333511ee9b649b36f1a0ba34e
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint32(c) <= uint32(d))
|
|
return true
|
|
}
|
|
goto end4363555333511ee9b649b36f1a0ba34e
|
|
end4363555333511ee9b649b36f1a0ba34e:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLeq64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Leq64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int64(c) <= int64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto enddc865cd7ac2093abc7617bedbf371c22
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto enddc865cd7ac2093abc7617bedbf371c22
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int64(c) <= int64(d))
|
|
return true
|
|
}
|
|
goto enddc865cd7ac2093abc7617bedbf371c22
|
|
enddc865cd7ac2093abc7617bedbf371c22:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLeq64U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Leq64U (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint64(c) <= uint64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end412eadb168738ba92f3f0705d4495305
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end412eadb168738ba92f3f0705d4495305
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint64(c) <= uint64(d))
|
|
return true
|
|
}
|
|
goto end412eadb168738ba92f3f0705d4495305
|
|
end412eadb168738ba92f3f0705d4495305:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLeq8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Leq8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int8(c) <= int8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto endb5a459da8e18c40abc0c7a20e71d0187
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto endb5a459da8e18c40abc0c7a20e71d0187
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int8(c) <= int8(d))
|
|
return true
|
|
}
|
|
goto endb5a459da8e18c40abc0c7a20e71d0187
|
|
endb5a459da8e18c40abc0c7a20e71d0187:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLeq8U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Leq8U (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint8(c) <= uint8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto endd6622d55fcdf3fa7b08e7511cd3b7d85
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto endd6622d55fcdf3fa7b08e7511cd3b7d85
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint8(c) <= uint8(d))
|
|
return true
|
|
}
|
|
goto endd6622d55fcdf3fa7b08e7511cd3b7d85
|
|
endd6622d55fcdf3fa7b08e7511cd3b7d85:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLess16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Less16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int16(c) < int16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end0dc915d089f05e79589ebb5c498cc360
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end0dc915d089f05e79589ebb5c498cc360
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int16(c) < int16(d))
|
|
return true
|
|
}
|
|
goto end0dc915d089f05e79589ebb5c498cc360
|
|
end0dc915d089f05e79589ebb5c498cc360:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLess16U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Less16U (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint16(c) < uint16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto endd2bb8249443788690946fc184631a00a
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto endd2bb8249443788690946fc184631a00a
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint16(c) < uint16(d))
|
|
return true
|
|
}
|
|
goto endd2bb8249443788690946fc184631a00a
|
|
endd2bb8249443788690946fc184631a00a:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLess32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Less32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int32(c) < int32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto endc86f65e499688809d414f03539bec5bf
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto endc86f65e499688809d414f03539bec5bf
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int32(c) < int32(d))
|
|
return true
|
|
}
|
|
goto endc86f65e499688809d414f03539bec5bf
|
|
endc86f65e499688809d414f03539bec5bf:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLess32U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Less32U (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint32(c) < uint32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end2cc68b5247b1afb90a9d3923b28ff247
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end2cc68b5247b1afb90a9d3923b28ff247
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint32(c) < uint32(d))
|
|
return true
|
|
}
|
|
goto end2cc68b5247b1afb90a9d3923b28ff247
|
|
end2cc68b5247b1afb90a9d3923b28ff247:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLess64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Less64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int64(c) < int64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end505de73cd15125dbb59b05d8975d3128
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end505de73cd15125dbb59b05d8975d3128
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int64(c) < int64(d))
|
|
return true
|
|
}
|
|
goto end505de73cd15125dbb59b05d8975d3128
|
|
end505de73cd15125dbb59b05d8975d3128:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLess64U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Less64U (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint64(c) < uint64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto endeb249ef36416cd1abf4f807026c059cd
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto endeb249ef36416cd1abf4f807026c059cd
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint64(c) < uint64(d))
|
|
return true
|
|
}
|
|
goto endeb249ef36416cd1abf4f807026c059cd
|
|
endeb249ef36416cd1abf4f807026c059cd:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLess8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Less8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int8(c) < int8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto endef134de03bc8537ac1f38d5eccff7673
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto endef134de03bc8537ac1f38d5eccff7673
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int8(c) < int8(d))
|
|
return true
|
|
}
|
|
goto endef134de03bc8537ac1f38d5eccff7673
|
|
endef134de03bc8537ac1f38d5eccff7673:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLess8U(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Less8U (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(uint8(c) < uint8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto end263ecdc279924bff8771dd1ac3f42222
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto end263ecdc279924bff8771dd1ac3f42222
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(uint8(c) < uint8(d))
|
|
return true
|
|
}
|
|
goto end263ecdc279924bff8771dd1ac3f42222
|
|
end263ecdc279924bff8771dd1ac3f42222:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpLoad(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Load <t> ptr mem)
|
|
// cond: t.IsComplex() && t.Size() == 8
|
|
// result: (ComplexMake (Load <config.fe.TypeFloat32()> ptr mem) (Load <config.fe.TypeFloat32()> (OffPtr <config.fe.TypeFloat32().PtrTo()> [4] ptr) mem) )
|
|
{
|
|
t := v.Type
|
|
ptr := v.Args[0]
|
|
mem := v.Args[1]
|
|
if !(t.IsComplex() && t.Size() == 8) {
|
|
goto end665854b31b828893d90b36bb462ff381
|
|
}
|
|
v.Op = OpComplexMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v0.Type = config.fe.TypeFloat32()
|
|
v0.AddArg(ptr)
|
|
v0.AddArg(mem)
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v1.Type = config.fe.TypeFloat32()
|
|
v2 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v2.Type = config.fe.TypeFloat32().PtrTo()
|
|
v2.AuxInt = 4
|
|
v2.AddArg(ptr)
|
|
v1.AddArg(v2)
|
|
v1.AddArg(mem)
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end665854b31b828893d90b36bb462ff381
|
|
end665854b31b828893d90b36bb462ff381:
|
|
;
|
|
// match: (Load <t> ptr mem)
|
|
// cond: t.IsComplex() && t.Size() == 16
|
|
// result: (ComplexMake (Load <config.fe.TypeFloat64()> ptr mem) (Load <config.fe.TypeFloat64()> (OffPtr <config.fe.TypeFloat64().PtrTo()> [8] ptr) mem) )
|
|
{
|
|
t := v.Type
|
|
ptr := v.Args[0]
|
|
mem := v.Args[1]
|
|
if !(t.IsComplex() && t.Size() == 16) {
|
|
goto end1b106f89e0e3e26c613b957a7c98d8ad
|
|
}
|
|
v.Op = OpComplexMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v0.Type = config.fe.TypeFloat64()
|
|
v0.AddArg(ptr)
|
|
v0.AddArg(mem)
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v1.Type = config.fe.TypeFloat64()
|
|
v2 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v2.Type = config.fe.TypeFloat64().PtrTo()
|
|
v2.AuxInt = 8
|
|
v2.AddArg(ptr)
|
|
v1.AddArg(v2)
|
|
v1.AddArg(mem)
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end1b106f89e0e3e26c613b957a7c98d8ad
|
|
end1b106f89e0e3e26c613b957a7c98d8ad:
|
|
;
|
|
// match: (Load <t> ptr mem)
|
|
// cond: t.IsString()
|
|
// result: (StringMake (Load <config.fe.TypeBytePtr()> ptr mem) (Load <config.fe.TypeInt()> (OffPtr <config.fe.TypeInt().PtrTo()> [config.PtrSize] ptr) mem))
|
|
{
|
|
t := v.Type
|
|
ptr := v.Args[0]
|
|
mem := v.Args[1]
|
|
if !(t.IsString()) {
|
|
goto enddd15a6f3d53a6ce7a19d4e181dd1c13a
|
|
}
|
|
v.Op = OpStringMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v0.AddArg(ptr)
|
|
v0.AddArg(mem)
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v2 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v2.Type = config.fe.TypeInt().PtrTo()
|
|
v2.AuxInt = config.PtrSize
|
|
v2.AddArg(ptr)
|
|
v1.AddArg(v2)
|
|
v1.AddArg(mem)
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto enddd15a6f3d53a6ce7a19d4e181dd1c13a
|
|
enddd15a6f3d53a6ce7a19d4e181dd1c13a:
|
|
;
|
|
// match: (Load <t> ptr mem)
|
|
// cond: t.IsSlice()
|
|
// result: (SliceMake (Load <config.fe.TypeBytePtr()> ptr mem) (Load <config.fe.TypeInt()> (OffPtr <config.fe.TypeInt().PtrTo()> [config.PtrSize] ptr) mem) (Load <config.fe.TypeInt()> (OffPtr <config.fe.TypeInt().PtrTo()> [2*config.PtrSize] ptr) mem))
|
|
{
|
|
t := v.Type
|
|
ptr := v.Args[0]
|
|
mem := v.Args[1]
|
|
if !(t.IsSlice()) {
|
|
goto end65e8b0055aa7491b9b6066d9fe1b2c13
|
|
}
|
|
v.Op = OpSliceMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v0.AddArg(ptr)
|
|
v0.AddArg(mem)
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v2 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v2.Type = config.fe.TypeInt().PtrTo()
|
|
v2.AuxInt = config.PtrSize
|
|
v2.AddArg(ptr)
|
|
v1.AddArg(v2)
|
|
v1.AddArg(mem)
|
|
v.AddArg(v1)
|
|
v3 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v3.Type = config.fe.TypeInt()
|
|
v4 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v4.Type = config.fe.TypeInt().PtrTo()
|
|
v4.AuxInt = 2 * config.PtrSize
|
|
v4.AddArg(ptr)
|
|
v3.AddArg(v4)
|
|
v3.AddArg(mem)
|
|
v.AddArg(v3)
|
|
return true
|
|
}
|
|
goto end65e8b0055aa7491b9b6066d9fe1b2c13
|
|
end65e8b0055aa7491b9b6066d9fe1b2c13:
|
|
;
|
|
// match: (Load <t> ptr mem)
|
|
// cond: t.IsInterface()
|
|
// result: (IMake (Load <config.fe.TypeBytePtr()> ptr mem) (Load <config.fe.TypeBytePtr()> (OffPtr <config.fe.TypeBytePtr().PtrTo()> [config.PtrSize] ptr) mem))
|
|
{
|
|
t := v.Type
|
|
ptr := v.Args[0]
|
|
mem := v.Args[1]
|
|
if !(t.IsInterface()) {
|
|
goto end12671c83ebe3ccbc8e53383765ee7675
|
|
}
|
|
v.Op = OpIMake
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v0.AddArg(ptr)
|
|
v0.AddArg(mem)
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v1.Type = config.fe.TypeBytePtr()
|
|
v2 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v2.Type = config.fe.TypeBytePtr().PtrTo()
|
|
v2.AuxInt = config.PtrSize
|
|
v2.AddArg(ptr)
|
|
v1.AddArg(v2)
|
|
v1.AddArg(mem)
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end12671c83ebe3ccbc8e53383765ee7675
|
|
end12671c83ebe3ccbc8e53383765ee7675:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpMul16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Mul16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (Const16 [c*d])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto ende8dd468add3015aea24531cf3c89ccb7
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto ende8dd468add3015aea24531cf3c89ccb7
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst16
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c * d
|
|
return true
|
|
}
|
|
goto ende8dd468add3015aea24531cf3c89ccb7
|
|
ende8dd468add3015aea24531cf3c89ccb7:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpMul32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Mul32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (Const32 [c*d])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end60b4523099fa7b55e2e872e05bd497a7
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end60b4523099fa7b55e2e872e05bd497a7
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst32
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c * d
|
|
return true
|
|
}
|
|
goto end60b4523099fa7b55e2e872e05bd497a7
|
|
end60b4523099fa7b55e2e872e05bd497a7:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpMul64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Mul64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (Const64 [c*d])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end7aea1048b5d1230974b97f17238380ae
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end7aea1048b5d1230974b97f17238380ae
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst64
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c * d
|
|
return true
|
|
}
|
|
goto end7aea1048b5d1230974b97f17238380ae
|
|
end7aea1048b5d1230974b97f17238380ae:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpMul8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Mul8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (Const8 [c*d])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto end2f1952fd654c4a62ff00511041728809
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto end2f1952fd654c4a62ff00511041728809
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst8
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c * d
|
|
return true
|
|
}
|
|
goto end2f1952fd654c4a62ff00511041728809
|
|
end2f1952fd654c4a62ff00511041728809:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpNeq16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Neq16 x x)
|
|
// cond:
|
|
// result: (ConstBool [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto ende76a50b524aeb16c7aeccf5f5cc60c06
|
|
}
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto ende76a50b524aeb16c7aeccf5f5cc60c06
|
|
ende76a50b524aeb16c7aeccf5f5cc60c06:
|
|
;
|
|
// match: (Neq16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int16(c) != int16(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end6302c9b645bb191982d28c2f846904d6
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end6302c9b645bb191982d28c2f846904d6
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int16(c) != int16(d))
|
|
return true
|
|
}
|
|
goto end6302c9b645bb191982d28c2f846904d6
|
|
end6302c9b645bb191982d28c2f846904d6:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpNeq32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Neq32 x x)
|
|
// cond:
|
|
// result: (ConstBool [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end3713a608cffd29b40ff7c3b3f2585cbb
|
|
}
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end3713a608cffd29b40ff7c3b3f2585cbb
|
|
end3713a608cffd29b40ff7c3b3f2585cbb:
|
|
;
|
|
// match: (Neq32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int32(c) != int32(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto endf9f3d0814854d2d0879d331e9bdfcae2
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto endf9f3d0814854d2d0879d331e9bdfcae2
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int32(c) != int32(d))
|
|
return true
|
|
}
|
|
goto endf9f3d0814854d2d0879d331e9bdfcae2
|
|
endf9f3d0814854d2d0879d331e9bdfcae2:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpNeq64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Neq64 x x)
|
|
// cond:
|
|
// result: (ConstBool [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end3601ad382705ea12b79d2008c1e5725c
|
|
}
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end3601ad382705ea12b79d2008c1e5725c
|
|
end3601ad382705ea12b79d2008c1e5725c:
|
|
;
|
|
// match: (Neq64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int64(c) != int64(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto endf07433ecd3c150b1b75e943aa44a7203
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto endf07433ecd3c150b1b75e943aa44a7203
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int64(c) != int64(d))
|
|
return true
|
|
}
|
|
goto endf07433ecd3c150b1b75e943aa44a7203
|
|
endf07433ecd3c150b1b75e943aa44a7203:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpNeq8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Neq8 x x)
|
|
// cond:
|
|
// result: (ConstBool [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end09a0deaf3c42627d0d2d3efa96e30745
|
|
}
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end09a0deaf3c42627d0d2d3efa96e30745
|
|
end09a0deaf3c42627d0d2d3efa96e30745:
|
|
;
|
|
// match: (Neq8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (ConstBool [b2i(int8(c) != int8(d))])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto end72ebdaf2de9b3aa57cf0cb8e068b5f9c
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto end72ebdaf2de9b3aa57cf0cb8e068b5f9c
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConstBool
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = b2i(int8(c) != int8(d))
|
|
return true
|
|
}
|
|
goto end72ebdaf2de9b3aa57cf0cb8e068b5f9c
|
|
end72ebdaf2de9b3aa57cf0cb8e068b5f9c:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpNeqInter(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (NeqInter x y)
|
|
// cond:
|
|
// result: (NeqPtr (ITab x) (ITab y))
|
|
{
|
|
x := v.Args[0]
|
|
y := v.Args[1]
|
|
v.Op = OpNeqPtr
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpITab, TypeInvalid)
|
|
v0.AddArg(x)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpITab, TypeInvalid)
|
|
v1.AddArg(y)
|
|
v1.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end17b2333bf57e9fe81a671be02f9c4c14
|
|
end17b2333bf57e9fe81a671be02f9c4c14:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpNeqPtr(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (NeqPtr p (ConstNil))
|
|
// cond:
|
|
// result: (IsNonNil p)
|
|
{
|
|
p := v.Args[0]
|
|
if v.Args[1].Op != OpConstNil {
|
|
goto endba798520b4d41172b110347158c44791
|
|
}
|
|
v.Op = OpIsNonNil
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AddArg(p)
|
|
return true
|
|
}
|
|
goto endba798520b4d41172b110347158c44791
|
|
endba798520b4d41172b110347158c44791:
|
|
;
|
|
// match: (NeqPtr (ConstNil) p)
|
|
// cond:
|
|
// result: (IsNonNil p)
|
|
{
|
|
if v.Args[0].Op != OpConstNil {
|
|
goto enddd95e9c3606d9fd48034f1a703561e45
|
|
}
|
|
p := v.Args[1]
|
|
v.Op = OpIsNonNil
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AddArg(p)
|
|
return true
|
|
}
|
|
goto enddd95e9c3606d9fd48034f1a703561e45
|
|
enddd95e9c3606d9fd48034f1a703561e45:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpNeqSlice(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (NeqSlice x y)
|
|
// cond:
|
|
// result: (NeqPtr (SlicePtr x) (SlicePtr y))
|
|
{
|
|
x := v.Args[0]
|
|
y := v.Args[1]
|
|
v.Op = OpNeqPtr
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v0 := b.NewValue0(v.Line, OpSlicePtr, TypeInvalid)
|
|
v0.AddArg(x)
|
|
v0.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v0)
|
|
v1 := b.NewValue0(v.Line, OpSlicePtr, TypeInvalid)
|
|
v1.AddArg(y)
|
|
v1.Type = config.fe.TypeBytePtr()
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto endc6bc83c506e491236ca66ea1081231a2
|
|
endc6bc83c506e491236ca66ea1081231a2:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpOr16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Or16 x x)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end47a2f25fd31a76807aced3e2b126acdc
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end47a2f25fd31a76807aced3e2b126acdc
|
|
end47a2f25fd31a76807aced3e2b126acdc:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpOr32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Or32 x x)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end231e283e568e90bd9a3e6a4fa328c8a4
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end231e283e568e90bd9a3e6a4fa328c8a4
|
|
end231e283e568e90bd9a3e6a4fa328c8a4:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpOr64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Or64 x x)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end6b0efc212016dc97d0e3939db04c81d9
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end6b0efc212016dc97d0e3939db04c81d9
|
|
end6b0efc212016dc97d0e3939db04c81d9:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpOr8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Or8 x x)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end05295dbfafd6869af79b4daee9fda000
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end05295dbfafd6869af79b4daee9fda000
|
|
end05295dbfafd6869af79b4daee9fda000:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpPtrIndex(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (PtrIndex <t> ptr idx)
|
|
// cond: config.PtrSize == 4
|
|
// result: (AddPtr ptr (Mul32 <config.fe.TypeInt()> idx (Const32 <config.fe.TypeInt()> [t.Elem().Size()])))
|
|
{
|
|
t := v.Type
|
|
ptr := v.Args[0]
|
|
idx := v.Args[1]
|
|
if !(config.PtrSize == 4) {
|
|
goto endd902622aaa1e7545b5a2a0c08b47d287
|
|
}
|
|
v.Op = OpAddPtr
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AddArg(ptr)
|
|
v0 := b.NewValue0(v.Line, OpMul32, TypeInvalid)
|
|
v0.Type = config.fe.TypeInt()
|
|
v0.AddArg(idx)
|
|
v1 := b.NewValue0(v.Line, OpConst32, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v1.AuxInt = t.Elem().Size()
|
|
v0.AddArg(v1)
|
|
v.AddArg(v0)
|
|
return true
|
|
}
|
|
goto endd902622aaa1e7545b5a2a0c08b47d287
|
|
endd902622aaa1e7545b5a2a0c08b47d287:
|
|
;
|
|
// match: (PtrIndex <t> ptr idx)
|
|
// cond: config.PtrSize == 8
|
|
// result: (AddPtr ptr (Mul64 <config.fe.TypeInt()> idx (Const64 <config.fe.TypeInt()> [t.Elem().Size()])))
|
|
{
|
|
t := v.Type
|
|
ptr := v.Args[0]
|
|
idx := v.Args[1]
|
|
if !(config.PtrSize == 8) {
|
|
goto end47a5f1d1b158914fa383de024bbe3b08
|
|
}
|
|
v.Op = OpAddPtr
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AddArg(ptr)
|
|
v0 := b.NewValue0(v.Line, OpMul64, TypeInvalid)
|
|
v0.Type = config.fe.TypeInt()
|
|
v0.AddArg(idx)
|
|
v1 := b.NewValue0(v.Line, OpConst64, TypeInvalid)
|
|
v1.Type = config.fe.TypeInt()
|
|
v1.AuxInt = t.Elem().Size()
|
|
v0.AddArg(v1)
|
|
v.AddArg(v0)
|
|
return true
|
|
}
|
|
goto end47a5f1d1b158914fa383de024bbe3b08
|
|
end47a5f1d1b158914fa383de024bbe3b08:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpSliceCap(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (SliceCap (SliceMake _ _ cap))
|
|
// cond:
|
|
// result: cap
|
|
{
|
|
if v.Args[0].Op != OpSliceMake {
|
|
goto end1bd11616743632b33b410964667fb3c6
|
|
}
|
|
cap := v.Args[0].Args[2]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = cap.Type
|
|
v.AddArg(cap)
|
|
return true
|
|
}
|
|
goto end1bd11616743632b33b410964667fb3c6
|
|
end1bd11616743632b33b410964667fb3c6:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpSliceLen(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (SliceLen (SliceMake _ len _))
|
|
// cond:
|
|
// result: len
|
|
{
|
|
if v.Args[0].Op != OpSliceMake {
|
|
goto endebb2090199d13e4c2ae52fb3e778f7fd
|
|
}
|
|
len := v.Args[0].Args[1]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = len.Type
|
|
v.AddArg(len)
|
|
return true
|
|
}
|
|
goto endebb2090199d13e4c2ae52fb3e778f7fd
|
|
endebb2090199d13e4c2ae52fb3e778f7fd:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpSlicePtr(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (SlicePtr (SliceMake ptr _ _ ))
|
|
// cond:
|
|
// result: ptr
|
|
{
|
|
if v.Args[0].Op != OpSliceMake {
|
|
goto end526acc0a705137a5d25577499206720b
|
|
}
|
|
ptr := v.Args[0].Args[0]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = ptr.Type
|
|
v.AddArg(ptr)
|
|
return true
|
|
}
|
|
goto end526acc0a705137a5d25577499206720b
|
|
end526acc0a705137a5d25577499206720b:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpStore(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Store [8] dst (ComplexMake real imag) mem)
|
|
// cond:
|
|
// result: (Store [4] (OffPtr <config.fe.TypeFloat32().PtrTo()> [4] dst) imag (Store [4] dst real mem))
|
|
{
|
|
if v.AuxInt != 8 {
|
|
goto endced898cb0a165662afe48ea44ad3318a
|
|
}
|
|
dst := v.Args[0]
|
|
if v.Args[1].Op != OpComplexMake {
|
|
goto endced898cb0a165662afe48ea44ad3318a
|
|
}
|
|
real := v.Args[1].Args[0]
|
|
imag := v.Args[1].Args[1]
|
|
mem := v.Args[2]
|
|
v.Op = OpStore
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 4
|
|
v0 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v0.Type = config.fe.TypeFloat32().PtrTo()
|
|
v0.AuxInt = 4
|
|
v0.AddArg(dst)
|
|
v.AddArg(v0)
|
|
v.AddArg(imag)
|
|
v1 := b.NewValue0(v.Line, OpStore, TypeInvalid)
|
|
v1.AuxInt = 4
|
|
v1.AddArg(dst)
|
|
v1.AddArg(real)
|
|
v1.AddArg(mem)
|
|
v1.Type = TypeMem
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto endced898cb0a165662afe48ea44ad3318a
|
|
endced898cb0a165662afe48ea44ad3318a:
|
|
;
|
|
// match: (Store [16] dst (ComplexMake real imag) mem)
|
|
// cond:
|
|
// result: (Store [8] (OffPtr <config.fe.TypeFloat64().PtrTo()> [8] dst) imag (Store [8] dst real mem))
|
|
{
|
|
if v.AuxInt != 16 {
|
|
goto end3851a482d7bd37a93c4d81581e85b3ab
|
|
}
|
|
dst := v.Args[0]
|
|
if v.Args[1].Op != OpComplexMake {
|
|
goto end3851a482d7bd37a93c4d81581e85b3ab
|
|
}
|
|
real := v.Args[1].Args[0]
|
|
imag := v.Args[1].Args[1]
|
|
mem := v.Args[2]
|
|
v.Op = OpStore
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 8
|
|
v0 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v0.Type = config.fe.TypeFloat64().PtrTo()
|
|
v0.AuxInt = 8
|
|
v0.AddArg(dst)
|
|
v.AddArg(v0)
|
|
v.AddArg(imag)
|
|
v1 := b.NewValue0(v.Line, OpStore, TypeInvalid)
|
|
v1.AuxInt = 8
|
|
v1.AddArg(dst)
|
|
v1.AddArg(real)
|
|
v1.AddArg(mem)
|
|
v1.Type = TypeMem
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto end3851a482d7bd37a93c4d81581e85b3ab
|
|
end3851a482d7bd37a93c4d81581e85b3ab:
|
|
;
|
|
// match: (Store [2*config.PtrSize] dst (StringMake ptr len) mem)
|
|
// cond:
|
|
// result: (Store [config.PtrSize] (OffPtr <config.fe.TypeInt().PtrTo()> [config.PtrSize] dst) len (Store [config.PtrSize] dst ptr mem))
|
|
{
|
|
if v.AuxInt != 2*config.PtrSize {
|
|
goto endd3a6ecebdad5899570a79fe5c62f34f1
|
|
}
|
|
dst := v.Args[0]
|
|
if v.Args[1].Op != OpStringMake {
|
|
goto endd3a6ecebdad5899570a79fe5c62f34f1
|
|
}
|
|
ptr := v.Args[1].Args[0]
|
|
len := v.Args[1].Args[1]
|
|
mem := v.Args[2]
|
|
v.Op = OpStore
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = config.PtrSize
|
|
v0 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v0.Type = config.fe.TypeInt().PtrTo()
|
|
v0.AuxInt = config.PtrSize
|
|
v0.AddArg(dst)
|
|
v.AddArg(v0)
|
|
v.AddArg(len)
|
|
v1 := b.NewValue0(v.Line, OpStore, TypeInvalid)
|
|
v1.AuxInt = config.PtrSize
|
|
v1.AddArg(dst)
|
|
v1.AddArg(ptr)
|
|
v1.AddArg(mem)
|
|
v1.Type = TypeMem
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto endd3a6ecebdad5899570a79fe5c62f34f1
|
|
endd3a6ecebdad5899570a79fe5c62f34f1:
|
|
;
|
|
// match: (Store [3*config.PtrSize] dst (SliceMake ptr len cap) mem)
|
|
// cond:
|
|
// result: (Store [config.PtrSize] (OffPtr <config.fe.TypeInt().PtrTo()> [2*config.PtrSize] dst) cap (Store [config.PtrSize] (OffPtr <config.fe.TypeInt().PtrTo()> [config.PtrSize] dst) len (Store [config.PtrSize] dst ptr mem)))
|
|
{
|
|
if v.AuxInt != 3*config.PtrSize {
|
|
goto endd5cc8c3dad7d24c845b0b88fc51487ae
|
|
}
|
|
dst := v.Args[0]
|
|
if v.Args[1].Op != OpSliceMake {
|
|
goto endd5cc8c3dad7d24c845b0b88fc51487ae
|
|
}
|
|
ptr := v.Args[1].Args[0]
|
|
len := v.Args[1].Args[1]
|
|
cap := v.Args[1].Args[2]
|
|
mem := v.Args[2]
|
|
v.Op = OpStore
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = config.PtrSize
|
|
v0 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v0.Type = config.fe.TypeInt().PtrTo()
|
|
v0.AuxInt = 2 * config.PtrSize
|
|
v0.AddArg(dst)
|
|
v.AddArg(v0)
|
|
v.AddArg(cap)
|
|
v1 := b.NewValue0(v.Line, OpStore, TypeInvalid)
|
|
v1.AuxInt = config.PtrSize
|
|
v2 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v2.Type = config.fe.TypeInt().PtrTo()
|
|
v2.AuxInt = config.PtrSize
|
|
v2.AddArg(dst)
|
|
v1.AddArg(v2)
|
|
v1.AddArg(len)
|
|
v3 := b.NewValue0(v.Line, OpStore, TypeInvalid)
|
|
v3.AuxInt = config.PtrSize
|
|
v3.AddArg(dst)
|
|
v3.AddArg(ptr)
|
|
v3.AddArg(mem)
|
|
v3.Type = TypeMem
|
|
v1.AddArg(v3)
|
|
v1.Type = TypeMem
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto endd5cc8c3dad7d24c845b0b88fc51487ae
|
|
endd5cc8c3dad7d24c845b0b88fc51487ae:
|
|
;
|
|
// match: (Store [2*config.PtrSize] dst (IMake itab data) mem)
|
|
// cond:
|
|
// result: (Store [config.PtrSize] (OffPtr <config.fe.TypeBytePtr().PtrTo()> [config.PtrSize] dst) data (Store [config.PtrSize] dst itab mem))
|
|
{
|
|
if v.AuxInt != 2*config.PtrSize {
|
|
goto endaa801a871178ae3256b3f6f5d9f13514
|
|
}
|
|
dst := v.Args[0]
|
|
if v.Args[1].Op != OpIMake {
|
|
goto endaa801a871178ae3256b3f6f5d9f13514
|
|
}
|
|
itab := v.Args[1].Args[0]
|
|
data := v.Args[1].Args[1]
|
|
mem := v.Args[2]
|
|
v.Op = OpStore
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = config.PtrSize
|
|
v0 := b.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v0.Type = config.fe.TypeBytePtr().PtrTo()
|
|
v0.AuxInt = config.PtrSize
|
|
v0.AddArg(dst)
|
|
v.AddArg(v0)
|
|
v.AddArg(data)
|
|
v1 := b.NewValue0(v.Line, OpStore, TypeInvalid)
|
|
v1.AuxInt = config.PtrSize
|
|
v1.AddArg(dst)
|
|
v1.AddArg(itab)
|
|
v1.AddArg(mem)
|
|
v1.Type = TypeMem
|
|
v.AddArg(v1)
|
|
return true
|
|
}
|
|
goto endaa801a871178ae3256b3f6f5d9f13514
|
|
endaa801a871178ae3256b3f6f5d9f13514:
|
|
;
|
|
// match: (Store [size] dst (Load <t> src mem) mem)
|
|
// cond: !config.fe.CanSSA(t)
|
|
// result: (Move [size] dst src mem)
|
|
{
|
|
size := v.AuxInt
|
|
dst := v.Args[0]
|
|
if v.Args[1].Op != OpLoad {
|
|
goto end45295326269ba18413dceb7b608a0b9d
|
|
}
|
|
t := v.Args[1].Type
|
|
src := v.Args[1].Args[0]
|
|
mem := v.Args[1].Args[1]
|
|
if v.Args[2] != mem {
|
|
goto end45295326269ba18413dceb7b608a0b9d
|
|
}
|
|
if !(!config.fe.CanSSA(t)) {
|
|
goto end45295326269ba18413dceb7b608a0b9d
|
|
}
|
|
v.Op = OpMove
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = size
|
|
v.AddArg(dst)
|
|
v.AddArg(src)
|
|
v.AddArg(mem)
|
|
return true
|
|
}
|
|
goto end45295326269ba18413dceb7b608a0b9d
|
|
end45295326269ba18413dceb7b608a0b9d:
|
|
;
|
|
// match: (Store [size] dst (Load <t> src mem) (VarDef {x} mem))
|
|
// cond: !config.fe.CanSSA(t)
|
|
// result: (Move [size] dst src (VarDef {x} mem))
|
|
{
|
|
size := v.AuxInt
|
|
dst := v.Args[0]
|
|
if v.Args[1].Op != OpLoad {
|
|
goto end7f3cc0baffb82ba3ee879599b189a512
|
|
}
|
|
t := v.Args[1].Type
|
|
src := v.Args[1].Args[0]
|
|
mem := v.Args[1].Args[1]
|
|
if v.Args[2].Op != OpVarDef {
|
|
goto end7f3cc0baffb82ba3ee879599b189a512
|
|
}
|
|
x := v.Args[2].Aux
|
|
if v.Args[2].Args[0] != mem {
|
|
goto end7f3cc0baffb82ba3ee879599b189a512
|
|
}
|
|
if !(!config.fe.CanSSA(t)) {
|
|
goto end7f3cc0baffb82ba3ee879599b189a512
|
|
}
|
|
v.Op = OpMove
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = size
|
|
v.AddArg(dst)
|
|
v.AddArg(src)
|
|
v0 := b.NewValue0(v.Line, OpVarDef, TypeInvalid)
|
|
v0.Aux = x
|
|
v0.AddArg(mem)
|
|
v0.Type = TypeMem
|
|
v.AddArg(v0)
|
|
return true
|
|
}
|
|
goto end7f3cc0baffb82ba3ee879599b189a512
|
|
end7f3cc0baffb82ba3ee879599b189a512:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpStringLen(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (StringLen (StringMake _ len))
|
|
// cond:
|
|
// result: len
|
|
{
|
|
if v.Args[0].Op != OpStringMake {
|
|
goto end0d922460b7e5ca88324034f4bd6c027c
|
|
}
|
|
len := v.Args[0].Args[1]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = len.Type
|
|
v.AddArg(len)
|
|
return true
|
|
}
|
|
goto end0d922460b7e5ca88324034f4bd6c027c
|
|
end0d922460b7e5ca88324034f4bd6c027c:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpStringPtr(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (StringPtr (StringMake ptr _))
|
|
// cond:
|
|
// result: ptr
|
|
{
|
|
if v.Args[0].Op != OpStringMake {
|
|
goto end061edc5d85c73ad909089af2556d9380
|
|
}
|
|
ptr := v.Args[0].Args[0]
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = ptr.Type
|
|
v.AddArg(ptr)
|
|
return true
|
|
}
|
|
goto end061edc5d85c73ad909089af2556d9380
|
|
end061edc5d85c73ad909089af2556d9380:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpStructSelect(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (StructSelect [idx] (Load ptr mem))
|
|
// cond:
|
|
// result: @v.Args[0].Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [idx] ptr) mem)
|
|
{
|
|
idx := v.AuxInt
|
|
if v.Args[0].Op != OpLoad {
|
|
goto end27abc5bf0299ce1bd5457af6ce8e3fba
|
|
}
|
|
ptr := v.Args[0].Args[0]
|
|
mem := v.Args[0].Args[1]
|
|
v0 := v.Args[0].Block.NewValue0(v.Line, OpLoad, TypeInvalid)
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AddArg(v0)
|
|
v0.Type = v.Type
|
|
v1 := v.Args[0].Block.NewValue0(v.Line, OpOffPtr, TypeInvalid)
|
|
v1.Type = v.Type.PtrTo()
|
|
v1.AuxInt = idx
|
|
v1.AddArg(ptr)
|
|
v0.AddArg(v1)
|
|
v0.AddArg(mem)
|
|
return true
|
|
}
|
|
goto end27abc5bf0299ce1bd5457af6ce8e3fba
|
|
end27abc5bf0299ce1bd5457af6ce8e3fba:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpSub16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Sub16 (Const16 [c]) (Const16 [d]))
|
|
// cond:
|
|
// result: (Const16 [c-d])
|
|
{
|
|
if v.Args[0].Op != OpConst16 {
|
|
goto end5c6fab95c9dbeff5973119096bfd4e78
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst16 {
|
|
goto end5c6fab95c9dbeff5973119096bfd4e78
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst16
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c - d
|
|
return true
|
|
}
|
|
goto end5c6fab95c9dbeff5973119096bfd4e78
|
|
end5c6fab95c9dbeff5973119096bfd4e78:
|
|
;
|
|
// match: (Sub16 x x)
|
|
// cond:
|
|
// result: (Const16 [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end83da541391be564f2a08464e674a49e7
|
|
}
|
|
v.Op = OpConst16
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end83da541391be564f2a08464e674a49e7
|
|
end83da541391be564f2a08464e674a49e7:
|
|
;
|
|
// match: (Sub16 (Add16 x y) x)
|
|
// cond:
|
|
// result: y
|
|
{
|
|
if v.Args[0].Op != OpAdd16 {
|
|
goto end0dd8f250c457b9c005ecbed59fc2e758
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
y := v.Args[0].Args[1]
|
|
if v.Args[1] != x {
|
|
goto end0dd8f250c457b9c005ecbed59fc2e758
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = y.Type
|
|
v.AddArg(y)
|
|
return true
|
|
}
|
|
goto end0dd8f250c457b9c005ecbed59fc2e758
|
|
end0dd8f250c457b9c005ecbed59fc2e758:
|
|
;
|
|
// match: (Sub16 (Add16 x y) y)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
if v.Args[0].Op != OpAdd16 {
|
|
goto end01c8db2e0bce69e048cf79f3bdc82b9b
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
y := v.Args[0].Args[1]
|
|
if v.Args[1] != y {
|
|
goto end01c8db2e0bce69e048cf79f3bdc82b9b
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end01c8db2e0bce69e048cf79f3bdc82b9b
|
|
end01c8db2e0bce69e048cf79f3bdc82b9b:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpSub32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Sub32 (Const32 [c]) (Const32 [d]))
|
|
// cond:
|
|
// result: (Const32 [c-d])
|
|
{
|
|
if v.Args[0].Op != OpConst32 {
|
|
goto end7623799db780e1bcc42c6ea0df9c49d3
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst32 {
|
|
goto end7623799db780e1bcc42c6ea0df9c49d3
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst32
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c - d
|
|
return true
|
|
}
|
|
goto end7623799db780e1bcc42c6ea0df9c49d3
|
|
end7623799db780e1bcc42c6ea0df9c49d3:
|
|
;
|
|
// match: (Sub32 x x)
|
|
// cond:
|
|
// result: (Const32 [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto enda747581e798f199e07f4ad69747cd069
|
|
}
|
|
v.Op = OpConst32
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto enda747581e798f199e07f4ad69747cd069
|
|
enda747581e798f199e07f4ad69747cd069:
|
|
;
|
|
// match: (Sub32 (Add32 x y) x)
|
|
// cond:
|
|
// result: y
|
|
{
|
|
if v.Args[0].Op != OpAdd32 {
|
|
goto end70c1e60e58a6c106d060f10cd3f179ea
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
y := v.Args[0].Args[1]
|
|
if v.Args[1] != x {
|
|
goto end70c1e60e58a6c106d060f10cd3f179ea
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = y.Type
|
|
v.AddArg(y)
|
|
return true
|
|
}
|
|
goto end70c1e60e58a6c106d060f10cd3f179ea
|
|
end70c1e60e58a6c106d060f10cd3f179ea:
|
|
;
|
|
// match: (Sub32 (Add32 x y) y)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
if v.Args[0].Op != OpAdd32 {
|
|
goto end20e42db178ec4f423cc56a991863a4a2
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
y := v.Args[0].Args[1]
|
|
if v.Args[1] != y {
|
|
goto end20e42db178ec4f423cc56a991863a4a2
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end20e42db178ec4f423cc56a991863a4a2
|
|
end20e42db178ec4f423cc56a991863a4a2:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpSub64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Sub64 (Const64 [c]) (Const64 [d]))
|
|
// cond:
|
|
// result: (Const64 [c-d])
|
|
{
|
|
if v.Args[0].Op != OpConst64 {
|
|
goto end5a84a285ff0ff48b8ad3c64b15e3459f
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst64 {
|
|
goto end5a84a285ff0ff48b8ad3c64b15e3459f
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst64
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c - d
|
|
return true
|
|
}
|
|
goto end5a84a285ff0ff48b8ad3c64b15e3459f
|
|
end5a84a285ff0ff48b8ad3c64b15e3459f:
|
|
;
|
|
// match: (Sub64 x x)
|
|
// cond:
|
|
// result: (Const64 [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end0387dc2b7bbe57d4aa54eab5d959da4b
|
|
}
|
|
v.Op = OpConst64
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end0387dc2b7bbe57d4aa54eab5d959da4b
|
|
end0387dc2b7bbe57d4aa54eab5d959da4b:
|
|
;
|
|
// match: (Sub64 (Add64 x y) x)
|
|
// cond:
|
|
// result: y
|
|
{
|
|
if v.Args[0].Op != OpAdd64 {
|
|
goto end7d177451cf8959cb781f52d5ded46fff
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
y := v.Args[0].Args[1]
|
|
if v.Args[1] != x {
|
|
goto end7d177451cf8959cb781f52d5ded46fff
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = y.Type
|
|
v.AddArg(y)
|
|
return true
|
|
}
|
|
goto end7d177451cf8959cb781f52d5ded46fff
|
|
end7d177451cf8959cb781f52d5ded46fff:
|
|
;
|
|
// match: (Sub64 (Add64 x y) y)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
if v.Args[0].Op != OpAdd64 {
|
|
goto end6ea8172b21100cfe3dc86b7a850fbe97
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
y := v.Args[0].Args[1]
|
|
if v.Args[1] != y {
|
|
goto end6ea8172b21100cfe3dc86b7a850fbe97
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto end6ea8172b21100cfe3dc86b7a850fbe97
|
|
end6ea8172b21100cfe3dc86b7a850fbe97:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpSub8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Sub8 (Const8 [c]) (Const8 [d]))
|
|
// cond:
|
|
// result: (Const8 [c-d])
|
|
{
|
|
if v.Args[0].Op != OpConst8 {
|
|
goto endc00ea11c7535529e211710574f5cff24
|
|
}
|
|
c := v.Args[0].AuxInt
|
|
if v.Args[1].Op != OpConst8 {
|
|
goto endc00ea11c7535529e211710574f5cff24
|
|
}
|
|
d := v.Args[1].AuxInt
|
|
v.Op = OpConst8
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = c - d
|
|
return true
|
|
}
|
|
goto endc00ea11c7535529e211710574f5cff24
|
|
endc00ea11c7535529e211710574f5cff24:
|
|
;
|
|
// match: (Sub8 x x)
|
|
// cond:
|
|
// result: (Const8 [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end4e2ee15ef17611919a1a6b5f80bbfe18
|
|
}
|
|
v.Op = OpConst8
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end4e2ee15ef17611919a1a6b5f80bbfe18
|
|
end4e2ee15ef17611919a1a6b5f80bbfe18:
|
|
;
|
|
// match: (Sub8 (Add8 x y) x)
|
|
// cond:
|
|
// result: y
|
|
{
|
|
if v.Args[0].Op != OpAdd8 {
|
|
goto endd79d561e14dc3d11da4c3bb20270b541
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
y := v.Args[0].Args[1]
|
|
if v.Args[1] != x {
|
|
goto endd79d561e14dc3d11da4c3bb20270b541
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = y.Type
|
|
v.AddArg(y)
|
|
return true
|
|
}
|
|
goto endd79d561e14dc3d11da4c3bb20270b541
|
|
endd79d561e14dc3d11da4c3bb20270b541:
|
|
;
|
|
// match: (Sub8 (Add8 x y) y)
|
|
// cond:
|
|
// result: x
|
|
{
|
|
if v.Args[0].Op != OpAdd8 {
|
|
goto endcb7111b11d6d068c97026a97ecff8248
|
|
}
|
|
x := v.Args[0].Args[0]
|
|
y := v.Args[0].Args[1]
|
|
if v.Args[1] != y {
|
|
goto endcb7111b11d6d068c97026a97ecff8248
|
|
}
|
|
v.Op = OpCopy
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.Type = x.Type
|
|
v.AddArg(x)
|
|
return true
|
|
}
|
|
goto endcb7111b11d6d068c97026a97ecff8248
|
|
endcb7111b11d6d068c97026a97ecff8248:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpXor16(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Xor16 x x)
|
|
// cond:
|
|
// result: (Const16 [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end5733ceb1903b8140248d8e2cac02fefe
|
|
}
|
|
v.Op = OpConst16
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end5733ceb1903b8140248d8e2cac02fefe
|
|
end5733ceb1903b8140248d8e2cac02fefe:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpXor32(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Xor32 x x)
|
|
// cond:
|
|
// result: (Const32 [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end268ca02df6515d648e0bfb4e90981d25
|
|
}
|
|
v.Op = OpConst32
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end268ca02df6515d648e0bfb4e90981d25
|
|
end268ca02df6515d648e0bfb4e90981d25:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpXor64(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Xor64 x x)
|
|
// cond:
|
|
// result: (Const64 [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto endaf44e7f9fc58af30df69070953fb45ce
|
|
}
|
|
v.Op = OpConst64
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto endaf44e7f9fc58af30df69070953fb45ce
|
|
endaf44e7f9fc58af30df69070953fb45ce:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteValuegeneric_OpXor8(v *Value, config *Config) bool {
|
|
b := v.Block
|
|
_ = b
|
|
// match: (Xor8 x x)
|
|
// cond:
|
|
// result: (Const8 [0])
|
|
{
|
|
x := v.Args[0]
|
|
if v.Args[1] != x {
|
|
goto end949b3a60b7d181688e6f79f93c782fc8
|
|
}
|
|
v.Op = OpConst8
|
|
v.AuxInt = 0
|
|
v.Aux = nil
|
|
v.resetArgs()
|
|
v.AuxInt = 0
|
|
return true
|
|
}
|
|
goto end949b3a60b7d181688e6f79f93c782fc8
|
|
end949b3a60b7d181688e6f79f93c782fc8:
|
|
;
|
|
return false
|
|
}
|
|
func rewriteBlockgeneric(b *Block) bool {
|
|
switch b.Kind {
|
|
case BlockCheck:
|
|
// match: (Check (NilCheck (GetG _) _) next)
|
|
// cond:
|
|
// result: (Plain nil next)
|
|
{
|
|
v := b.Control
|
|
if v.Op != OpNilCheck {
|
|
goto end6e20d932d6961903b0dcf16eac513826
|
|
}
|
|
if v.Args[0].Op != OpGetG {
|
|
goto end6e20d932d6961903b0dcf16eac513826
|
|
}
|
|
next := b.Succs[0]
|
|
b.Kind = BlockPlain
|
|
b.Control = nil
|
|
b.Succs[0] = next
|
|
b.Likely = BranchUnknown
|
|
return true
|
|
}
|
|
goto end6e20d932d6961903b0dcf16eac513826
|
|
end6e20d932d6961903b0dcf16eac513826:
|
|
;
|
|
case BlockIf:
|
|
// match: (If (Not cond) yes no)
|
|
// cond:
|
|
// result: (If cond no yes)
|
|
{
|
|
v := b.Control
|
|
if v.Op != OpNot {
|
|
goto endebe19c1c3c3bec068cdb2dd29ef57f96
|
|
}
|
|
cond := v.Args[0]
|
|
yes := b.Succs[0]
|
|
no := b.Succs[1]
|
|
b.Kind = BlockIf
|
|
b.Control = cond
|
|
b.Succs[0] = no
|
|
b.Succs[1] = yes
|
|
b.Likely *= -1
|
|
return true
|
|
}
|
|
goto endebe19c1c3c3bec068cdb2dd29ef57f96
|
|
endebe19c1c3c3bec068cdb2dd29ef57f96:
|
|
;
|
|
// match: (If (ConstBool [c]) yes no)
|
|
// cond: c == 1
|
|
// result: (First nil yes no)
|
|
{
|
|
v := b.Control
|
|
if v.Op != OpConstBool {
|
|
goto endc58ecbb85af78c0d58bb232ca86b67a4
|
|
}
|
|
c := v.AuxInt
|
|
yes := b.Succs[0]
|
|
no := b.Succs[1]
|
|
if !(c == 1) {
|
|
goto endc58ecbb85af78c0d58bb232ca86b67a4
|
|
}
|
|
b.Kind = BlockFirst
|
|
b.Control = nil
|
|
b.Succs[0] = yes
|
|
b.Succs[1] = no
|
|
return true
|
|
}
|
|
goto endc58ecbb85af78c0d58bb232ca86b67a4
|
|
endc58ecbb85af78c0d58bb232ca86b67a4:
|
|
;
|
|
// match: (If (ConstBool [c]) yes no)
|
|
// cond: c == 0
|
|
// result: (First nil no yes)
|
|
{
|
|
v := b.Control
|
|
if v.Op != OpConstBool {
|
|
goto end4c3e297e275dd7e2e67f8ccd348c4bb5
|
|
}
|
|
c := v.AuxInt
|
|
yes := b.Succs[0]
|
|
no := b.Succs[1]
|
|
if !(c == 0) {
|
|
goto end4c3e297e275dd7e2e67f8ccd348c4bb5
|
|
}
|
|
b.Kind = BlockFirst
|
|
b.Control = nil
|
|
b.Succs[0] = no
|
|
b.Succs[1] = yes
|
|
b.Likely *= -1
|
|
return true
|
|
}
|
|
goto end4c3e297e275dd7e2e67f8ccd348c4bb5
|
|
end4c3e297e275dd7e2e67f8ccd348c4bb5:
|
|
}
|
|
return false
|
|
}
|