• Cherry Zhang's avatar
    cmd/compile: add a writebarrier phase in SSA · f6aec889
    Cherry Zhang authored
    When the compiler insert write barriers, the frontend makes
    conservative decisions at an early stage. This may have false
    positives which result in write barriers for stack writes.
    
    A new phase, writebarrier, is added to the SSA backend, to delay
    the decision and eliminate false positives. The frontend still
    makes conservative decisions. When building SSA, instead of
    emitting runtime calls directly, it emits WB ops (StoreWB,
    MoveWB, etc.), which will be expanded to branches and runtime
    calls in writebarrier phase. Writes to static locations on stack
    are detected and write barriers are removed.
    
    All write barriers of stack writes found by the script from
    issue #17330 are eliminated (except two false positives).
    
    Fixes #17330.
    
    Change-Id: I9bd66333da9d0ceb64dcaa3c6f33502798d1a0f8
    Reviewed-on: https://go-review.googlesource.com/31131Reviewed-by: 's avatarAustin Clements <austin@google.com>
    Reviewed-by: 's avatarDavid Chase <drchase@google.com>
    Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    f6aec889
Name
Last commit
Last update
..
gen Loading commit data...
TODO Loading commit data...
block.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...
loopbce.go Loading commit data...
lower.go Loading commit data...
magic.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...
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...
type.go Loading commit data...
type_test.go Loading commit data...
value.go Loading commit data...
writebarrier.go Loading commit data...
zcse.go Loading commit data...