From a03618500c25690ea96308030e678178641127ed Mon Sep 17 00:00:00 2001 From: Michael Munday Date: Mon, 6 Apr 2020 23:42:55 +0100 Subject: [PATCH] cmd/compile: simplify s390x 'operation with memory operand' rules The generated code remains exactly the same. Change-Id: Id70af46b6c3c18153789961e5589eab717c3316e Reviewed-on: https://go-review.googlesource.com/c/go/+/227164 Run-TryBot: Michael Munday TryBot-Result: Gobot Gobot Reviewed-by: Cherry Zhang --- src/cmd/compile/internal/ssa/gen/S390X.rules | 55 +++++++------------- 1 file changed, 18 insertions(+), 37 deletions(-) diff --git a/src/cmd/compile/internal/ssa/gen/S390X.rules b/src/cmd/compile/internal/ssa/gen/S390X.rules index f6dc6dea46..0ce80142c2 100644 --- a/src/cmd/compile/internal/ssa/gen/S390X.rules +++ b/src/cmd/compile/internal/ssa/gen/S390X.rules @@ -1222,44 +1222,25 @@ // Fold memory operations into operations. // Exclude global data (SB) because these instructions cannot handle relative addresses. -// TODO(mundaym): use LARL in the assembler to handle SB? // TODO(mundaym): indexed versions of these? -(ADD x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ADDload [off] {sym} x ptr mem) -(ADDW x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ADDWload [off] {sym} x ptr mem) -(ADDW x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ADDWload [off] {sym} x ptr mem) -(MULLD x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (MULLDload [off] {sym} x ptr mem) -(MULLW x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (MULLWload [off] {sym} x ptr mem) -(MULLW x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (MULLWload [off] {sym} x ptr mem) -(SUB x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (SUBload [off] {sym} x ptr mem) -(SUBW x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (SUBWload [off] {sym} x ptr mem) -(SUBW x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (SUBWload [off] {sym} x ptr mem) -(AND x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ANDload [off] {sym} x ptr mem) -(ANDW x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ANDWload [off] {sym} x ptr mem) -(ANDW x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ANDWload [off] {sym} x ptr mem) -(OR x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ORload [off] {sym} x ptr mem) -(ORW x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ORWload [off] {sym} x ptr mem) -(ORW x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (ORWload [off] {sym} x ptr mem) -(XOR x g:(MOVDload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (XORload [off] {sym} x ptr mem) -(XORW x g:(MOVWload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (XORWload [off] {sym} x ptr mem) -(XORW x g:(MOVWZload [off] {sym} ptr mem)) && ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) - -> (XORWload [off] {sym} x ptr mem) +((ADD|SUB|MULLD|AND|OR|XOR) x g:(MOVDload [off] {sym} ptr mem)) + && ptr.Op != OpSB + && is20Bit(off) + && canMergeLoadClobber(v, g, x) + && clobber(g) + -> ((ADD|SUB|MULLD|AND|OR|XOR)load [off] {sym} x ptr mem) +((ADD|SUB|MULL|AND|OR|XOR)W x g:(MOVWload [off] {sym} ptr mem)) + && ptr.Op != OpSB + && is20Bit(off) + && canMergeLoadClobber(v, g, x) + && clobber(g) + -> ((ADD|SUB|MULL|AND|OR|XOR)Wload [off] {sym} x ptr mem) +((ADD|SUB|MULL|AND|OR|XOR)W x g:(MOVWZload [off] {sym} ptr mem)) + && ptr.Op != OpSB + && is20Bit(off) + && canMergeLoadClobber(v, g, x) + && clobber(g) + -> ((ADD|SUB|MULL|AND|OR|XOR)Wload [off] {sym} x ptr mem) // Combine constant stores into larger (unaligned) stores. // Avoid SB because constant stores to relative offsets are -- 2.50.0