case OpRsh8x8:
return rewriteValueS390X_OpRsh8x8_0(v)
case OpS390XADD:
- return rewriteValueS390X_OpS390XADD_0(v) || rewriteValueS390X_OpS390XADD_10(v)
+ return rewriteValueS390X_OpS390XADD_0(v)
case OpS390XADDC:
return rewriteValueS390X_OpS390XADDC_0(v)
case OpS390XADDE:
return rewriteValueS390X_OpS390XADDE_0(v)
case OpS390XADDW:
- return rewriteValueS390X_OpS390XADDW_0(v) || rewriteValueS390X_OpS390XADDW_10(v)
+ return rewriteValueS390X_OpS390XADDW_0(v)
case OpS390XADDWconst:
return rewriteValueS390X_OpS390XADDWconst_0(v)
case OpS390XADDWload:
case OpS390XAND:
return rewriteValueS390X_OpS390XAND_0(v) || rewriteValueS390X_OpS390XAND_10(v)
case OpS390XANDW:
- return rewriteValueS390X_OpS390XANDW_0(v) || rewriteValueS390X_OpS390XANDW_10(v)
+ return rewriteValueS390X_OpS390XANDW_0(v)
case OpS390XANDWconst:
return rewriteValueS390X_OpS390XANDWconst_0(v)
case OpS390XANDWload:
case OpS390XOR:
return rewriteValueS390X_OpS390XOR_0(v) || rewriteValueS390X_OpS390XOR_10(v) || rewriteValueS390X_OpS390XOR_20(v) || rewriteValueS390X_OpS390XOR_30(v) || rewriteValueS390X_OpS390XOR_40(v) || rewriteValueS390X_OpS390XOR_50(v) || rewriteValueS390X_OpS390XOR_60(v) || rewriteValueS390X_OpS390XOR_70(v) || rewriteValueS390X_OpS390XOR_80(v) || rewriteValueS390X_OpS390XOR_90(v) || rewriteValueS390X_OpS390XOR_100(v) || rewriteValueS390X_OpS390XOR_110(v) || rewriteValueS390X_OpS390XOR_120(v) || rewriteValueS390X_OpS390XOR_130(v) || rewriteValueS390X_OpS390XOR_140(v) || rewriteValueS390X_OpS390XOR_150(v) || rewriteValueS390X_OpS390XOR_160(v)
case OpS390XORW:
- return rewriteValueS390X_OpS390XORW_0(v) || rewriteValueS390X_OpS390XORW_10(v) || rewriteValueS390X_OpS390XORW_20(v) || rewriteValueS390X_OpS390XORW_30(v) || rewriteValueS390X_OpS390XORW_40(v) || rewriteValueS390X_OpS390XORW_50(v) || rewriteValueS390X_OpS390XORW_60(v) || rewriteValueS390X_OpS390XORW_70(v) || rewriteValueS390X_OpS390XORW_80(v) || rewriteValueS390X_OpS390XORW_90(v)
+ return rewriteValueS390X_OpS390XORW_0(v) || rewriteValueS390X_OpS390XORW_10(v) || rewriteValueS390X_OpS390XORW_20(v) || rewriteValueS390X_OpS390XORW_30(v) || rewriteValueS390X_OpS390XORW_40(v) || rewriteValueS390X_OpS390XORW_50(v) || rewriteValueS390X_OpS390XORW_60(v) || rewriteValueS390X_OpS390XORW_70(v) || rewriteValueS390X_OpS390XORW_80(v)
case OpS390XORWconst:
return rewriteValueS390X_OpS390XORWconst_0(v)
case OpS390XORWload:
case OpS390XSumBytes8:
return rewriteValueS390X_OpS390XSumBytes8_0(v)
case OpS390XXOR:
- return rewriteValueS390X_OpS390XXOR_0(v) || rewriteValueS390X_OpS390XXOR_10(v)
+ return rewriteValueS390X_OpS390XXOR_0(v)
case OpS390XXORW:
- return rewriteValueS390X_OpS390XXORW_0(v) || rewriteValueS390X_OpS390XXORW_10(v)
+ return rewriteValueS390X_OpS390XXORW_0(v)
case OpS390XXORWconst:
return rewriteValueS390X_OpS390XXORWconst_0(v)
case OpS390XXORWload:
}
return false
}
-func rewriteValueS390X_OpS390XADD_10(v *Value) bool {
- // match: (ADD <t> g:(MOVDload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ADDload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XADDload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (ADD <t> x g:(MOVDload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ADDload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XADDload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- return false
-}
func rewriteValueS390X_OpS390XADDC_0(v *Value) bool {
// match: (ADDC x (MOVDconst [c]))
// cond: is16Bit(c)
v.AddArg(mem)
return true
}
- // match: (ADDW <t> g:(MOVWload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ADDWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XADDWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (ADDW <t> x g:(MOVWload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ADDWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XADDWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- return false
-}
-func rewriteValueS390X_OpS390XADDW_10(v *Value) bool {
// match: (ADDW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
// result: (ADDWload <t> [off] {sym} x ptr mem)
v.AddArg(mem)
return true
}
- // match: (ADDW <t> g:(MOVWZload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ADDWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XADDWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (ADDW <t> x g:(MOVWZload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ADDWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XADDWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
return false
}
func rewriteValueS390X_OpS390XADDWconst_0(v *Value) bool {
v.AddArg(mem)
return true
}
- // match: (AND <t> g:(MOVDload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ANDload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XANDload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (AND <t> x g:(MOVDload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ANDload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XANDload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
return false
}
func rewriteValueS390X_OpS390XANDW_0(v *Value) bool {
v.AddArg(mem)
return true
}
- // match: (ANDW <t> g:(MOVWload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ANDWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XANDWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (ANDW <t> x g:(MOVWload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ANDWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XANDWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
// match: (ANDW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
// result: (ANDWload <t> [off] {sym} x ptr mem)
v.AddArg(mem)
return true
}
- // match: (ANDW <t> g:(MOVWZload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ANDWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XANDWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- return false
-}
-func rewriteValueS390X_OpS390XANDW_10(v *Value) bool {
- // match: (ANDW <t> x g:(MOVWZload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ANDWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XANDWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
return false
}
func rewriteValueS390X_OpS390XANDWconst_0(v *Value) bool {
v.AddArg(mem)
return true
}
- // match: (MULLD <t> g:(MOVDload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (MULLDload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XMULLDload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (MULLD <t> x g:(MOVDload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (MULLDload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XMULLDload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
return false
}
func rewriteValueS390X_OpS390XMULLDconst_0(v *Value) bool {
v.AddArg(mem)
return true
}
- // match: (MULLW <t> g:(MOVWload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (MULLWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XMULLWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (MULLW <t> x g:(MOVWload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (MULLWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XMULLWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
// match: (MULLW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
// result: (MULLWload <t> [off] {sym} x ptr mem)
v.AddArg(mem)
return true
}
- // match: (MULLW <t> g:(MOVWZload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (MULLWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XMULLWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (MULLW <t> x g:(MOVWZload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (MULLWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XMULLWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
return false
}
func rewriteValueS390X_OpS390XMULLWconst_0(v *Value) bool {
v.AddArg(mem)
return true
}
- // match: (OR <t> g:(MOVDload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ORload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XORload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (OR <t> x g:(MOVDload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ORload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XORload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
// match: (OR x1:(MOVBZload [i1] {s} p mem) sh:(SLDconst [8] x0:(MOVBZload [i0] {s} p mem)))
// cond: i1 == i0+1 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZload [i0] {s} p mem)
v0.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_30(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR sh:(SLDconst [32] x0:(MOVWZload [i0] {s} p mem)) x1:(MOVWZload [i1] {s} p mem))
// cond: i1 == i0+4 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVDload [i0] {s} p mem)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_30(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR s0:(SLDconst [j0] x0:(MOVBZload [i0] {s} p mem)) or:(OR y s1:(SLDconst [j1] x1:(MOVBZload [i1] {s} p mem))))
// cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j1] (MOVHZload [i0] {s} p mem)) y)
v0.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_40(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR x1:(MOVBZloadidx [i1] {s} idx p mem) sh:(SLDconst [8] x0:(MOVBZloadidx [i0] {s} p idx mem)))
// cond: i1 == i0+1 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_40(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR x1:(MOVBZloadidx [i1] {s} idx p mem) sh:(SLDconst [8] x0:(MOVBZloadidx [i0] {s} idx p mem)))
// cond: i1 == i0+1 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_50(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR x1:(MOVHZloadidx [i1] {s} idx p mem) sh:(SLDconst [16] x0:(MOVHZloadidx [i0] {s} idx p mem)))
// cond: i1 == i0+2 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVWZloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_50(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR sh:(SLDconst [16] x0:(MOVHZloadidx [i0] {s} idx p mem)) x1:(MOVHZloadidx [i1] {s} p idx mem))
// cond: i1 == i0+2 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVWZloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_60(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR sh:(SLDconst [32] x0:(MOVWZloadidx [i0] {s} idx p mem)) x1:(MOVWZloadidx [i1] {s} p idx mem))
// cond: i1 == i0+4 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVDloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_60(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR sh:(SLDconst [32] x0:(MOVWZloadidx [i0] {s} idx p mem)) x1:(MOVWZloadidx [i1] {s} idx p mem))
// cond: i1 == i0+4 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVDloadidx [i0] {s} p idx mem)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_70(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR s0:(SLDconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) or:(OR y s1:(SLDconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem))))
// cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j1] (MOVHZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_70(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR or:(OR s1:(SLDconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) y) s0:(SLDconst [j0] x0:(MOVBZloadidx [i0] {s} p idx mem)))
// cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j1] (MOVHZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_80(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR s0:(SLDconst [j0] x0:(MOVHZloadidx [i0] {s} idx p mem)) or:(OR s1:(SLDconst [j1] x1:(MOVHZloadidx [i1] {s} p idx mem)) y))
// cond: i1 == i0+2 && j1 == j0-16 && j1 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j1] (MOVWZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_80(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR s0:(SLDconst [j0] x0:(MOVHZloadidx [i0] {s} idx p mem)) or:(OR s1:(SLDconst [j1] x1:(MOVHZloadidx [i1] {s} idx p mem)) y))
// cond: i1 == i0+2 && j1 == j0-16 && j1 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j1] (MOVWZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_90(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR or:(OR y s1:(SLDconst [j1] x1:(MOVHZloadidx [i1] {s} idx p mem))) s0:(SLDconst [j0] x0:(MOVHZloadidx [i0] {s} p idx mem)))
// cond: i1 == i0+2 && j1 == j0-16 && j1 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j1] (MOVWZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_90(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR or:(OR s1:(SLDconst [j1] x1:(MOVHZloadidx [i1] {s} idx p mem)) y) s0:(SLDconst [j0] x0:(MOVHZloadidx [i0] {s} idx p mem)))
// cond: i1 == i0+2 && j1 == j0-16 && j1 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j1] (MOVWZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_100(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR sh:(SLDconst [32] r1:(MOVWZreg x1:(MOVWBRload [i1] {s} p mem))) r0:(MOVWZreg x0:(MOVWBRload [i0] {s} p mem)))
// cond: i1 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVDBRload [i0] {s} p mem)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_100(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR s1:(SLDconst [j1] x1:(MOVBZload [i1] {s} p mem)) or:(OR y s0:(SLDconst [j0] x0:(MOVBZload [i0] {s} p mem))))
// cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j0] (MOVHZreg (MOVHBRload [i0] {s} p mem))) y)
v0.AddArg(v1)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_110(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR x0:(MOVBZloadidx [i0] {s} idx p mem) sh:(SLDconst [8] x1:(MOVBZloadidx [i1] {s} p idx mem)))
// cond: p.Op != OpSB && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))
v0.AddArg(v1)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_110(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR x0:(MOVBZloadidx [i0] {s} idx p mem) sh:(SLDconst [8] x1:(MOVBZloadidx [i1] {s} idx p mem)))
// cond: p.Op != OpSB && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))
v0.AddArg(v1)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_120(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} idx p mem)) sh:(SLDconst [16] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} idx p mem))))
// cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVWZreg (MOVWBRloadidx [i0] {s} p idx mem))
v0.AddArg(v1)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_120(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR sh:(SLDconst [16] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} idx p mem))) r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} p idx mem)))
// cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVWZreg (MOVWBRloadidx [i0] {s} p idx mem))
v0.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_130(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR sh:(SLDconst [32] r1:(MOVWZreg x1:(MOVWBRloadidx [i1] {s} idx p mem))) r0:(MOVWZreg x0:(MOVWBRloadidx [i0] {s} p idx mem)))
// cond: i1 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVDBRloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_130(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR sh:(SLDconst [32] r1:(MOVWZreg x1:(MOVWBRloadidx [i1] {s} idx p mem))) r0:(MOVWZreg x0:(MOVWBRloadidx [i0] {s} idx p mem)))
// cond: i1 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVDBRloadidx [i0] {s} p idx mem)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_140(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR s1:(SLDconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) or:(OR y s0:(SLDconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem))))
// cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_140(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR or:(OR s0:(SLDconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) y) s1:(SLDconst [j1] x1:(MOVBZloadidx [i1] {s} p idx mem)))
// cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_150(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR s1:(SLDconst [j1] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} idx p mem))) or:(OR s0:(SLDconst [j0] r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} p idx mem))) y))
// cond: i1 == i0+2 && j1 == j0+16 && j0 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j0] (MOVWZreg (MOVWBRloadidx [i0] {s} p idx mem))) y)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_150(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR s1:(SLDconst [j1] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} idx p mem))) or:(OR s0:(SLDconst [j0] r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} idx p mem))) y))
// cond: i1 == i0+2 && j1 == j0+16 && j0 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j0] (MOVWZreg (MOVWBRloadidx [i0] {s} p idx mem))) y)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XOR_160(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (OR or:(OR y s0:(SLDconst [j0] r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} idx p mem)))) s1:(SLDconst [j1] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} p idx mem))))
// cond: i1 == i0+2 && j1 == j0+16 && j0 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j0] (MOVWZreg (MOVWBRloadidx [i0] {s} p idx mem))) y)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XOR_160(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (OR or:(OR s0:(SLDconst [j0] r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} idx p mem))) y) s1:(SLDconst [j1] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} idx p mem))))
// cond: i1 == i0+2 && j1 == j0+16 && j0 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (OR <v.Type> (SLDconst <v.Type> [j0] (MOVWZreg (MOVWBRloadidx [i0] {s} p idx mem))) y)
return false
}
func rewriteValueS390X_OpS390XORW_0(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW x (MOVDconst [c]))
// result: (ORWconst [int64(int32(c))] x)
for {
v.AddArg(mem)
return true
}
- // match: (ORW <t> g:(MOVWload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (ORW <t> x g:(MOVWload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (ORW <t> x g:(MOVWZload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- return false
-}
-func rewriteValueS390X_OpS390XORW_10(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (ORW <t> g:(MOVWZload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (ORW <t> g:(MOVWZload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (ORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
// match: (ORW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
// result: (ORWload <t> [off] {sym} x ptr mem)
v.AddArg(mem)
return true
}
+ // match: (ORW <t> g:(MOVWZload [off] {sym} ptr mem) x)
+ // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
+ // result: (ORWload <t> [off] {sym} x ptr mem)
+ for {
+ t := v.Type
+ x := v.Args[1]
+ g := v.Args[0]
+ if g.Op != OpS390XMOVWZload {
+ break
+ }
+ off := g.AuxInt
+ sym := g.Aux
+ mem := g.Args[1]
+ ptr := g.Args[0]
+ if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
+ break
+ }
+ v.reset(OpS390XORWload)
+ v.Type = t
+ v.AuxInt = off
+ v.Aux = sym
+ v.AddArg(x)
+ v.AddArg(ptr)
+ v.AddArg(mem)
+ return true
+ }
// match: (ORW x1:(MOVBZload [i1] {s} p mem) sh:(SLWconst [8] x0:(MOVBZload [i0] {s} p mem)))
// cond: i1 == i0+1 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZload [i0] {s} p mem)
v0.AddArg(mem)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XORW_10(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW sh:(SLWconst [8] x0:(MOVBZload [i0] {s} p mem)) x1:(MOVBZload [i1] {s} p mem))
// cond: i1 == i0+1 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZload [i0] {s} p mem)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XORW_20(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (ORW or:(ORW y s1:(SLWconst [j1] x1:(MOVBZload [i1] {s} p mem))) s0:(SLWconst [j0] x0:(MOVBZload [i0] {s} p mem)))
// cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (ORW <v.Type> (SLWconst <v.Type> [j1] (MOVHZload [i0] {s} p mem)) y)
v0.AddArg(mem)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XORW_20(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW x1:(MOVBZloadidx [i1] {s} idx p mem) sh:(SLWconst [8] x0:(MOVBZloadidx [i0] {s} idx p mem)))
// cond: i1 == i0+1 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XORW_30(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (ORW x1:(MOVHZloadidx [i1] {s} idx p mem) sh:(SLWconst [16] x0:(MOVHZloadidx [i0] {s} p idx mem)))
// cond: i1 == i0+2 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVWZloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XORW_30(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW sh:(SLWconst [16] x0:(MOVHZloadidx [i0] {s} idx p mem)) x1:(MOVHZloadidx [i1] {s} p idx mem))
// cond: i1 == i0+2 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVWZloadidx [i0] {s} p idx mem)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XORW_40(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (ORW s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) or:(ORW s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) y))
// cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (ORW <v.Type> (SLWconst <v.Type> [j1] (MOVHZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XORW_40(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) or:(ORW y s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem))))
// cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (ORW <v.Type> (SLWconst <v.Type> [j1] (MOVHZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XORW_50(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (ORW or:(ORW s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) y) s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)))
// cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (ORW <v.Type> (SLWconst <v.Type> [j1] (MOVHZloadidx [i0] {s} p idx mem)) y)
v0.AddArg(v1)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XORW_50(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW sh:(SLWconst [8] x1:(MOVBZload [i1] {s} p mem)) x0:(MOVBZload [i0] {s} p mem))
// cond: p.Op != OpSB && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZreg (MOVHBRload [i0] {s} p mem))
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XORW_60(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (ORW or:(ORW y s0:(SLWconst [j0] x0:(MOVBZload [i0] {s} p mem))) s1:(SLWconst [j1] x1:(MOVBZload [i1] {s} p mem)))
// cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (ORW <v.Type> (SLWconst <v.Type> [j0] (MOVHZreg (MOVHBRload [i0] {s} p mem))) y)
v0.AddArg(v1)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XORW_60(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW x0:(MOVBZloadidx [i0] {s} idx p mem) sh:(SLWconst [8] x1:(MOVBZloadidx [i1] {s} idx p mem)))
// cond: p.Op != OpSB && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))
v0.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XORW_70(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (ORW r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} idx p mem)) sh:(SLWconst [16] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} p idx mem))))
// cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVWBRloadidx [i0] {s} p idx mem)
v0.AddArg(mem)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XORW_70(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW sh:(SLWconst [16] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} idx p mem))) r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} p idx mem)))
// cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh)
// result: @mergePoint(b,x0,x1) (MOVWBRloadidx [i0] {s} p idx mem)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XORW_80(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (ORW s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) or:(ORW s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) y))
// cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (ORW <v.Type> (SLWconst <v.Type> [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y)
v0.AddArg(y)
return true
}
+ return false
+}
+func rewriteValueS390X_OpS390XORW_80(v *Value) bool {
+ b := v.Block
+ typ := &b.Func.Config.Types
// match: (ORW s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) or:(ORW y s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem))))
// cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (ORW <v.Type> (SLWconst <v.Type> [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y)
v0.AddArg(y)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XORW_90(v *Value) bool {
- b := v.Block
- typ := &b.Func.Config.Types
// match: (ORW or:(ORW s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) y) s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)))
// cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1,y) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)
// result: @mergePoint(b,x0,x1,y) (ORW <v.Type> (SLWconst <v.Type> [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y)
v.AddArg(mem)
return true
}
- // match: (XOR <t> g:(MOVDload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (XORload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XXORload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- return false
-}
-func rewriteValueS390X_OpS390XXOR_10(v *Value) bool {
- // match: (XOR <t> x g:(MOVDload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (XORload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVDload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XXORload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
return false
}
func rewriteValueS390X_OpS390XXORW_0(v *Value) bool {
v.AddArg(mem)
return true
}
- // match: (XORW <t> g:(MOVWload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (XORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XXORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (XORW <t> x g:(MOVWload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (XORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XXORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
// match: (XORW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
// result: (XORWload <t> [off] {sym} x ptr mem)
v.AddArg(mem)
return true
}
- return false
-}
-func rewriteValueS390X_OpS390XXORW_10(v *Value) bool {
// match: (XORW <t> g:(MOVWZload [off] {sym} ptr mem) x)
// cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
// result: (XORWload <t> [off] {sym} x ptr mem)
v.AddArg(mem)
return true
}
- // match: (XORW <t> g:(MOVWZload [off] {sym} ptr mem) x)
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (XORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- x := v.Args[1]
- g := v.Args[0]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XXORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
- // match: (XORW <t> x g:(MOVWZload [off] {sym} ptr mem))
- // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)
- // result: (XORWload <t> [off] {sym} x ptr mem)
- for {
- t := v.Type
- _ = v.Args[1]
- x := v.Args[0]
- g := v.Args[1]
- if g.Op != OpS390XMOVWZload {
- break
- }
- off := g.AuxInt
- sym := g.Aux
- mem := g.Args[1]
- ptr := g.Args[0]
- if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) {
- break
- }
- v.reset(OpS390XXORWload)
- v.Type = t
- v.AuxInt = off
- v.Aux = sym
- v.AddArg(x)
- v.AddArg(ptr)
- v.AddArg(mem)
- return true
- }
return false
}
func rewriteValueS390X_OpS390XXORWconst_0(v *Value) bool {
func rewriteValuegeneric(v *Value) bool {
switch v.Op {
case OpAdd16:
- return rewriteValuegeneric_OpAdd16_0(v) || rewriteValuegeneric_OpAdd16_10(v) || rewriteValuegeneric_OpAdd16_20(v) || rewriteValuegeneric_OpAdd16_30(v)
+ return rewriteValuegeneric_OpAdd16_0(v) || rewriteValuegeneric_OpAdd16_10(v) || rewriteValuegeneric_OpAdd16_20(v)
case OpAdd32:
- return rewriteValuegeneric_OpAdd32_0(v) || rewriteValuegeneric_OpAdd32_10(v) || rewriteValuegeneric_OpAdd32_20(v) || rewriteValuegeneric_OpAdd32_30(v)
+ return rewriteValuegeneric_OpAdd32_0(v) || rewriteValuegeneric_OpAdd32_10(v) || rewriteValuegeneric_OpAdd32_20(v)
case OpAdd32F:
return rewriteValuegeneric_OpAdd32F_0(v)
case OpAdd64:
- return rewriteValuegeneric_OpAdd64_0(v) || rewriteValuegeneric_OpAdd64_10(v) || rewriteValuegeneric_OpAdd64_20(v) || rewriteValuegeneric_OpAdd64_30(v)
+ return rewriteValuegeneric_OpAdd64_0(v) || rewriteValuegeneric_OpAdd64_10(v) || rewriteValuegeneric_OpAdd64_20(v)
case OpAdd64F:
return rewriteValuegeneric_OpAdd64F_0(v)
case OpAdd8:
- return rewriteValuegeneric_OpAdd8_0(v) || rewriteValuegeneric_OpAdd8_10(v) || rewriteValuegeneric_OpAdd8_20(v) || rewriteValuegeneric_OpAdd8_30(v)
+ return rewriteValuegeneric_OpAdd8_0(v) || rewriteValuegeneric_OpAdd8_10(v) || rewriteValuegeneric_OpAdd8_20(v)
case OpAddPtr:
return rewriteValuegeneric_OpAddPtr_0(v)
case OpAnd16:
}
func rewriteValuegeneric_OpAdd16_20(v *Value) bool {
b := v.Block
- // match: (Add16 x (Sub16 i:(Const16 <t>) z))
- // cond: (z.Op != OpConst16 && x.Op != OpConst16)
- // result: (Add16 i (Sub16 <t> x z))
- for {
- _ = v.Args[1]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpSub16 {
- break
- }
- z := v_1.Args[1]
- i := v_1.Args[0]
- if i.Op != OpConst16 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst16 && x.Op != OpConst16) {
- break
- }
- v.reset(OpAdd16)
- v.AddArg(i)
- v0 := b.NewValue0(v.Pos, OpSub16, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- return true
- }
- // match: (Add16 (Sub16 i:(Const16 <t>) z) x)
- // cond: (z.Op != OpConst16 && x.Op != OpConst16)
- // result: (Add16 i (Sub16 <t> x z))
- for {
- x := v.Args[1]
- v_0 := v.Args[0]
- if v_0.Op != OpSub16 {
- break
- }
- z := v_0.Args[1]
- i := v_0.Args[0]
- if i.Op != OpConst16 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst16 && x.Op != OpConst16) {
- break
- }
- v.reset(OpAdd16)
- v.AddArg(i)
- v0 := b.NewValue0(v.Pos, OpSub16, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- return true
- }
// match: (Add16 (Sub16 z i:(Const16 <t>)) x)
// cond: (z.Op != OpConst16 && x.Op != OpConst16)
// result: (Sub16 (Add16 <t> x z) i)
v.AddArg(i)
return true
}
- // match: (Add16 x (Sub16 z i:(Const16 <t>)))
- // cond: (z.Op != OpConst16 && x.Op != OpConst16)
- // result: (Sub16 (Add16 <t> x z) i)
- for {
- _ = v.Args[1]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpSub16 {
- break
- }
- _ = v_1.Args[1]
- z := v_1.Args[0]
- i := v_1.Args[1]
- if i.Op != OpConst16 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst16 && x.Op != OpConst16) {
- break
- }
- v.reset(OpSub16)
- v0 := b.NewValue0(v.Pos, OpAdd16, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- v.AddArg(i)
- return true
- }
- // match: (Add16 (Sub16 z i:(Const16 <t>)) x)
- // cond: (z.Op != OpConst16 && x.Op != OpConst16)
- // result: (Sub16 (Add16 <t> x z) i)
- for {
- x := v.Args[1]
- v_0 := v.Args[0]
- if v_0.Op != OpSub16 {
- break
- }
- _ = v_0.Args[1]
- z := v_0.Args[0]
- i := v_0.Args[1]
- if i.Op != OpConst16 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst16 && x.Op != OpConst16) {
- break
- }
- v.reset(OpSub16)
- v0 := b.NewValue0(v.Pos, OpAdd16, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- v.AddArg(i)
- return true
- }
// match: (Add16 (Const16 <t> [c]) (Add16 (Const16 <t> [d]) x))
// result: (Add16 (Const16 <t> [int64(int16(c+d))]) x)
for {
v.AddArg(x)
return true
}
- return false
-}
-func rewriteValuegeneric_OpAdd16_30(v *Value) bool {
- b := v.Block
// match: (Add16 (Const16 <t> [c]) (Sub16 (Const16 <t> [d]) x))
// result: (Sub16 (Const16 <t> [int64(int16(c+d))]) x)
for {
}
func rewriteValuegeneric_OpAdd32_20(v *Value) bool {
b := v.Block
- // match: (Add32 x (Sub32 i:(Const32 <t>) z))
- // cond: (z.Op != OpConst32 && x.Op != OpConst32)
- // result: (Add32 i (Sub32 <t> x z))
- for {
- _ = v.Args[1]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpSub32 {
- break
- }
- z := v_1.Args[1]
- i := v_1.Args[0]
- if i.Op != OpConst32 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst32 && x.Op != OpConst32) {
- break
- }
- v.reset(OpAdd32)
- v.AddArg(i)
- v0 := b.NewValue0(v.Pos, OpSub32, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- return true
- }
- // match: (Add32 (Sub32 i:(Const32 <t>) z) x)
- // cond: (z.Op != OpConst32 && x.Op != OpConst32)
- // result: (Add32 i (Sub32 <t> x z))
- for {
- x := v.Args[1]
- v_0 := v.Args[0]
- if v_0.Op != OpSub32 {
- break
- }
- z := v_0.Args[1]
- i := v_0.Args[0]
- if i.Op != OpConst32 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst32 && x.Op != OpConst32) {
- break
- }
- v.reset(OpAdd32)
- v.AddArg(i)
- v0 := b.NewValue0(v.Pos, OpSub32, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- return true
- }
// match: (Add32 (Sub32 z i:(Const32 <t>)) x)
// cond: (z.Op != OpConst32 && x.Op != OpConst32)
// result: (Sub32 (Add32 <t> x z) i)
v.AddArg(i)
return true
}
- // match: (Add32 x (Sub32 z i:(Const32 <t>)))
- // cond: (z.Op != OpConst32 && x.Op != OpConst32)
- // result: (Sub32 (Add32 <t> x z) i)
- for {
- _ = v.Args[1]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpSub32 {
- break
- }
- _ = v_1.Args[1]
- z := v_1.Args[0]
- i := v_1.Args[1]
- if i.Op != OpConst32 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst32 && x.Op != OpConst32) {
- break
- }
- v.reset(OpSub32)
- v0 := b.NewValue0(v.Pos, OpAdd32, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- v.AddArg(i)
- return true
- }
- // match: (Add32 (Sub32 z i:(Const32 <t>)) x)
- // cond: (z.Op != OpConst32 && x.Op != OpConst32)
- // result: (Sub32 (Add32 <t> x z) i)
- for {
- x := v.Args[1]
- v_0 := v.Args[0]
- if v_0.Op != OpSub32 {
- break
- }
- _ = v_0.Args[1]
- z := v_0.Args[0]
- i := v_0.Args[1]
- if i.Op != OpConst32 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst32 && x.Op != OpConst32) {
- break
- }
- v.reset(OpSub32)
- v0 := b.NewValue0(v.Pos, OpAdd32, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- v.AddArg(i)
- return true
- }
// match: (Add32 (Const32 <t> [c]) (Add32 (Const32 <t> [d]) x))
// result: (Add32 (Const32 <t> [int64(int32(c+d))]) x)
for {
v.AddArg(x)
return true
}
- return false
-}
-func rewriteValuegeneric_OpAdd32_30(v *Value) bool {
- b := v.Block
// match: (Add32 (Const32 <t> [c]) (Sub32 (Const32 <t> [d]) x))
// result: (Sub32 (Const32 <t> [int64(int32(c+d))]) x)
for {
}
func rewriteValuegeneric_OpAdd64_20(v *Value) bool {
b := v.Block
- // match: (Add64 x (Sub64 i:(Const64 <t>) z))
- // cond: (z.Op != OpConst64 && x.Op != OpConst64)
- // result: (Add64 i (Sub64 <t> x z))
- for {
- _ = v.Args[1]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpSub64 {
- break
- }
- z := v_1.Args[1]
- i := v_1.Args[0]
- if i.Op != OpConst64 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst64 && x.Op != OpConst64) {
- break
- }
- v.reset(OpAdd64)
- v.AddArg(i)
- v0 := b.NewValue0(v.Pos, OpSub64, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- return true
- }
- // match: (Add64 (Sub64 i:(Const64 <t>) z) x)
- // cond: (z.Op != OpConst64 && x.Op != OpConst64)
- // result: (Add64 i (Sub64 <t> x z))
- for {
- x := v.Args[1]
- v_0 := v.Args[0]
- if v_0.Op != OpSub64 {
- break
- }
- z := v_0.Args[1]
- i := v_0.Args[0]
- if i.Op != OpConst64 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst64 && x.Op != OpConst64) {
- break
- }
- v.reset(OpAdd64)
- v.AddArg(i)
- v0 := b.NewValue0(v.Pos, OpSub64, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- return true
- }
// match: (Add64 (Sub64 z i:(Const64 <t>)) x)
// cond: (z.Op != OpConst64 && x.Op != OpConst64)
// result: (Sub64 (Add64 <t> x z) i)
v.AddArg(i)
return true
}
- // match: (Add64 x (Sub64 z i:(Const64 <t>)))
- // cond: (z.Op != OpConst64 && x.Op != OpConst64)
- // result: (Sub64 (Add64 <t> x z) i)
- for {
- _ = v.Args[1]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpSub64 {
- break
- }
- _ = v_1.Args[1]
- z := v_1.Args[0]
- i := v_1.Args[1]
- if i.Op != OpConst64 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst64 && x.Op != OpConst64) {
- break
- }
- v.reset(OpSub64)
- v0 := b.NewValue0(v.Pos, OpAdd64, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- v.AddArg(i)
- return true
- }
- // match: (Add64 (Sub64 z i:(Const64 <t>)) x)
- // cond: (z.Op != OpConst64 && x.Op != OpConst64)
- // result: (Sub64 (Add64 <t> x z) i)
- for {
- x := v.Args[1]
- v_0 := v.Args[0]
- if v_0.Op != OpSub64 {
- break
- }
- _ = v_0.Args[1]
- z := v_0.Args[0]
- i := v_0.Args[1]
- if i.Op != OpConst64 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst64 && x.Op != OpConst64) {
- break
- }
- v.reset(OpSub64)
- v0 := b.NewValue0(v.Pos, OpAdd64, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- v.AddArg(i)
- return true
- }
// match: (Add64 (Const64 <t> [c]) (Add64 (Const64 <t> [d]) x))
// result: (Add64 (Const64 <t> [c+d]) x)
for {
v.AddArg(x)
return true
}
- return false
-}
-func rewriteValuegeneric_OpAdd64_30(v *Value) bool {
- b := v.Block
// match: (Add64 (Const64 <t> [c]) (Sub64 (Const64 <t> [d]) x))
// result: (Sub64 (Const64 <t> [c+d]) x)
for {
}
func rewriteValuegeneric_OpAdd8_20(v *Value) bool {
b := v.Block
- // match: (Add8 x (Sub8 i:(Const8 <t>) z))
- // cond: (z.Op != OpConst8 && x.Op != OpConst8)
- // result: (Add8 i (Sub8 <t> x z))
- for {
- _ = v.Args[1]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpSub8 {
- break
- }
- z := v_1.Args[1]
- i := v_1.Args[0]
- if i.Op != OpConst8 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst8 && x.Op != OpConst8) {
- break
- }
- v.reset(OpAdd8)
- v.AddArg(i)
- v0 := b.NewValue0(v.Pos, OpSub8, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- return true
- }
- // match: (Add8 (Sub8 i:(Const8 <t>) z) x)
- // cond: (z.Op != OpConst8 && x.Op != OpConst8)
- // result: (Add8 i (Sub8 <t> x z))
- for {
- x := v.Args[1]
- v_0 := v.Args[0]
- if v_0.Op != OpSub8 {
- break
- }
- z := v_0.Args[1]
- i := v_0.Args[0]
- if i.Op != OpConst8 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst8 && x.Op != OpConst8) {
- break
- }
- v.reset(OpAdd8)
- v.AddArg(i)
- v0 := b.NewValue0(v.Pos, OpSub8, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- return true
- }
// match: (Add8 (Sub8 z i:(Const8 <t>)) x)
// cond: (z.Op != OpConst8 && x.Op != OpConst8)
// result: (Sub8 (Add8 <t> x z) i)
v.AddArg(i)
return true
}
- // match: (Add8 x (Sub8 z i:(Const8 <t>)))
- // cond: (z.Op != OpConst8 && x.Op != OpConst8)
- // result: (Sub8 (Add8 <t> x z) i)
- for {
- _ = v.Args[1]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpSub8 {
- break
- }
- _ = v_1.Args[1]
- z := v_1.Args[0]
- i := v_1.Args[1]
- if i.Op != OpConst8 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst8 && x.Op != OpConst8) {
- break
- }
- v.reset(OpSub8)
- v0 := b.NewValue0(v.Pos, OpAdd8, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- v.AddArg(i)
- return true
- }
- // match: (Add8 (Sub8 z i:(Const8 <t>)) x)
- // cond: (z.Op != OpConst8 && x.Op != OpConst8)
- // result: (Sub8 (Add8 <t> x z) i)
- for {
- x := v.Args[1]
- v_0 := v.Args[0]
- if v_0.Op != OpSub8 {
- break
- }
- _ = v_0.Args[1]
- z := v_0.Args[0]
- i := v_0.Args[1]
- if i.Op != OpConst8 {
- break
- }
- t := i.Type
- if !(z.Op != OpConst8 && x.Op != OpConst8) {
- break
- }
- v.reset(OpSub8)
- v0 := b.NewValue0(v.Pos, OpAdd8, t)
- v0.AddArg(x)
- v0.AddArg(z)
- v.AddArg(v0)
- v.AddArg(i)
- return true
- }
// match: (Add8 (Const8 <t> [c]) (Add8 (Const8 <t> [d]) x))
// result: (Add8 (Const8 <t> [int64(int8(c+d))]) x)
for {
v.AddArg(x)
return true
}
- return false
-}
-func rewriteValuegeneric_OpAdd8_30(v *Value) bool {
- b := v.Block
// match: (Add8 (Const8 <t> [c]) (Sub8 (Const8 <t> [d]) x))
// result: (Sub8 (Const8 <t> [int64(int8(c+d))]) x)
for {