• Josh Bleecher Snyder's avatar
    cmd/compile: write some static data directly · 7c18f8cd
    Josh Bleecher Snyder authored
    Instead of generating ADATA instructions for
    static data, write that static data directly
    into the linker sym.
    This is considerably more efficient.
    The assembler still generates
    ADATA instructions, so the ADATA machinery
    cannot be dismantled yet. (Future work.)
    Skipping ADATA has a significant impact
    compiling the unicode package, which has lots
    of static data.
    
    name     old time/op    new time/op    delta
    Unicode     227ms ±10%     192ms ± 4%  -15.61%  (p=0.000 n=29+30)
    
    name     old alloc/op   new alloc/op   delta
    Unicode    51.0MB ± 0%    45.8MB ± 0%  -10.29%  (p=0.000 n=30+30)
    
    name     old allocs/op  new allocs/op  delta
    Unicode      610k ± 0%      578k ± 0%   -5.29%  (p=0.000 n=30+30)
    
    This does not pass toolstash -cmp, because
    this changes the order in which some relocations
    get added, and thus it changes the output from
    the compiler. It is not worth the execution time
    to sort the relocs in the normal case.
    
    However, compiling with -S -v generates identical
    output if (1) you suppress printing of ADATA progs
    in flushplist and (2) you suppress printing of
    cpu timing. It is reasonable to suppress printing
    the ADATA progs, since the data itself is dumped
    later. I am therefore fairly confident that all
    changes are superficial and non-functional.
    
    Fixes #14786, although there's more to do
    in general.
    
    Change-Id: I8dfabe7b423b31a30e516cfdf005b62a2e9ccd82
    Reviewed-on: https://go-review.googlesource.com/20645Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    7c18f8cd
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...