From 70d685dc7244d46b3c22c4ac9588e51d76087ded Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 25 Oct 2016 15:43:05 -0700 Subject: [PATCH] cmd/compile: don't wrap numeric or type literals in OPAREN MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit It's only necessary to wrap named OTYPE or OLITERAL nodes, because their line numbers reflect the line number of the declaration, rather than use. Saves a lot of wrapper nodes in composite-literal-heavy packages like Unicode. name old alloc/op new alloc/op delta Template 41.8MB ± 0% 41.8MB ± 0% -0.07% (p=0.000 n=10+10) Unicode 36.6MB ± 0% 34.2MB ± 0% -6.55% (p=0.000 n=10+10) GoTypes 123MB ± 0% 123MB ± 0% -0.02% (p=0.004 n=10+10) Compiler 495MB ± 0% 495MB ± 0% -0.03% (p=0.000 n=10+10) name old allocs/op new allocs/op delta Template 409k ± 0% 409k ± 0% -0.05% (p=0.029 n=10+10) Unicode 371k ± 0% 354k ± 0% -4.48% (p=0.000 n=10+9) GoTypes 1.22M ± 0% 1.22M ± 0% ~ (p=0.075 n=10+10) Compiler 4.44M ± 0% 4.44M ± 0% -0.02% (p=0.000 n=10+10) Change-Id: Id1183170835125c778fb41b7e76d06d5ecd4f7a1 Reviewed-on: https://go-review.googlesource.com/32021 Run-TryBot: Matthew Dempsky TryBot-Result: Gobot Gobot Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/gc/noder.go | 7 ++++++- src/cmd/compile/internal/gc/subr.go | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/gc/noder.go b/src/cmd/compile/internal/gc/noder.go index 3cfd1cad20..2fdea7cfc8 100644 --- a/src/cmd/compile/internal/gc/noder.go +++ b/src/cmd/compile/internal/gc/noder.go @@ -1053,7 +1053,12 @@ func (p *noder) wrapname(n syntax.Node, x *Node) *Node { // These nodes do not carry line numbers. // Introduce a wrapper node to give them the correct line. switch x.Op { - case ONAME, ONONAME, OTYPE, OPACK, OLITERAL: + case OTYPE, OLITERAL: + if x.Sym == nil { + break + } + fallthrough + case ONAME, ONONAME, OPACK: x = p.nod(n, OPAREN, x, nil) x.Implicit = true } diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go index a73be08eba..555f27e2b0 100644 --- a/src/cmd/compile/internal/gc/subr.go +++ b/src/cmd/compile/internal/gc/subr.go @@ -202,10 +202,10 @@ func setlineno(n *Node) int32 { lno := lineno if n != nil { switch n.Op { - case ONAME, OTYPE, OPACK: + case ONAME, OPACK: break - case OLITERAL: + case OLITERAL, OTYPE: if n.Sym != nil { break } -- 2.48.1