// Code generated from _gen/AMD64splitload.rules using 'go generate'; DO NOT EDIT. package rewriteamd64splitload import "cmd/compile/internal/ssa/ssaop" import "cmd/compile/internal/ssa" func RewriteValue(v *ssa.Value) bool { switch v.Op { case ssaop.OpAMD64CMPBconstload: return rewriteValue_OpAMD64CMPBconstload(v) case ssaop.OpAMD64CMPBconstloadidx1: return rewriteValue_OpAMD64CMPBconstloadidx1(v) case ssaop.OpAMD64CMPBload: return rewriteValue_OpAMD64CMPBload(v) case ssaop.OpAMD64CMPBloadidx1: return rewriteValue_OpAMD64CMPBloadidx1(v) case ssaop.OpAMD64CMPLconstload: return rewriteValue_OpAMD64CMPLconstload(v) case ssaop.OpAMD64CMPLconstloadidx1: return rewriteValue_OpAMD64CMPLconstloadidx1(v) case ssaop.OpAMD64CMPLconstloadidx4: return rewriteValue_OpAMD64CMPLconstloadidx4(v) case ssaop.OpAMD64CMPLload: return rewriteValue_OpAMD64CMPLload(v) case ssaop.OpAMD64CMPLloadidx1: return rewriteValue_OpAMD64CMPLloadidx1(v) case ssaop.OpAMD64CMPLloadidx4: return rewriteValue_OpAMD64CMPLloadidx4(v) case ssaop.OpAMD64CMPQconstload: return rewriteValue_OpAMD64CMPQconstload(v) case ssaop.OpAMD64CMPQconstloadidx1: return rewriteValue_OpAMD64CMPQconstloadidx1(v) case ssaop.OpAMD64CMPQconstloadidx8: return rewriteValue_OpAMD64CMPQconstloadidx8(v) case ssaop.OpAMD64CMPQload: return rewriteValue_OpAMD64CMPQload(v) case ssaop.OpAMD64CMPQloadidx1: return rewriteValue_OpAMD64CMPQloadidx1(v) case ssaop.OpAMD64CMPQloadidx8: return rewriteValue_OpAMD64CMPQloadidx8(v) case ssaop.OpAMD64CMPWconstload: return rewriteValue_OpAMD64CMPWconstload(v) case ssaop.OpAMD64CMPWconstloadidx1: return rewriteValue_OpAMD64CMPWconstloadidx1(v) case ssaop.OpAMD64CMPWconstloadidx2: return rewriteValue_OpAMD64CMPWconstloadidx2(v) case ssaop.OpAMD64CMPWload: return rewriteValue_OpAMD64CMPWload(v) case ssaop.OpAMD64CMPWloadidx1: return rewriteValue_OpAMD64CMPWloadidx1(v) case ssaop.OpAMD64CMPWloadidx2: return rewriteValue_OpAMD64CMPWloadidx2(v) } return false } func rewriteValue_OpAMD64CMPBconstload(v *ssa.Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPBconstload {sym} [vo] ptr mem) // cond: vo.Val() == 0 // result: (TESTB x:(MOVBload {sym} [vo.Off()] ptr mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 mem := v_1 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTB) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVBload, typ.UInt8) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg2(ptr, mem) v.AddArg2(x, x) return true } // match: (CMPBconstload {sym} [vo] ptr mem) // cond: vo.Val() != 0 // result: (CMPBconst (MOVBload {sym} [vo.Off()] ptr mem) [vo.Val8()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 mem := v_1 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPBconst) v.AuxInt = ssa.Int8ToAuxInt(vo.Val8()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVBload, typ.UInt8) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg2(ptr, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPBconstloadidx1(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPBconstloadidx1 {sym} [vo] ptr idx mem) // cond: vo.Val() == 0 // result: (TESTB x:(MOVBloadidx1 {sym} [vo.Off()] ptr idx mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTB) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVBloadidx1, typ.UInt8) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg3(ptr, idx, mem) v.AddArg2(x, x) return true } // match: (CMPBconstloadidx1 {sym} [vo] ptr idx mem) // cond: vo.Val() != 0 // result: (CMPBconst (MOVBloadidx1 {sym} [vo.Off()] ptr idx mem) [vo.Val8()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPBconst) v.AuxInt = ssa.Int8ToAuxInt(vo.Val8()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVBloadidx1, typ.UInt8) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPBload(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPBload {sym} [off] ptr x mem) // result: (CMPB (MOVBload {sym} [off] ptr mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 x := v_1 mem := v_2 v.Reset(ssaop.OpAMD64CMPB) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVBload, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg2(ptr, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPBloadidx1(v *ssa.Value) bool { v_3 := v.Args[3] v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPBloadidx1 {sym} [off] ptr idx x mem) // result: (CMPB (MOVBloadidx1 {sym} [off] ptr idx mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 x := v_2 mem := v_3 v.Reset(ssaop.OpAMD64CMPB) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVBloadidx1, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPLconstload(v *ssa.Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPLconstload {sym} [vo] ptr mem) // cond: vo.Val() == 0 // result: (TESTL x:(MOVLload {sym} [vo.Off()] ptr mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 mem := v_1 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTL) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLload, typ.UInt32) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg2(ptr, mem) v.AddArg2(x, x) return true } // match: (CMPLconstload {sym} [vo] ptr mem) // cond: vo.Val() != 0 // result: (CMPLconst (MOVLload {sym} [vo.Off()] ptr mem) [vo.Val()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 mem := v_1 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPLconst) v.AuxInt = ssa.Int32ToAuxInt(vo.Val()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLload, typ.UInt32) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg2(ptr, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPLconstloadidx1(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPLconstloadidx1 {sym} [vo] ptr idx mem) // cond: vo.Val() == 0 // result: (TESTL x:(MOVLloadidx1 {sym} [vo.Off()] ptr idx mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTL) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLloadidx1, typ.UInt32) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg3(ptr, idx, mem) v.AddArg2(x, x) return true } // match: (CMPLconstloadidx1 {sym} [vo] ptr idx mem) // cond: vo.Val() != 0 // result: (CMPLconst (MOVLloadidx1 {sym} [vo.Off()] ptr idx mem) [vo.Val()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPLconst) v.AuxInt = ssa.Int32ToAuxInt(vo.Val()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLloadidx1, typ.UInt32) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPLconstloadidx4(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPLconstloadidx4 {sym} [vo] ptr idx mem) // cond: vo.Val() == 0 // result: (TESTL x:(MOVLloadidx4 {sym} [vo.Off()] ptr idx mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTL) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLloadidx4, typ.UInt32) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg3(ptr, idx, mem) v.AddArg2(x, x) return true } // match: (CMPLconstloadidx4 {sym} [vo] ptr idx mem) // cond: vo.Val() != 0 // result: (CMPLconst (MOVLloadidx4 {sym} [vo.Off()] ptr idx mem) [vo.Val()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPLconst) v.AuxInt = ssa.Int32ToAuxInt(vo.Val()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLloadidx4, typ.UInt32) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPLload(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPLload {sym} [off] ptr x mem) // result: (CMPL (MOVLload {sym} [off] ptr mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 x := v_1 mem := v_2 v.Reset(ssaop.OpAMD64CMPL) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLload, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg2(ptr, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPLloadidx1(v *ssa.Value) bool { v_3 := v.Args[3] v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPLloadidx1 {sym} [off] ptr idx x mem) // result: (CMPL (MOVLloadidx1 {sym} [off] ptr idx mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 x := v_2 mem := v_3 v.Reset(ssaop.OpAMD64CMPL) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLloadidx1, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPLloadidx4(v *ssa.Value) bool { v_3 := v.Args[3] v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPLloadidx4 {sym} [off] ptr idx x mem) // result: (CMPL (MOVLloadidx4 {sym} [off] ptr idx mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 x := v_2 mem := v_3 v.Reset(ssaop.OpAMD64CMPL) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVLloadidx4, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPQconstload(v *ssa.Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPQconstload {sym} [vo] ptr mem) // cond: vo.Val() == 0 // result: (TESTQ x:(MOVQload {sym} [vo.Off()] ptr mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 mem := v_1 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTQ) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQload, typ.UInt64) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg2(ptr, mem) v.AddArg2(x, x) return true } // match: (CMPQconstload {sym} [vo] ptr mem) // cond: vo.Val() != 0 // result: (CMPQconst (MOVQload {sym} [vo.Off()] ptr mem) [vo.Val()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 mem := v_1 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPQconst) v.AuxInt = ssa.Int32ToAuxInt(vo.Val()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQload, typ.UInt64) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg2(ptr, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPQconstloadidx1(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPQconstloadidx1 {sym} [vo] ptr idx mem) // cond: vo.Val() == 0 // result: (TESTQ x:(MOVQloadidx1 {sym} [vo.Off()] ptr idx mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTQ) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQloadidx1, typ.UInt64) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg3(ptr, idx, mem) v.AddArg2(x, x) return true } // match: (CMPQconstloadidx1 {sym} [vo] ptr idx mem) // cond: vo.Val() != 0 // result: (CMPQconst (MOVQloadidx1 {sym} [vo.Off()] ptr idx mem) [vo.Val()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPQconst) v.AuxInt = ssa.Int32ToAuxInt(vo.Val()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQloadidx1, typ.UInt64) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPQconstloadidx8(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPQconstloadidx8 {sym} [vo] ptr idx mem) // cond: vo.Val() == 0 // result: (TESTQ x:(MOVQloadidx8 {sym} [vo.Off()] ptr idx mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTQ) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQloadidx8, typ.UInt64) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg3(ptr, idx, mem) v.AddArg2(x, x) return true } // match: (CMPQconstloadidx8 {sym} [vo] ptr idx mem) // cond: vo.Val() != 0 // result: (CMPQconst (MOVQloadidx8 {sym} [vo.Off()] ptr idx mem) [vo.Val()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPQconst) v.AuxInt = ssa.Int32ToAuxInt(vo.Val()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQloadidx8, typ.UInt64) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPQload(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPQload {sym} [off] ptr x mem) // result: (CMPQ (MOVQload {sym} [off] ptr mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 x := v_1 mem := v_2 v.Reset(ssaop.OpAMD64CMPQ) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQload, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg2(ptr, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPQloadidx1(v *ssa.Value) bool { v_3 := v.Args[3] v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPQloadidx1 {sym} [off] ptr idx x mem) // result: (CMPQ (MOVQloadidx1 {sym} [off] ptr idx mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 x := v_2 mem := v_3 v.Reset(ssaop.OpAMD64CMPQ) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQloadidx1, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPQloadidx8(v *ssa.Value) bool { v_3 := v.Args[3] v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPQloadidx8 {sym} [off] ptr idx x mem) // result: (CMPQ (MOVQloadidx8 {sym} [off] ptr idx mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 x := v_2 mem := v_3 v.Reset(ssaop.OpAMD64CMPQ) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVQloadidx8, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPWconstload(v *ssa.Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPWconstload {sym} [vo] ptr mem) // cond: vo.Val() == 0 // result: (TESTW x:(MOVWload {sym} [vo.Off()] ptr mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 mem := v_1 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTW) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWload, typ.UInt16) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg2(ptr, mem) v.AddArg2(x, x) return true } // match: (CMPWconstload {sym} [vo] ptr mem) // cond: vo.Val() != 0 // result: (CMPWconst (MOVWload {sym} [vo.Off()] ptr mem) [vo.Val16()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 mem := v_1 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPWconst) v.AuxInt = ssa.Int16ToAuxInt(vo.Val16()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWload, typ.UInt16) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg2(ptr, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPWconstloadidx1(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPWconstloadidx1 {sym} [vo] ptr idx mem) // cond: vo.Val() == 0 // result: (TESTW x:(MOVWloadidx1 {sym} [vo.Off()] ptr idx mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTW) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWloadidx1, typ.UInt16) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg3(ptr, idx, mem) v.AddArg2(x, x) return true } // match: (CMPWconstloadidx1 {sym} [vo] ptr idx mem) // cond: vo.Val() != 0 // result: (CMPWconst (MOVWloadidx1 {sym} [vo.Off()] ptr idx mem) [vo.Val16()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPWconst) v.AuxInt = ssa.Int16ToAuxInt(vo.Val16()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWloadidx1, typ.UInt16) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPWconstloadidx2(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (CMPWconstloadidx2 {sym} [vo] ptr idx mem) // cond: vo.Val() == 0 // result: (TESTW x:(MOVWloadidx2 {sym} [vo.Off()] ptr idx mem) x) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() == 0) { break } v.Reset(ssaop.OpAMD64TESTW) x := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWloadidx2, typ.UInt16) x.AuxInt = ssa.Int32ToAuxInt(vo.Off()) x.Aux = ssa.SymToAux(sym) x.AddArg3(ptr, idx, mem) v.AddArg2(x, x) return true } // match: (CMPWconstloadidx2 {sym} [vo] ptr idx mem) // cond: vo.Val() != 0 // result: (CMPWconst (MOVWloadidx2 {sym} [vo.Off()] ptr idx mem) [vo.Val16()]) for { vo := ssa.AuxIntToValAndOff(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 mem := v_2 if !(vo.Val() != 0) { break } v.Reset(ssaop.OpAMD64CMPWconst) v.AuxInt = ssa.Int16ToAuxInt(vo.Val16()) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWloadidx2, typ.UInt16) v0.AuxInt = ssa.Int32ToAuxInt(vo.Off()) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg(v0) return true } return false } func rewriteValue_OpAMD64CMPWload(v *ssa.Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPWload {sym} [off] ptr x mem) // result: (CMPW (MOVWload {sym} [off] ptr mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 x := v_1 mem := v_2 v.Reset(ssaop.OpAMD64CMPW) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWload, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg2(ptr, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPWloadidx1(v *ssa.Value) bool { v_3 := v.Args[3] v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPWloadidx1 {sym} [off] ptr idx x mem) // result: (CMPW (MOVWloadidx1 {sym} [off] ptr idx mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 x := v_2 mem := v_3 v.Reset(ssaop.OpAMD64CMPW) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWloadidx1, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg2(v0, x) return true } } func rewriteValue_OpAMD64CMPWloadidx2(v *ssa.Value) bool { v_3 := v.Args[3] v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block // match: (CMPWloadidx2 {sym} [off] ptr idx x mem) // result: (CMPW (MOVWloadidx2 {sym} [off] ptr idx mem) x) for { off := ssa.AuxIntToInt32(v.AuxInt) sym := ssa.AuxToSym(v.Aux) ptr := v_0 idx := v_1 x := v_2 mem := v_3 v.Reset(ssaop.OpAMD64CMPW) v0 := b.NewValue0(v.Pos, ssaop.OpAMD64MOVWloadidx2, x.Type) v0.AuxInt = ssa.Int32ToAuxInt(off) v0.Aux = ssa.SymToAux(sym) v0.AddArg3(ptr, idx, mem) v.AddArg2(v0, x) return true } } func RewriteBlock(b *ssa.Block) bool { return false }