]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: preserve name association when eliding copies in expand_calls
authorCherry Zhang <cherryyz@google.com>
Sun, 11 Apr 2021 16:07:33 +0000 (12:07 -0400)
committerCherry Zhang <cherryyz@google.com>
Mon, 12 Apr 2021 17:08:49 +0000 (17:08 +0000)
If v is a Copy of x, we will rewrite v to x. If v has a name
associated to it, let the name associate to x.

Under register ABI, this helps associate in-register Arg values
to the parameters' names. (But does not address all cases.)

Change-Id: I47c779e56c9d0823a88890497e32326bc0290f82
Reviewed-on: https://go-review.googlesource.com/c/go/+/309330
Trust: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
src/cmd/compile/internal/ssa/expand_calls.go

index cb8b2eeec883e4f194145ee039cedeb571fc10ea..d947443cb25cfff3b4b870734a157a832f703d4e 100644 (file)
@@ -1449,6 +1449,19 @@ func expandCalls(f *Func) {
        }
 
        // Step 6: elide any copies introduced.
+       // Update named values.
+       for _, name := range f.Names {
+               values := f.NamedValues[name]
+               for i, v := range values {
+                       if v.Op == OpCopy {
+                               a := v.Args[0]
+                               for a.Op == OpCopy {
+                                       a = a.Args[0]
+                               }
+                               values[i] = a
+                       }
+               }
+       }
        for _, b := range f.Blocks {
                for _, v := range b.Values {
                        for i, a := range v.Args {