bed054c4ff
This avoids a whole range traversal each time we encounter a deferred block (or a succession of them). The traversal (in the removed IsIntervalAlreadyExcluded) is unnecessary - an interval with a hole where deferred blocks are shouldn't be listed in the in/out sets of those blocks in the first place. It turns out the root cause (that appeared like we had to special case ranges with holes, as the comment described) was deferred blocks with a deoptimization call. That would place the live range in the in_set of the block, but then splitting would fail because the start and split position would be the same - this is because everywhere else, the deferred block would have at least a second instruction, other than the use - like a jump - ahead of which we'd perform the lower part of the splintering. In the usual case, this choice of a position avoids moves on the hot path (because any moves will be before the jump, but still in the deferred block). With deoptimization calls, that's not the case, there is just one instruction, the deoptimization call. So we perform the second cut of the splintering right after the block. Since there is no control flow from the deoptimization block to any functional block - the control flow goes to the exit block - the range connector won't insert moves on the hot path - although we may want to see what happens for the exit block, and maybe teach the range connector to ignore control flow appearing to come from blocks with deoptimization calls. Review URL: https://codereview.chromium.org/1323473003 Cr-Commit-Position: refs/heads/master@{#30447} |
||
---|---|---|
benchmarks | ||
build | ||
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 | ||
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://code.google.com/p/v8/
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/*