From d1faf3879ede9efc9f1907dfad04bac8ec08d598 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Fri, 27 May 2016 15:33:11 -0700 Subject: [PATCH] =?utf8?q?cmd/compile:=20don=E2=80=99t=20generate=20pointl?= =?utf8?q?ess=20gotos=20during=20inlining?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Their only purpose in life was to suppress an error. Suppress that error explicitly instead by reusing an existing, aptly named Node field. This generates fewer blocks during ssa construction. name old alloc/op new alloc/op delta Template 47.5MB ± 0% 47.2MB ± 0% -0.72% (p=0.000 n=15+15) Unicode 36.8MB ± 0% 36.8MB ± 0% ~ (p=0.775 n=15+15) GoTypes 143MB ± 0% 142MB ± 0% -1.03% (p=0.000 n=15+14) Compiler 686MB ± 0% 674MB ± 0% -1.75% (p=0.000 n=15+15) name old allocs/op new allocs/op delta Template 446k ± 0% 445k ± 0% -0.20% (p=0.000 n=15+15) Unicode 355k ± 0% 355k ± 0% ~ (p=0.235 n=13+15) GoTypes 1.36M ± 0% 1.36M ± 0% -0.41% (p=0.000 n=13+15) Compiler 5.77M ± 0% 5.70M ± 0% -1.16% (p=0.000 n=15+15) Change-Id: I5f14afb833c9d355688d9a229eb820e95c7657bf Reviewed-on: https://go-review.googlesource.com/27461 Run-TryBot: Josh Bleecher Snyder Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/cmd/compile/internal/gc/gen.go | 3 +++ src/cmd/compile/internal/gc/inl.go | 5 +++-- src/cmd/compile/internal/gc/ssa.go | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/gc/gen.go b/src/cmd/compile/internal/gc/gen.go index fc0003da81..e86875d95c 100644 --- a/src/cmd/compile/internal/gc/gen.go +++ b/src/cmd/compile/internal/gc/gen.go @@ -217,6 +217,9 @@ func newlab(n *Node) *Label { lab = new(Label) lab.Sym = s s.Label = lab + if n.Used { + lab.Used = true + } labellist = append(labellist, lab) } diff --git a/src/cmd/compile/internal/gc/inl.go b/src/cmd/compile/internal/gc/inl.go index a669df819f..8245a73791 100644 --- a/src/cmd/compile/internal/gc/inl.go +++ b/src/cmd/compile/internal/gc/inl.go @@ -778,8 +778,9 @@ func mkinlcall1(n *Node, fn *Node, isddd bool) *Node { body := subst.list(fn.Func.Inl) - body = append(body, Nod(OGOTO, retlabel, nil)) // avoid 'not used' when function doesn't have return - body = append(body, Nod(OLABEL, retlabel, nil)) + lab := Nod(OLABEL, retlabel, nil) + lab.Used = true // avoid 'not used' when function doesn't have return + body = append(body, lab) typecheckslice(body, Etop) diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 304f446df1..e801f2ce28 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -193,7 +193,7 @@ func buildssa(fn *Node) *ssa.Func { // Check that we used all labels for name, lab := range s.labels { - if !lab.used() && !lab.reported { + if !lab.used() && !lab.reported && !lab.defNode.Used { yyerrorl(lab.defNode.Lineno, "label %v defined and not used", name) lab.reported = true } -- 2.48.1