• mtrofin's avatar
    [turbofan] regalloc: model context and function mark as reg-defined. · 0b126143
    mtrofin authored
    If we model them as memory operands ("SpillOperands"), as we
    currently do, they are treated by the register allocator as being defined
    in memory, so spilling them up to the first use requiring them in a
    register is free.
    
    That's not the case for context and function marker. They come in
    registers, and the frame construction also pushes them on the stack.
    This conflicts with the goals of frame elision: the allocator should avoid
    eagerly spilling them, which would force a frame construction; also,
    their not being spilled, should frame elision succeed for the first block,
    means modeling them as spill operands incorrect.
    
    The natural choice would be to fully decouple their spilling from frame
    construction, and let the register allocator spill them. That means they
    need to be presented to the register allocator as vanilla live ranges,
    with pre-assigned spill slots.
    
    The main challenge there is that not all instructions (mainly, stack checks) list their dependency on these ranges being spilled. In this
    change, we change the model but leave the frame construction as-is.
    This has the benefit that it unblocks frame elision, but has the drawback
    that we may see double spills in the case where these live ranges spill
    only in deferred blocks. I plan to enable frame elision next, after which
    tackle this issue with spilling.
    
    BUG= v8:4533
    LOG=N
    
    Review URL: https://codereview.chromium.org/1501363002
    
    Cr-Commit-Position: refs/heads/master@{#32775}
    0b126143
Name
Last commit
Last update
benchmarks Loading commit data...
build Loading commit data...
docs Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party/binutils Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
Makefile.nacl Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...