Skip to content

Commit d36a6bf

Browse files
committed
[dev.regabi] cmd/compile: improve walkReturn common case
Instead of evaluating all result expressions up front and then assigning them to their result destinations, we can interleave evaluation with assignment. This reduces how much temporary stack/register space is needed to hold the values in flight. Doesn't pass toolstash -cmp, because it allows better return statement code to be generated. E.g., cmd/go's text segment on linux/ppc64le shrinks another 1kB. Change-Id: I3fe889342c80e947e0118704ec01f1682c577e6e Reviewed-on: https://go-review.googlesource.com/c/go/+/281153 Trust: Matthew Dempsky <[email protected]> Run-TryBot: Matthew Dempsky <[email protected]> TryBot-Result: Go Bot <[email protected]> Reviewed-by: Cuong Manh Le <[email protected]>
1 parent a317067 commit d36a6bf

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

src/cmd/compile/internal/walk/assign.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,10 +253,9 @@ func walkReturn(n *ir.ReturnStmt) ir.Node {
253253

254254
// Common case: Assignment order doesn't matter. Simply assign to
255255
// each result parameter in order.
256-
walkExprList(n.Results, n.PtrInit())
257-
res := make([]ir.Node, len(results))
256+
var res ir.Nodes
258257
for i, v := range n.Results {
259-
res[i] = convas(ir.NewAssignStmt(base.Pos, dsts[i], v), n.PtrInit())
258+
appendWalkStmt(&res, convas(ir.NewAssignStmt(base.Pos, dsts[i], v), &res))
260259
}
261260
n.Results = res
262261
return n

0 commit comments

Comments
 (0)