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 <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/cmd/compile/internal/gc/swt.go b/src/cmd/compile/internal/gc/swt.go
index 2098228..efd97e6 100644
--- a/src/cmd/compile/internal/gc/swt.go
+++ b/src/cmd/compile/internal/gc/swt.go
@@ -588,20 +588,10 @@
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)