• Josh Bleecher Snyder's avatar
    cmd/compile: make liveness more efficient · b612ab3a
    Josh Bleecher Snyder authored
    When the number of variables in a function is very large,
    liveness analysis gets less efficient, since every bit vector
    is O(number of variables).
    
    Improve the situation by returning a sparse representation
    from progeffects. In all scenarios, progeffects either
    returns a slice that is shared function-wide, 
    and which is usually small, or a slice that is guaranteed
    to have at most three values.
    
    Reduces compilation time for the code in #8225 Comment 1 by ~10%.
    Minor effects on regular packages (below).
    
    Passes toolstash -cmp.
    
    Updates #8225
    
    name       old time/op      new time/op      delta
    Template        215ms ± 2%       212ms ± 4%  -1.31%  (p=0.001 n=30+30)
    Unicode        98.3ms ± 3%      98.4ms ± 5%    ~     (p=0.971 n=30+30)
    GoTypes         657ms ± 3%       651ms ± 2%  -0.98%  (p=0.001 n=30+27)
    Compiler        2.78s ± 2%       2.77s ± 2%  -0.60%  (p=0.006 n=30+30)
    Flate           130ms ± 4%       130ms ± 4%    ~     (p=0.712 n=29+30)
    GoParser        159ms ± 5%       158ms ± 3%    ~     (p=0.331 n=29+30)
    Reflect         406ms ± 3%       404ms ± 3%  -0.69%  (p=0.041 n=29+30)
    Tar             117ms ± 4%       117ms ± 3%    ~     (p=0.886 n=30+29)
    XML             219ms ± 2%       217ms ± 2%    ~     (p=0.091 n=29+24)
    
    name       old user-ns/op   new user-ns/op   delta
    Template   272user-ms ± 3%  270user-ms ± 3%  -1.03%  (p=0.004 n=30+30)
    Unicode    138user-ms ± 2%  138user-ms ± 3%    ~     (p=0.902 n=29+29)
    GoTypes    891user-ms ± 2%  883user-ms ± 2%  -0.95%  (p=0.000 n=29+29)
    Compiler   3.85user-s ± 2%  3.84user-s ± 2%    ~     (p=0.236 n=30+30)
    Flate      167user-ms ± 2%  166user-ms ± 4%    ~     (p=0.511 n=28+30)
    GoParser   211user-ms ± 4%  210user-ms ± 3%    ~     (p=0.287 n=29+30)
    Reflect    539user-ms ± 3%  536user-ms ± 2%  -0.59%  (p=0.034 n=29+30)
    Tar        154user-ms ± 3%  155user-ms ± 4%    ~     (p=0.786 n=30+30)
    XML        289user-ms ± 3%  288user-ms ± 4%    ~     (p=0.249 n=30+26)
    
    name       old alloc/op     new alloc/op     delta
    Template       40.7MB ± 0%      40.8MB ± 0%  +0.09%  (p=0.001 n=30+30)
    Unicode        30.8MB ± 0%      30.8MB ± 0%    ~     (p=0.112 n=30+30)
    GoTypes         123MB ± 0%       124MB ± 0%  +0.09%  (p=0.000 n=30+30)
    Compiler        473MB ± 0%       473MB ± 0%  +0.05%  (p=0.000 n=30+30)
    Flate          26.5MB ± 0%      26.5MB ± 0%    ~     (p=0.186 n=29+30)
    GoParser       32.3MB ± 0%      32.4MB ± 0%  +0.07%  (p=0.021 n=28+30)
    Reflect        84.4MB ± 0%      84.6MB ± 0%  +0.21%  (p=0.000 n=30+30)
    Tar            27.3MB ± 0%      27.3MB ± 0%  +0.09%  (p=0.010 n=30+28)
    XML            44.7MB ± 0%      44.7MB ± 0%  +0.07%  (p=0.002 n=30+30)
    
    name       old allocs/op    new allocs/op    delta
    Template         401k ± 1%        400k ± 1%    ~     (p=0.321 n=30+30)
    Unicode          331k ± 1%        331k ± 1%    ~     (p=0.357 n=30+28)
    GoTypes         1.24M ± 0%       1.24M ± 1%  -0.19%  (p=0.001 n=30+30)
    Compiler        4.27M ± 0%       4.27M ± 0%  -0.13%  (p=0.000 n=30+30)
    Flate            252k ± 1%        251k ± 1%  -0.30%  (p=0.005 n=30+30)
    GoParser         325k ± 1%        325k ± 1%    ~     (p=0.224 n=28+30)
    Reflect         1.06M ± 0%       1.05M ± 0%  -0.34%  (p=0.000 n=30+30)
    Tar              266k ± 1%        266k ± 1%    ~     (p=0.333 n=30+30)
    XML              416k ± 1%        415k ± 1%    ~     (p=0.144 n=30+29)
    
    
    Change-Id: I6ba67a9203516373062a2618122306da73333d98
    Reviewed-on: https://go-review.googlesource.com/36211
    Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
    b612ab3a
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...