]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix constant propagation through s390x MOVDNE instructions
authorMichael Munday <munday@ca.ibm.com>
Sat, 21 Jan 2017 03:03:13 +0000 (22:03 -0500)
committerMichael Munday <munday@ca.ibm.com>
Sat, 21 Jan 2017 03:20:55 +0000 (03:20 +0000)
The constant propagation rules selected the wrong operand to
propagate. So MOVDNE (move if not equal) propagated operands as if
it were a MOVDEQ (move if equal).

Fixes #18735.

Change-Id: I87ac469172f9df7d5aabaf7106e2936ce54ae202
Reviewed-on: https://go-review.googlesource.com/35498
Run-TryBot: Michael Munday <munday@ca.ibm.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/ssa/gen/S390X.rules
src/cmd/compile/internal/ssa/rewriteS390X.go

index 3e0533a95142d3bb8f883a8b609339086bca9ce7..be0d581fe099289c09ee805370af5588848cdee7 100644 (file)
 (MOVDEQ y _ (FlagLT)) -> y
 (MOVDEQ y _ (FlagGT)) -> y
 
-(MOVDNE _ y (FlagEQ)) -> y
-(MOVDNE x _ (FlagLT)) -> x
-(MOVDNE x _ (FlagGT)) -> x
+(MOVDNE y _ (FlagEQ)) -> y
+(MOVDNE _ x (FlagLT)) -> x
+(MOVDNE _ x (FlagGT)) -> x
 
 (MOVDLT y _ (FlagEQ)) -> y
 (MOVDLT _ x (FlagLT)) -> x
index 7d023bcf8ba38f18b04fac62a4cd22694d622182..5acaf2dbdc4fcb1466c36afa07112dcbd8f4de07 100644 (file)
@@ -9847,11 +9847,11 @@ func rewriteValueS390X_OpS390XMOVDNE(v *Value, config *Config) bool {
                v.AddArg(cmp)
                return true
        }
-       // match: (MOVDNE _ y (FlagEQ))
+       // match: (MOVDNE y _ (FlagEQ))
        // cond:
        // result: y
        for {
-               y := v.Args[1]
+               y := v.Args[0]
                v_2 := v.Args[2]
                if v_2.Op != OpS390XFlagEQ {
                        break
@@ -9861,11 +9861,11 @@ func rewriteValueS390X_OpS390XMOVDNE(v *Value, config *Config) bool {
                v.AddArg(y)
                return true
        }
-       // match: (MOVDNE x _ (FlagLT))
+       // match: (MOVDNE _ x (FlagLT))
        // cond:
        // result: x
        for {
-               x := v.Args[0]
+               x := v.Args[1]
                v_2 := v.Args[2]
                if v_2.Op != OpS390XFlagLT {
                        break
@@ -9875,11 +9875,11 @@ func rewriteValueS390X_OpS390XMOVDNE(v *Value, config *Config) bool {
                v.AddArg(x)
                return true
        }
-       // match: (MOVDNE x _ (FlagGT))
+       // match: (MOVDNE _ x (FlagGT))
        // cond:
        // result: x
        for {
-               x := v.Args[0]
+               x := v.Args[1]
                v_2 := v.Args[2]
                if v_2.Op != OpS390XFlagGT {
                        break