0b1261439b
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} |
||
---|---|---|
benchmarks | ||
build | ||
docs | ||
include | ||
infra | ||
samples | ||
src | ||
test | ||
testing | ||
third_party/binutils | ||
tools | ||
.clang-format | ||
.gitignore | ||
.ycm_extra_conf.py | ||
AUTHORS | ||
BUILD.gn | ||
ChangeLog | ||
codereview.settings | ||
DEPS | ||
LICENSE | ||
LICENSE.strongtalk | ||
LICENSE.v8 | ||
LICENSE.valgrind | ||
Makefile | ||
Makefile.android | ||
Makefile.nacl | ||
OWNERS | ||
PRESUBMIT.py | ||
README.md | ||
snapshot_toolchain.gni | ||
WATCHLISTS |
V8 JavaScript Engine
V8 is Google's open source JavaScript engine.
V8 implements ECMAScript as specified in ECMA-262.
V8 is written in C++ and is used in Google Chrome, the open source browser from Google.
V8 can run standalone, or can be embedded into any C++ application.
V8 Project page: https://github.com/v8/v8/wiki
Getting the Code
Checkout depot tools, and run
fetch v8
This will checkout V8 into the directory v8
and fetch all of its dependencies.
To stay up to date, run
git pull origin
gclient sync
For fetching all branches, add the following into your remote
configuration in .git/config
:
fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
fetch = +refs/tags/*:refs/tags/*
Contributing
Please follow the instructions mentioned on the V8 wiki.