From ab00f89c2742792ae23c6861e82c4b0b6cc6376b Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 7 Oct 2019 13:33:39 -0700 Subject: [PATCH] cmd/compile: remove useless block-indirection in type switch Previously, when emitting type switches without an explicit "case nil" clause, we would emit: if x == nil { goto Lnil } ... Lnil: goto Ldefault But we can instead just emit: if x == nil { goto Ldefault } Doesn't pass toolstash-check; seems like it causes some harmless instruction scheduling changes. Change-Id: Ie233dda26756911e93a08b3db40407ba38694c62 Reviewed-on: https://go-review.googlesource.com/c/go/+/199644 Run-TryBot: Matthew Dempsky Reviewed-by: Keith Randall TryBot-Result: Gobot Gobot --- src/cmd/compile/internal/gc/swt.go | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/cmd/compile/internal/gc/swt.go b/src/cmd/compile/internal/gc/swt.go index 2098228d75..efd97e6b78 100644 --- a/src/cmd/compile/internal/gc/swt.go +++ b/src/cmd/compile/internal/gc/swt.go @@ -588,20 +588,10 @@ func walkTypeSwitch(sw *Node) { if defaultGoto == nil { defaultGoto = br } - - if nilGoto != nil { - ifNil.Nbody.Set1(nilGoto) - } else { - // TODO(mdempsky): Just use defaultGoto directly. - - // Jump to default case. - label := autolabel(".s") - ifNil.Nbody.Set1(nodSym(OGOTO, nil, label)) - // Wrap default case with label. - blk := nod(OBLOCK, nil, nil) - blk.List.Set2(nodSym(OLABEL, nil, label), defaultGoto) - defaultGoto = blk + if nilGoto == nil { + nilGoto = defaultGoto } + ifNil.Nbody.Set1(nilGoto) s.Emit(&sw.Nbody) sw.Nbody.Append(defaultGoto)