]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: remove last manual node copies
authorDaniel Martí <mvdan@mvdan.cc>
Thu, 5 Apr 2018 13:45:38 +0000 (14:45 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Tue, 10 Apr 2018 15:25:31 +0000 (15:25 +0000)
When I added the Node.copy method, I converted most of the occurrences
but missed a few.

One of them, used only for gdata, was an unnecessary copy given that
gdata does not modify the node it is passed.

No allocation changes in compilebench.

Passes toolstash -cmp on std cmd.

Change-Id: I7fba5212377b75c6d6b3785e594a30568ff0732e
Reviewed-on: https://go-review.googlesource.com/104937
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/const.go
src/cmd/compile/internal/gc/sinit.go

index 27c2e14d767d24c6a4ba998ea201e79af13ca095..a239cd6d3edfc4437b7e5f1d3e9752d5577c841f 100644 (file)
@@ -1184,9 +1184,8 @@ func setconst(n *Node, v Val) {
        // Ensure n.Orig still points to a semantically-equivalent
        // expression after we rewrite n into a constant.
        if n.Orig == n {
-               var ncopy Node
-               n.Orig = &ncopy
-               ncopy = *n
+               n.Orig = n.copy()
+               n.Orig.Orig = n.Orig
        }
 
        *n = Node{
index edd098b1ec27867e17900b23f3856f75485aefce..d083fc420891130255971c938fa2cd45c0c30d20 100644 (file)
@@ -472,8 +472,7 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool {
                        }
                        // Closures with no captured variables are globals,
                        // so the assignment can be done at link time.
-                       n := *l
-                       gdata(&n, r.Func.Closure.Func.Nname, Widthptr)
+                       gdata(l, r.Func.Closure.Func.Nname, Widthptr)
                        return true
                }
                closuredebugruntimecheck(r)
@@ -504,10 +503,10 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool {
                }
 
                // Create a copy of l to modify while we emit data.
-               n := *l
+               n := l.copy()
 
                // Emit itab, advance offset.
-               gdata(&n, itab, Widthptr)
+               gdata(n, itab, Widthptr)
                n.Xoffset += int64(Widthptr)
 
                // Emit data.
@@ -519,10 +518,10 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool {
                        // Copy val directly into n.
                        n.Type = val.Type
                        setlineno(val)
-                       a := n
-                       a.Orig = &a
-                       if !staticassign(&a, val, out) {
-                               *out = append(*out, nod(OAS, &a, val))
+                       a := n.copy()
+                       a.Orig = a
+                       if !staticassign(a, val, out) {
+                               *out = append(*out, nod(OAS, a, val))
                        }
                } else {
                        // Construct temp to hold val, write pointer to temp into n.
@@ -533,7 +532,7 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool {
                        }
                        ptr := nod(OADDR, a, nil)
                        n.Type = types.NewPtr(val.Type)
-                       gdata(&n, ptr, Widthptr)
+                       gdata(n, ptr, Widthptr)
                }
 
                return true