]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: avoid appends and allocate full slice length in copyRet
authorMartin Möhrmann <moehrmann@google.com>
Sun, 21 Jan 2018 11:53:53 +0000 (12:53 +0100)
committerMartin Möhrmann <martisch@uos.de>
Tue, 23 Oct 2018 16:59:25 +0000 (16:59 +0000)
passes toolstash -cmp

compilebench allocs:
name      old allocs/op   new allocs/op   delta
Template       385k ± 0%       385k ± 0%  -0.00%  (p=0.017 n=19+20)
Unicode        342k ± 0%       342k ± 0%    ~     (p=0.867 n=20+20)
GoTypes       1.15M ± 0%      1.15M ± 0%  -0.00%  (p=0.008 n=20+20)
SSA           12.1M ± 0%      12.1M ± 0%    ~     (p=0.141 n=20+19)
Flate          234k ± 0%       234k ± 0%    ~     (p=0.125 n=20+19)
GoParser       315k ± 0%       315k ± 0%    ~     (p=0.104 n=20+20)
Reflect        972k ± 0%       972k ± 0%  -0.00%  (p=0.000 n=17+20)
Tar            391k ± 0%       391k ± 0%  -0.01%  (p=0.000 n=19+20)
XML            404k ± 0%       403k ± 0%  -0.01%  (p=0.000 n=20+19)

Change-Id: Ie24f7fae7b6b85422ec1ff0240f08f0a34064d72
Reviewed-on: https://go-review.googlesource.com/c/144038
Run-TryBot: Martin Möhrmann <martisch@uos.de>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/order.go

index 3d0fa6ceb2415109e1d66953e8452e9b94adb6d6..da2b3343a131f5f07ff8756edf00d8538b39c16d 100644 (file)
@@ -406,11 +406,13 @@ func (o *Order) copyRet(n *Node) []*Node {
                Fatalf("copyret %v %d", n.Type, n.Left.Type.NumResults())
        }
 
-       var l1, l2 []*Node
-       for _, f := range n.Type.Fields().Slice() {
-               tmp := temp(f.Type)
-               l1 = append(l1, tmp)
-               l2 = append(l2, tmp)
+       slice := n.Type.Fields().Slice()
+       l1 := make([]*Node, len(slice))
+       l2 := make([]*Node, len(slice))
+       for i, t := range slice {
+               tmp := temp(t.Type)
+               l1[i] = tmp
+               l2[i] = tmp
        }
 
        as := nod(OAS2, nil, nil)