Skip to content

Commit

Permalink
cmd/compile: remove useless block-indirection in type switch
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mdempsky committed Oct 7, 2019
1 parent e1446d9 commit ab00f89
Showing 1 changed file with 3 additions and 13 deletions.
16 changes: 3 additions & 13 deletions src/cmd/compile/internal/gc/swt.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit ab00f89

Please sign in to comment.