]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix optimization of Zero newobject on amd64p32
authorCherry Zhang <cherryyz@google.com>
Fri, 3 Mar 2017 18:53:13 +0000 (13:53 -0500)
committerCherry Zhang <cherryyz@google.com>
Fri, 3 Mar 2017 20:36:31 +0000 (20:36 +0000)
On amd64p32, PtrSize and RegSize don't agree, and function return
value is aligned with RegSize. Fix this rule. Other architectures
are not affected, where PtrSize and RegSize are the same.

Change-Id: If187d3dfde3dc3b931b8e97db5eeff49a781551b
Reviewed-on: https://go-review.googlesource.com/37720
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/gen/generic.rules
src/cmd/compile/internal/ssa/rewritegeneric.go

index 740ba8606a0d99d4f9930aea2891f2bea35c2ce6..4adbc9e45f0962448ae61c4008dbc149f85446ba 100644 (file)
 
 // recognize runtime.newobject and don't Zero/Nilcheck it
 (Zero (Load (OffPtr [c] (SP)) mem) mem)
-        && mem.Op == OpStaticCall
+       && mem.Op == OpStaticCall
        && isSameSym(mem.Aux, "runtime.newobject")
-       && c == config.ctxt.FixedFrameSize() + config.PtrSize // offset of return value
+       && c == config.ctxt.FixedFrameSize() + config.RegSize // offset of return value
        -> mem
 // nil checks just need to rewrite to something useless.
 // they will be deadcode eliminated soon afterwards.
index f17bf3343cac378cda48350f0bfed9a248ca2673..0709eb89bbf420bd9150fdbc48d31f726ca3f406 100644 (file)
@@ -17210,7 +17210,7 @@ func rewriteValuegeneric_OpZero(v *Value, config *Config) bool {
        b := v.Block
        _ = b
        // match: (Zero (Load (OffPtr [c] (SP)) mem) mem)
-       // cond: mem.Op == OpStaticCall         && isSameSym(mem.Aux, "runtime.newobject")      && c == config.ctxt.FixedFrameSize() + config.PtrSize
+       // cond: mem.Op == OpStaticCall         && isSameSym(mem.Aux, "runtime.newobject")      && c == config.ctxt.FixedFrameSize() + config.RegSize
        // result: mem
        for {
                v_0 := v.Args[0]
@@ -17230,7 +17230,7 @@ func rewriteValuegeneric_OpZero(v *Value, config *Config) bool {
                if mem != v.Args[1] {
                        break
                }
-               if !(mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.PtrSize) {
+               if !(mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize) {
                        break
                }
                v.reset(OpCopy)