]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: remove useless block-indirection in type switch
authorMatthew Dempsky <mdempsky@google.com>
Mon, 7 Oct 2019 20:33:39 +0000 (13:33 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 7 Oct 2019 20:58:25 +0000 (20:58 +0000)
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>

src/cmd/compile/internal/gc/swt.go

index 2098228d752cc4e66da8a4cab6914931d5f18d67..efd97e6b78d0f13e0f819da575f578967d8fb5b4 100644 (file)
@@ -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)