1
0
mirror of https://github.com/golang/go synced 2024-11-18 08:04:40 -07:00

cmd/compile: remove redundant checks in s390x SSA rules

CL 38337 modified canMergeLoad to reject loads with multiple uses
so it is no longer necessary to check this in the SSA rules.

Change-Id: I03498390e778da1be8cb59ae0948e99289008315
Reviewed-on: https://go-review.googlesource.com/38473
Run-TryBot: Michael Munday <munday@ca.ibm.com>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Michael Munday 2017-03-23 12:21:43 -04:00
parent c3a50ad3c7
commit ff80d8ba4b
2 changed files with 99 additions and 99 deletions

View File

@ -1038,71 +1038,71 @@
// Exclude global data (SB) because these instructions cannot handle relative addresses. // Exclude global data (SB) because these instructions cannot handle relative addresses.
// TODO(mundaym): use LARL in the assembler to handle SB? // TODO(mundaym): use LARL in the assembler to handle SB?
// TODO(mundaym): indexed versions of these? // TODO(mundaym): indexed versions of these?
(ADD <t> x g:(MOVDload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ADD <t> x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ADDload <t> [off] {sym} x ptr mem) -> (ADDload <t> [off] {sym} x ptr mem)
(ADD <t> g:(MOVDload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ADD <t> g:(MOVDload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ADDload <t> [off] {sym} x ptr mem) -> (ADDload <t> [off] {sym} x ptr mem)
(ADDW <t> x g:(MOVWload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ADDW <t> x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ADDWload <t> [off] {sym} x ptr mem) -> (ADDWload <t> [off] {sym} x ptr mem)
(ADDW <t> g:(MOVWload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ADDW <t> g:(MOVWload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ADDWload <t> [off] {sym} x ptr mem) -> (ADDWload <t> [off] {sym} x ptr mem)
(ADDW <t> x g:(MOVWZload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ADDW <t> x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ADDWload <t> [off] {sym} x ptr mem) -> (ADDWload <t> [off] {sym} x ptr mem)
(ADDW <t> g:(MOVWZload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ADDW <t> g:(MOVWZload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ADDWload <t> [off] {sym} x ptr mem) -> (ADDWload <t> [off] {sym} x ptr mem)
(MULLD <t> x g:(MOVDload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (MULLD <t> x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (MULLDload <t> [off] {sym} x ptr mem) -> (MULLDload <t> [off] {sym} x ptr mem)
(MULLD <t> g:(MOVDload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (MULLD <t> g:(MOVDload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (MULLDload <t> [off] {sym} x ptr mem) -> (MULLDload <t> [off] {sym} x ptr mem)
(MULLW <t> x g:(MOVWload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (MULLW <t> x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (MULLWload <t> [off] {sym} x ptr mem) -> (MULLWload <t> [off] {sym} x ptr mem)
(MULLW <t> g:(MOVWload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (MULLW <t> g:(MOVWload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (MULLWload <t> [off] {sym} x ptr mem) -> (MULLWload <t> [off] {sym} x ptr mem)
(MULLW <t> x g:(MOVWZload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (MULLW <t> x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (MULLWload <t> [off] {sym} x ptr mem) -> (MULLWload <t> [off] {sym} x ptr mem)
(MULLW <t> g:(MOVWZload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (MULLW <t> g:(MOVWZload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (MULLWload <t> [off] {sym} x ptr mem) -> (MULLWload <t> [off] {sym} x ptr mem)
(SUB <t> x g:(MOVDload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (SUB <t> x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (SUBload <t> [off] {sym} x ptr mem) -> (SUBload <t> [off] {sym} x ptr mem)
(SUBW <t> x g:(MOVWload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (SUBW <t> x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (SUBWload <t> [off] {sym} x ptr mem) -> (SUBWload <t> [off] {sym} x ptr mem)
(SUBW <t> x g:(MOVWZload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (SUBW <t> x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (SUBWload <t> [off] {sym} x ptr mem) -> (SUBWload <t> [off] {sym} x ptr mem)
(AND <t> x g:(MOVDload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (AND <t> x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ANDload <t> [off] {sym} x ptr mem) -> (ANDload <t> [off] {sym} x ptr mem)
(AND <t> g:(MOVDload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (AND <t> g:(MOVDload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ANDload <t> [off] {sym} x ptr mem) -> (ANDload <t> [off] {sym} x ptr mem)
(ANDW <t> x g:(MOVWload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ANDW <t> x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ANDWload <t> [off] {sym} x ptr mem) -> (ANDWload <t> [off] {sym} x ptr mem)
(ANDW <t> g:(MOVWload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ANDW <t> g:(MOVWload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ANDWload <t> [off] {sym} x ptr mem) -> (ANDWload <t> [off] {sym} x ptr mem)
(ANDW <t> x g:(MOVWZload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ANDW <t> x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ANDWload <t> [off] {sym} x ptr mem) -> (ANDWload <t> [off] {sym} x ptr mem)
(ANDW <t> g:(MOVWZload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ANDW <t> g:(MOVWZload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ANDWload <t> [off] {sym} x ptr mem) -> (ANDWload <t> [off] {sym} x ptr mem)
(OR <t> x g:(MOVDload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (OR <t> x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ORload <t> [off] {sym} x ptr mem) -> (ORload <t> [off] {sym} x ptr mem)
(OR <t> g:(MOVDload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (OR <t> g:(MOVDload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ORload <t> [off] {sym} x ptr mem) -> (ORload <t> [off] {sym} x ptr mem)
(ORW <t> x g:(MOVWload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ORW <t> x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ORWload <t> [off] {sym} x ptr mem) -> (ORWload <t> [off] {sym} x ptr mem)
(ORW <t> g:(MOVWload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ORW <t> g:(MOVWload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ORWload <t> [off] {sym} x ptr mem) -> (ORWload <t> [off] {sym} x ptr mem)
(ORW <t> x g:(MOVWZload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ORW <t> x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ORWload <t> [off] {sym} x ptr mem) -> (ORWload <t> [off] {sym} x ptr mem)
(ORW <t> g:(MOVWZload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (ORW <t> g:(MOVWZload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (ORWload <t> [off] {sym} x ptr mem) -> (ORWload <t> [off] {sym} x ptr mem)
(XOR <t> x g:(MOVDload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (XOR <t> x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (XORload <t> [off] {sym} x ptr mem) -> (XORload <t> [off] {sym} x ptr mem)
(XOR <t> g:(MOVDload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (XOR <t> g:(MOVDload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (XORload <t> [off] {sym} x ptr mem) -> (XORload <t> [off] {sym} x ptr mem)
(XORW <t> x g:(MOVWload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (XORW <t> x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (XORWload <t> [off] {sym} x ptr mem) -> (XORWload <t> [off] {sym} x ptr mem)
(XORW <t> g:(MOVWload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (XORW <t> g:(MOVWload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (XORWload <t> [off] {sym} x ptr mem) -> (XORWload <t> [off] {sym} x ptr mem)
(XORW <t> x g:(MOVWZload [off] {sym} ptr mem)) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (XORW <t> x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (XORWload <t> [off] {sym} x ptr mem) -> (XORWload <t> [off] {sym} x ptr mem)
(XORW <t> g:(MOVWZload [off] {sym} ptr mem) x) && g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) (XORW <t> g:(MOVWZload [off] {sym} ptr mem) x) && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
-> (XORWload <t> [off] {sym} x ptr mem) -> (XORWload <t> [off] {sym} x ptr mem)
// Combine constant stores into larger (unaligned) stores. // Combine constant stores into larger (unaligned) stores.

View File

@ -5834,7 +5834,7 @@ func rewriteValueS390X_OpS390XADD(v *Value) bool {
return true return true
} }
// match: (ADD <t> x g:(MOVDload [off] {sym} ptr mem)) // match: (ADD <t> x g:(MOVDload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ADDload <t> [off] {sym} x ptr mem) // result: (ADDload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -5847,7 +5847,7 @@ func rewriteValueS390X_OpS390XADD(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XADDload) v.reset(OpS390XADDload)
@ -5860,7 +5860,7 @@ func rewriteValueS390X_OpS390XADD(v *Value) bool {
return true return true
} }
// match: (ADD <t> g:(MOVDload [off] {sym} ptr mem) x) // match: (ADD <t> g:(MOVDload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ADDload <t> [off] {sym} x ptr mem) // result: (ADDload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -5873,7 +5873,7 @@ func rewriteValueS390X_OpS390XADD(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XADDload) v.reset(OpS390XADDload)
@ -5984,7 +5984,7 @@ func rewriteValueS390X_OpS390XADDW(v *Value) bool {
return true return true
} }
// match: (ADDW <t> x g:(MOVWload [off] {sym} ptr mem)) // match: (ADDW <t> x g:(MOVWload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ADDWload <t> [off] {sym} x ptr mem) // result: (ADDWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -5997,7 +5997,7 @@ func rewriteValueS390X_OpS390XADDW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XADDWload) v.reset(OpS390XADDWload)
@ -6010,7 +6010,7 @@ func rewriteValueS390X_OpS390XADDW(v *Value) bool {
return true return true
} }
// match: (ADDW <t> g:(MOVWload [off] {sym} ptr mem) x) // match: (ADDW <t> g:(MOVWload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ADDWload <t> [off] {sym} x ptr mem) // result: (ADDWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6023,7 +6023,7 @@ func rewriteValueS390X_OpS390XADDW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XADDWload) v.reset(OpS390XADDWload)
@ -6036,7 +6036,7 @@ func rewriteValueS390X_OpS390XADDW(v *Value) bool {
return true return true
} }
// match: (ADDW <t> x g:(MOVWZload [off] {sym} ptr mem)) // match: (ADDW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ADDWload <t> [off] {sym} x ptr mem) // result: (ADDWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6049,7 +6049,7 @@ func rewriteValueS390X_OpS390XADDW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XADDWload) v.reset(OpS390XADDWload)
@ -6062,7 +6062,7 @@ func rewriteValueS390X_OpS390XADDW(v *Value) bool {
return true return true
} }
// match: (ADDW <t> g:(MOVWZload [off] {sym} ptr mem) x) // match: (ADDW <t> g:(MOVWZload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ADDWload <t> [off] {sym} x ptr mem) // result: (ADDWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6075,7 +6075,7 @@ func rewriteValueS390X_OpS390XADDW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XADDWload) v.reset(OpS390XADDWload)
@ -6418,7 +6418,7 @@ func rewriteValueS390X_OpS390XAND(v *Value) bool {
return true return true
} }
// match: (AND <t> x g:(MOVDload [off] {sym} ptr mem)) // match: (AND <t> x g:(MOVDload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ANDload <t> [off] {sym} x ptr mem) // result: (ANDload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6431,7 +6431,7 @@ func rewriteValueS390X_OpS390XAND(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XANDload) v.reset(OpS390XANDload)
@ -6444,7 +6444,7 @@ func rewriteValueS390X_OpS390XAND(v *Value) bool {
return true return true
} }
// match: (AND <t> g:(MOVDload [off] {sym} ptr mem) x) // match: (AND <t> g:(MOVDload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ANDload <t> [off] {sym} x ptr mem) // result: (ANDload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6457,7 +6457,7 @@ func rewriteValueS390X_OpS390XAND(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XANDload) v.reset(OpS390XANDload)
@ -6516,7 +6516,7 @@ func rewriteValueS390X_OpS390XANDW(v *Value) bool {
return true return true
} }
// match: (ANDW <t> x g:(MOVWload [off] {sym} ptr mem)) // match: (ANDW <t> x g:(MOVWload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ANDWload <t> [off] {sym} x ptr mem) // result: (ANDWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6529,7 +6529,7 @@ func rewriteValueS390X_OpS390XANDW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XANDWload) v.reset(OpS390XANDWload)
@ -6542,7 +6542,7 @@ func rewriteValueS390X_OpS390XANDW(v *Value) bool {
return true return true
} }
// match: (ANDW <t> g:(MOVWload [off] {sym} ptr mem) x) // match: (ANDW <t> g:(MOVWload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ANDWload <t> [off] {sym} x ptr mem) // result: (ANDWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6555,7 +6555,7 @@ func rewriteValueS390X_OpS390XANDW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XANDWload) v.reset(OpS390XANDWload)
@ -6568,7 +6568,7 @@ func rewriteValueS390X_OpS390XANDW(v *Value) bool {
return true return true
} }
// match: (ANDW <t> x g:(MOVWZload [off] {sym} ptr mem)) // match: (ANDW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ANDWload <t> [off] {sym} x ptr mem) // result: (ANDWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6581,7 +6581,7 @@ func rewriteValueS390X_OpS390XANDW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XANDWload) v.reset(OpS390XANDWload)
@ -6594,7 +6594,7 @@ func rewriteValueS390X_OpS390XANDW(v *Value) bool {
return true return true
} }
// match: (ANDW <t> g:(MOVWZload [off] {sym} ptr mem) x) // match: (ANDW <t> g:(MOVWZload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ANDWload <t> [off] {sym} x ptr mem) // result: (ANDWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -6607,7 +6607,7 @@ func rewriteValueS390X_OpS390XANDW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XANDWload) v.reset(OpS390XANDWload)
@ -14286,7 +14286,7 @@ func rewriteValueS390X_OpS390XMULLD(v *Value) bool {
return true return true
} }
// match: (MULLD <t> x g:(MOVDload [off] {sym} ptr mem)) // match: (MULLD <t> x g:(MOVDload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (MULLDload <t> [off] {sym} x ptr mem) // result: (MULLDload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -14299,7 +14299,7 @@ func rewriteValueS390X_OpS390XMULLD(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XMULLDload) v.reset(OpS390XMULLDload)
@ -14312,7 +14312,7 @@ func rewriteValueS390X_OpS390XMULLD(v *Value) bool {
return true return true
} }
// match: (MULLD <t> g:(MOVDload [off] {sym} ptr mem) x) // match: (MULLD <t> g:(MOVDload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (MULLDload <t> [off] {sym} x ptr mem) // result: (MULLDload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -14325,7 +14325,7 @@ func rewriteValueS390X_OpS390XMULLD(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XMULLDload) v.reset(OpS390XMULLDload)
@ -14474,7 +14474,7 @@ func rewriteValueS390X_OpS390XMULLW(v *Value) bool {
return true return true
} }
// match: (MULLW <t> x g:(MOVWload [off] {sym} ptr mem)) // match: (MULLW <t> x g:(MOVWload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (MULLWload <t> [off] {sym} x ptr mem) // result: (MULLWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -14487,7 +14487,7 @@ func rewriteValueS390X_OpS390XMULLW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XMULLWload) v.reset(OpS390XMULLWload)
@ -14500,7 +14500,7 @@ func rewriteValueS390X_OpS390XMULLW(v *Value) bool {
return true return true
} }
// match: (MULLW <t> g:(MOVWload [off] {sym} ptr mem) x) // match: (MULLW <t> g:(MOVWload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (MULLWload <t> [off] {sym} x ptr mem) // result: (MULLWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -14513,7 +14513,7 @@ func rewriteValueS390X_OpS390XMULLW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XMULLWload) v.reset(OpS390XMULLWload)
@ -14526,7 +14526,7 @@ func rewriteValueS390X_OpS390XMULLW(v *Value) bool {
return true return true
} }
// match: (MULLW <t> x g:(MOVWZload [off] {sym} ptr mem)) // match: (MULLW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (MULLWload <t> [off] {sym} x ptr mem) // result: (MULLWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -14539,7 +14539,7 @@ func rewriteValueS390X_OpS390XMULLW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XMULLWload) v.reset(OpS390XMULLWload)
@ -14552,7 +14552,7 @@ func rewriteValueS390X_OpS390XMULLW(v *Value) bool {
return true return true
} }
// match: (MULLW <t> g:(MOVWZload [off] {sym} ptr mem) x) // match: (MULLW <t> g:(MOVWZload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (MULLWload <t> [off] {sym} x ptr mem) // result: (MULLWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -14565,7 +14565,7 @@ func rewriteValueS390X_OpS390XMULLW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XMULLWload) v.reset(OpS390XMULLWload)
@ -14897,7 +14897,7 @@ func rewriteValueS390X_OpS390XOR(v *Value) bool {
return true return true
} }
// match: (OR <t> x g:(MOVDload [off] {sym} ptr mem)) // match: (OR <t> x g:(MOVDload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ORload <t> [off] {sym} x ptr mem) // result: (ORload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -14910,7 +14910,7 @@ func rewriteValueS390X_OpS390XOR(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XORload) v.reset(OpS390XORload)
@ -14923,7 +14923,7 @@ func rewriteValueS390X_OpS390XOR(v *Value) bool {
return true return true
} }
// match: (OR <t> g:(MOVDload [off] {sym} ptr mem) x) // match: (OR <t> g:(MOVDload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ORload <t> [off] {sym} x ptr mem) // result: (ORload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -14936,7 +14936,7 @@ func rewriteValueS390X_OpS390XOR(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XORload) v.reset(OpS390XORload)
@ -15952,7 +15952,7 @@ func rewriteValueS390X_OpS390XORW(v *Value) bool {
return true return true
} }
// match: (ORW <t> x g:(MOVWload [off] {sym} ptr mem)) // match: (ORW <t> x g:(MOVWload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ORWload <t> [off] {sym} x ptr mem) // result: (ORWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -15965,7 +15965,7 @@ func rewriteValueS390X_OpS390XORW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XORWload) v.reset(OpS390XORWload)
@ -15978,7 +15978,7 @@ func rewriteValueS390X_OpS390XORW(v *Value) bool {
return true return true
} }
// match: (ORW <t> g:(MOVWload [off] {sym} ptr mem) x) // match: (ORW <t> g:(MOVWload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ORWload <t> [off] {sym} x ptr mem) // result: (ORWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -15991,7 +15991,7 @@ func rewriteValueS390X_OpS390XORW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XORWload) v.reset(OpS390XORWload)
@ -16004,7 +16004,7 @@ func rewriteValueS390X_OpS390XORW(v *Value) bool {
return true return true
} }
// match: (ORW <t> x g:(MOVWZload [off] {sym} ptr mem)) // match: (ORW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ORWload <t> [off] {sym} x ptr mem) // result: (ORWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -16017,7 +16017,7 @@ func rewriteValueS390X_OpS390XORW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XORWload) v.reset(OpS390XORWload)
@ -16030,7 +16030,7 @@ func rewriteValueS390X_OpS390XORW(v *Value) bool {
return true return true
} }
// match: (ORW <t> g:(MOVWZload [off] {sym} ptr mem) x) // match: (ORW <t> g:(MOVWZload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (ORWload <t> [off] {sym} x ptr mem) // result: (ORWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -16043,7 +16043,7 @@ func rewriteValueS390X_OpS390XORW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XORWload) v.reset(OpS390XORWload)
@ -17105,7 +17105,7 @@ func rewriteValueS390X_OpS390XSUB(v *Value) bool {
return true return true
} }
// match: (SUB <t> x g:(MOVDload [off] {sym} ptr mem)) // match: (SUB <t> x g:(MOVDload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (SUBload <t> [off] {sym} x ptr mem) // result: (SUBload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17118,7 +17118,7 @@ func rewriteValueS390X_OpS390XSUB(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XSUBload) v.reset(OpS390XSUBload)
@ -17258,7 +17258,7 @@ func rewriteValueS390X_OpS390XSUBW(v *Value) bool {
return true return true
} }
// match: (SUBW <t> x g:(MOVWload [off] {sym} ptr mem)) // match: (SUBW <t> x g:(MOVWload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (SUBWload <t> [off] {sym} x ptr mem) // result: (SUBWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17271,7 +17271,7 @@ func rewriteValueS390X_OpS390XSUBW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XSUBWload) v.reset(OpS390XSUBWload)
@ -17284,7 +17284,7 @@ func rewriteValueS390X_OpS390XSUBW(v *Value) bool {
return true return true
} }
// match: (SUBW <t> x g:(MOVWZload [off] {sym} ptr mem)) // match: (SUBW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (SUBWload <t> [off] {sym} x ptr mem) // result: (SUBWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17297,7 +17297,7 @@ func rewriteValueS390X_OpS390XSUBW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XSUBWload) v.reset(OpS390XSUBWload)
@ -17519,7 +17519,7 @@ func rewriteValueS390X_OpS390XXOR(v *Value) bool {
return true return true
} }
// match: (XOR <t> x g:(MOVDload [off] {sym} ptr mem)) // match: (XOR <t> x g:(MOVDload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (XORload <t> [off] {sym} x ptr mem) // result: (XORload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17532,7 +17532,7 @@ func rewriteValueS390X_OpS390XXOR(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XXORload) v.reset(OpS390XXORload)
@ -17545,7 +17545,7 @@ func rewriteValueS390X_OpS390XXOR(v *Value) bool {
return true return true
} }
// match: (XOR <t> g:(MOVDload [off] {sym} ptr mem) x) // match: (XOR <t> g:(MOVDload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (XORload <t> [off] {sym} x ptr mem) // result: (XORload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17558,7 +17558,7 @@ func rewriteValueS390X_OpS390XXOR(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XXORload) v.reset(OpS390XXORload)
@ -17666,7 +17666,7 @@ func rewriteValueS390X_OpS390XXORW(v *Value) bool {
return true return true
} }
// match: (XORW <t> x g:(MOVWload [off] {sym} ptr mem)) // match: (XORW <t> x g:(MOVWload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (XORWload <t> [off] {sym} x ptr mem) // result: (XORWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17679,7 +17679,7 @@ func rewriteValueS390X_OpS390XXORW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XXORWload) v.reset(OpS390XXORWload)
@ -17692,7 +17692,7 @@ func rewriteValueS390X_OpS390XXORW(v *Value) bool {
return true return true
} }
// match: (XORW <t> g:(MOVWload [off] {sym} ptr mem) x) // match: (XORW <t> g:(MOVWload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (XORWload <t> [off] {sym} x ptr mem) // result: (XORWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17705,7 +17705,7 @@ func rewriteValueS390X_OpS390XXORW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XXORWload) v.reset(OpS390XXORWload)
@ -17718,7 +17718,7 @@ func rewriteValueS390X_OpS390XXORW(v *Value) bool {
return true return true
} }
// match: (XORW <t> x g:(MOVWZload [off] {sym} ptr mem)) // match: (XORW <t> x g:(MOVWZload [off] {sym} ptr mem))
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (XORWload <t> [off] {sym} x ptr mem) // result: (XORWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17731,7 +17731,7 @@ func rewriteValueS390X_OpS390XXORW(v *Value) bool {
sym := g.Aux sym := g.Aux
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XXORWload) v.reset(OpS390XXORWload)
@ -17744,7 +17744,7 @@ func rewriteValueS390X_OpS390XXORW(v *Value) bool {
return true return true
} }
// match: (XORW <t> g:(MOVWZload [off] {sym} ptr mem) x) // match: (XORW <t> g:(MOVWZload [off] {sym} ptr mem) x)
// cond: g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)
// result: (XORWload <t> [off] {sym} x ptr mem) // result: (XORWload <t> [off] {sym} x ptr mem)
for { for {
t := v.Type t := v.Type
@ -17757,7 +17757,7 @@ func rewriteValueS390X_OpS390XXORW(v *Value) bool {
ptr := g.Args[0] ptr := g.Args[0]
mem := g.Args[1] mem := g.Args[1]
x := v.Args[1] x := v.Args[1]
if !(g.Uses == 1 && ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) { if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoad(v, g, x) && clobber(g)) {
break break
} }
v.reset(OpS390XXORWload) v.reset(OpS390XXORWload)