]> Cypherpunks.ru repositories - gostls13.git/commit
[dev.typeparams] cmd/compile: optimize wrapping of constant arguments
authorMatthew Dempsky <mdempsky@google.com>
Wed, 23 Jun 2021 07:49:03 +0000 (00:49 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Wed, 23 Jun 2021 16:48:35 +0000 (16:48 +0000)
commita72a499c24cfcfce2a16ac7c228c2c914c4f36c4
tree19042a1078728d438c7c3970ea63e5b209577b99
parenteb691fdd62c9f1dc36c9c9a974ac2ddad677fd99
[dev.typeparams] cmd/compile: optimize wrapping of constant arguments

When wrapping a go/defer statement like:

go f(g(), "x", 42)

we were wrapping it like:

_0, _1, _2, _3 := f, g(), "x", 42
go func() { _0(_1, _2, _3) }()

This is simple and general (and often necessary), but suboptimal in
some cases, such as this. Instead of evaluating the constant arguments
at the go/defer statement, and storing them into the closure context,
we can just keep them in the wrapped call expression.

This CL changes the code to instead generate (assuming f is a declared
function, not a function-typed variable):

_0 := g()
go func() { f(_0, "x", 42) }()

Change-Id: I2bdd4951e7ee93363e1656ecf9b5bd69a121c38a
Reviewed-on: https://go-review.googlesource.com/c/go/+/330332
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
src/cmd/compile/internal/escape/call.go