• Cherry Zhang's avatar
    cmd/compile: fold offset into address on Wasm · 1d303a00
    Cherry Zhang authored
    On Wasm, the offset was not folded into LoweredAddr, so it was
    not rematerializeable. This led to the address-taken operation
    in some cases generated too early, before the local variable
    becoming live. The liveness code thinks the variable live when
    the address is taken, then backs it up to live at function
    entry, then complains about it, because nothing other than
    arguments should be live on entry.
    
    This CL folds the offset into the address operation, so it is
    rematerializeable and so generated right before use, after the
    variable actually becomes live.
    
    It might be possible to relax the liveness code not to think a
    variable live when its address being taken, but until the address
    actually being used. But it would be quite complicated. As we're
    late in Go 1.11 freeze, it would be better not to do it. Also,
    I think the address operation is rematerializeable now on all
    architectures, so this is probably less necessary.
    
    This may also be a slight optimization, as the address+offset is
    now rematerializeable, which can be generated on the Wasm stack,
    without using any "registers" which are emulated by local
    variables on Wasm. I don't know how to do benchmarks on Wasm. At
    least, cmd/go binary size shrinks 9K.
    
    Fixes #25966.
    
    Change-Id: I01e5869515d6a3942fccdcb857f924a866876e57
    Reviewed-on: https://go-review.googlesource.com/120599
    Run-TryBot: Cherry Zhang <cherryyz@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarRichard Musiol <neelance@gmail.com>
    1d303a00
Name
Last commit
Last update
..
addr2line Loading commit data...
api Loading commit data...
asm Loading commit data...
buildid Loading commit data...
cgo Loading commit data...
compile Loading commit data...
cover Loading commit data...
dist Loading commit data...
doc Loading commit data...
fix Loading commit data...
go Loading commit data...
gofmt Loading commit data...
internal Loading commit data...
link Loading commit data...
nm Loading commit data...
objdump Loading commit data...
pack Loading commit data...
pprof Loading commit data...
test2json Loading commit data...
trace Loading commit data...
vendor Loading commit data...
vet Loading commit data...