From: Josh Bleecher Snyder Date: Mon, 27 Feb 2017 18:45:26 +0000 (-0800) Subject: cmd/compile: simplify and clean up inlnode X-Git-Tag: go1.9beta1~1420 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0df81e88876e0b2b40b13e49d6be12c26334070b;p=gostls13.git cmd/compile: simplify and clean up inlnode Change-Id: I0d14d68b57e8605cdae8a45d6fa97255a42297d8 Reviewed-on: https://go-review.googlesource.com/37521 Run-TryBot: Josh Bleecher Snyder Reviewed-by: Matthew Dempsky TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/compile/internal/gc/inl.go b/src/cmd/compile/internal/gc/inl.go index a1fd20d637..5e6c3f3207 100644 --- a/src/cmd/compile/internal/gc/inl.go +++ b/src/cmd/compile/internal/gc/inl.go @@ -405,7 +405,7 @@ func inlnode(n *Node) *Node { case OCALLFUNC, OCALLMETH: n.Left.setNoInline(true) } - fallthrough + return n // TODO do them here (or earlier), // so escape analysis can avoid more heapmoves. @@ -445,14 +445,9 @@ func inlnode(n *Node) *Node { } } - // if we just replaced arg in f(arg()) or return arg with an inlined call - // and arg returns multiple values, glue as list - case ORETURN, - OCALLFUNC, - OCALLMETH, - OCALLINTER, - OAPPEND, - OCOMPLEX: + case ORETURN, OCALLFUNC, OCALLMETH, OCALLINTER, OAPPEND, OCOMPLEX: + // if we just replaced arg in f(arg()) or return arg with an inlined call + // and arg returns multiple values, glue as list if n.List.Len() == 1 && n.List.First().Op == OINLCALL && n.List.First().Rlist.Len() > 1 { n.List.Set(inlconv2list(n.List.First())) break @@ -469,18 +464,12 @@ func inlnode(n *Node) *Node { } inlnodelist(n.Rlist) - switch n.Op { - case OAS2FUNC: - if n.Rlist.First().Op == OINLCALL { - n.Rlist.Set(inlconv2list(n.Rlist.First())) - n.Op = OAS2 - n.Typecheck = 0 - n = typecheck(n, Etop) - break - } - fallthrough - - default: + if n.Op == OAS2FUNC && n.Rlist.First().Op == OINLCALL { + n.Rlist.Set(inlconv2list(n.Rlist.First())) + n.Op = OAS2 + n.Typecheck = 0 + n = typecheck(n, Etop) + } else { s := n.Rlist.Slice() for i1, n1 := range s { if n1.Op == OINLCALL {