• Josh Bleecher Snyder's avatar
    cmd/compile: allow OpVarXXX calls to be duplicated in writebarrier blocks · 94a017f3
    Josh Bleecher Snyder authored
    OpVarXXX Values don't generate instructions,
    so there's no reason not to duplicate them,
    and duplicating them generates better code
    (fewer branches).
    
    This requires changing the start/end accounting
    to correctly handle the case in which we have run
    of Values beginning with an OpVarXXX, e.g.
    OpVarDef, OpZeroWB, OpMoveWB.
    In that case, the sequence of values should begin
    at the OpZeroWB, not the OpVarDef.
    
    This also lays the groundwork for experimenting
    with allowing duplication of some scalar stores.
    
    Shrinks function text sizes a tiny amount:
    
    name        old object-bytes  new object-bytes  delta
    Template           381k ± 0%         381k ± 0%  -0.01%  (p=0.008 n=5+5)
    Unicode            203k ± 0%         203k ± 0%  -0.04%  (p=0.008 n=5+5)
    GoTypes           1.17M ± 0%        1.17M ± 0%  -0.01%  (p=0.008 n=5+5)
    SSA               8.24M ± 0%        8.24M ± 0%  -0.00%  (p=0.008 n=5+5)
    Flate              230k ± 0%         230k ± 0%    ~     (all equal)
    GoParser           286k ± 0%         286k ± 0%    ~     (all equal)
    Reflect           1.00M ± 0%        1.00M ± 0%    ~     (all equal)
    Tar                189k ± 0%         189k ± 0%    ~     (all equal)
    XML                415k ± 0%         415k ± 0%  -0.01%  (p=0.008 n=5+5)
    
    Updates #19838
    
    Change-Id: Ic5ef30855919f1468066eba08ae5c4bd9a01db27
    Reviewed-on: https://go-review.googlesource.com/42011
    Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    94a017f3
Name
Last commit
Last update
..
gen Loading commit data...
TODO Loading commit data...
block.go Loading commit data...
cache.go Loading commit data...
check.go Loading commit data...
checkbce.go Loading commit data...
compile.go Loading commit data...
config.go Loading commit data...
copyelim.go Loading commit data...
copyelim_test.go Loading commit data...
critical.go Loading commit data...
cse.go Loading commit data...
cse_test.go Loading commit data...
deadcode.go Loading commit data...
deadcode_test.go Loading commit data...
deadstore.go Loading commit data...
deadstore_test.go Loading commit data...
decompose.go Loading commit data...
dom.go Loading commit data...
dom_test.go Loading commit data...
export_test.go Loading commit data...
flagalloc.go Loading commit data...
func.go Loading commit data...
func_test.go Loading commit data...
fuse.go Loading commit data...
fuse_test.go Loading commit data...
html.go Loading commit data...
id.go Loading commit data...
layout.go Loading commit data...
lca.go Loading commit data...
lca_test.go Loading commit data...
likelyadjust.go Loading commit data...
location.go Loading commit data...
loop_test.go Loading commit data...
loopbce.go Loading commit data...
loopreschedchecks.go Loading commit data...
looprotate.go Loading commit data...
lower.go Loading commit data...
magic.go Loading commit data...
magic_test.go Loading commit data...
nilcheck.go Loading commit data...
nilcheck_test.go Loading commit data...
op.go Loading commit data...
opGen.go Loading commit data...
opt.go Loading commit data...
passbm_test.go Loading commit data...
phielim.go Loading commit data...
phiopt.go Loading commit data...
print.go Loading commit data...
prove.go Loading commit data...
redblack32.go Loading commit data...
redblack32_test.go Loading commit data...
regalloc.go Loading commit data...
regalloc_test.go Loading commit data...
rewrite.go Loading commit data...
rewrite386.go Loading commit data...
rewriteAMD64.go Loading commit data...
rewriteARM.go Loading commit data...
rewriteARM64.go Loading commit data...
rewriteMIPS.go Loading commit data...
rewriteMIPS64.go Loading commit data...
rewritePPC64.go Loading commit data...
rewriteS390X.go Loading commit data...
rewrite_test.go Loading commit data...
rewritedec.go Loading commit data...
rewritedec64.go Loading commit data...
rewritegeneric.go Loading commit data...
schedule.go Loading commit data...
schedule_test.go Loading commit data...
shift_test.go Loading commit data...
shortcircuit.go Loading commit data...
shortcircuit_test.go Loading commit data...
sizeof_test.go Loading commit data...
sparsemap.go Loading commit data...
sparseset.go Loading commit data...
sparsetree.go Loading commit data...
sparsetreemap.go Loading commit data...
stackalloc.go Loading commit data...
stackframe.go Loading commit data...
tighten.go Loading commit data...
trim.go Loading commit data...
value.go Loading commit data...
writebarrier.go Loading commit data...
writebarrier_test.go Loading commit data...
zcse.go Loading commit data...