commit | 7ac10da795aa55eaf5217864972672e4d22f2709 | [log] [tgz] |
---|---|---|
author | Pierre Langlois <pierre.langlois@arm.com> | Wed Jan 03 18:30:45 2018 |
committer | Commit Bot <commit-bot@chromium.org> | Mon Jan 15 10:46:01 2018 |
tree | 0e9f464de2ba2353eaa96be4bbcbeac377b6d46f | |
parent | 183204f8eeeb3582971fe56a3721b200b8996559 [diff] |
[turbofan] Lower NumberConstant nodes to IntPtrConstant. If a NumberConstant can be represented as a Smi, then lower it to a IntPtrConstant node during simplified lowering. Thanks to this, all backends can match Smi values that can also be encoded as immediates in the instruction selector. Additionally, we can apply the same lowering to the CodeAssembler for the snapshot. As a result, we can remove `mov` instructions generated because Int32Matcher and Int64Matcher didn't not recognize Smis: For 32-bit target, it's common for Smis also be immediates: "if (a < 100) {}" ~~~ mov r1, #200 -> cmp r0, #200 cmp r0, r1 -> blt <> blt <> -> ~~~ On Arm64 particularly, we lose opportunites to use `cbz`: "if (a == 0) {}" ~~~ movz x0, #0x0 -> cbz x1 <> cmp x1, x0 -> b.eq <> -> ~~~ Overall, we do not see an impact on benchmarks such as webtooling. However, we do see noteworthy code size reduction, from 0.5% to 1.5%. Bug: Change-Id: I7fbb718ad51b9036c3514fa31c1326bdd6f2b0e6 Reviewed-on: https://chromium-review.googlesource.com/848814 Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Pierre Langlois <pierre.langlois@arm.com> Cr-Commit-Position: refs/heads/master@{#50569}
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
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/*
Please follow the instructions mentioned on the V8 wiki.