]> Cypherpunks.ru repositories - gostls13.git/commit
cmd/compile: reimplement parameter leak encoding
authorMatthew Dempsky <mdempsky@google.com>
Fri, 27 Sep 2019 00:21:50 +0000 (17:21 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 7 Oct 2019 18:50:14 +0000 (18:50 +0000)
commita0894ea5b5c326f1ddc7c4c6674d5858f8761dc8
treea31830cdd8398f774fd26a4a502d66d1eda2725f
parent05a805a6de9c1b49ee1d5d55589a119cae5ab556
cmd/compile: reimplement parameter leak encoding

Currently, escape analysis is able to record at most one dereference
when a parameter leaks to the heap; that is, at call sites, it can't
distinguish between any of these three functions:

    func x1(p ****int) { sink = *p }
    func x2(p ****int) { sink = **p }
    func x3(p ****int) { sink = ***p }

Similarly, it's limited to recording parameter leaks to only the first
4 parameters, and only up to 6 dereferences.

All of these limitations are due to the awkward encoding scheme used
at the moment.

This CL replaces the encoding scheme with a simple [8]uint8 array,
which can handle up to the first 7 parameters, and up to 254
dereferences, which ought to be enough for anyone. And if not, it's
much more easily increased.

Shrinks export data size geometric mean for Kubernetes by 0.07%.

Fixes #33981.

Change-Id: I10a94b9accac9a0c91490e0d6d458316f5ca1e13
Reviewed-on: https://go-review.googlesource.com/c/go/+/197680
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/compile/internal/gc/esc.go
src/cmd/compile/internal/gc/escape.go
test/escape_param.go