]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: resolve TODO in inl.go
authorzikaeroh <zikaeroh@gmail.com>
Tue, 7 Sep 2021 07:38:40 +0000 (00:38 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 7 Sep 2021 19:39:04 +0000 (19:39 +0000)
If the condition is a bool constant, there's no need to walk both
branches.

Passes toolstash -cmp.

Change-Id: I4ee5e3553ce07c2213efba0d33d869b4a1b57783
Reviewed-on: https://go-review.googlesource.com/c/go/+/347911
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Trust: Keith Randall <khr@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/inline/inl.go

index d50d8b3516f1ae529e0afbde8ede58825abc911c..073373144d4a6c45b4a30b818114708fb6d3b610 100644 (file)
@@ -398,10 +398,14 @@ func (v *hairyVisitor) doNode(n ir.Node) bool {
                n := n.(*ir.IfStmt)
                if ir.IsConst(n.Cond, constant.Bool) {
                        // This if and the condition cost nothing.
-                       // TODO(rsc): It seems strange that we visit the dead branch.
-                       return doList(n.Init(), v.do) ||
-                               doList(n.Body, v.do) ||
-                               doList(n.Else, v.do)
+                       if doList(n.Init(), v.do) {
+                               return true
+                       }
+                       if ir.BoolVal(n.Cond) {
+                               return doList(n.Body, v.do)
+                       } else {
+                               return doList(n.Else, v.do)
+                       }
                }
 
        case ir.ONAME: