• Matthew Dempsky's avatar
    cmd/compile: reimplement parameter leak encoding · a0894ea5
    Matthew Dempsky authored
    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/+/197680Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
    a0894ea5
escape.go 34.3 KB