• Austin Clements's avatar
    cmd/compile: enable stack maps everywhere except unsafe points · a367f44c
    Austin Clements authored
    This modifies issafepoint in liveness analysis to report almost every
    operation as a safe point. There are four things we don't mark as
    safe-points:
    
    1. Runtime code (other than at calls).
    
    2. go:nosplit functions (other than at calls).
    
    3. Instructions between the load of the write barrier-enabled flag and
       the write.
    
    4. Instructions leading up to a uintptr -> unsafe.Pointer conversion.
    
    We'll optimize this in later CLs:
    
    name        old time/op       new time/op       delta
    Template          185ms ± 2%        190ms ± 2%   +2.95%  (p=0.000 n=10+10)
    Unicode          96.3ms ± 3%       96.4ms ± 1%     ~     (p=0.905 n=10+9)
    GoTypes           658ms ± 0%        669ms ± 1%   +1.72%  (p=0.000 n=10+9)
    Compiler          3.14s ± 1%        3.18s ± 1%   +1.56%  (p=0.000 n=9+10)
    SSA               7.41s ± 2%        7.59s ± 1%   +2.48%  (p=0.000 n=9+10)
    Flate             126ms ± 1%        128ms ± 1%   +2.08%  (p=0.000 n=10+10)
    GoParser          153ms ± 1%        157ms ± 2%   +2.38%  (p=0.000 n=10+10)
    Reflect           437ms ± 1%        442ms ± 1%   +0.98%  (p=0.001 n=10+10)
    Tar               178ms ± 1%        179ms ± 1%   +0.67%  (p=0.035 n=10+9)
    XML               223ms ± 1%        229ms ± 1%   +2.58%  (p=0.000 n=10+10)
    [Geo mean]        394ms             401ms        +1.75%
    
    No effect on binary size because we're not yet emitting these extra
    safe points.
    
    For #24543.
    
    Change-Id: I16a1eebb9183cad7cef9d53c0fd21a973cad6859
    Reviewed-on: https://go-review.googlesource.com/109348
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarDavid Chase <drchase@google.com>
    a367f44c
func.go 20 KB