mirror of
https://github.com/golang/go
synced 2024-11-07 13:46:19 -07:00
cmd/compile: avoid appends and allocate full slice length in copyRet
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>
This commit is contained in:
parent
642792350c
commit
5dbc67a99a
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user