• mtrofin's avatar
    [turbofan] fine grained in-block move optimization · 1ecf58f4
    mtrofin authored
    So far, we've been moving down gaps wholesale. This change moves
    individual move operations instead. This improves some benchmarks,
    and should overall reduce code size, because it improves the chance of
    reducing the number of moves.
    
    For example, there are improvements on x64 in Emscripten (Bullet, in
    particular) , JetStream geomean, Embenchen (zlib).
    
    In the process of making this change, I noticed we can separate the
    tasks performed by the move optimizer, as follows:
    
    - group gaps into 1
    - push gaps down, jumping instructions (these 2 were together before)
    - merge blocks (and then push gaps down)
    - finalize
    
    We can do without a finalization list. This avoids duplicating storage -
    we already have the list of instructions; it also simplifies the logic, since,
    with this change, we may process an instruction's gap twice.
    
    Compile time doesn't regress much (see pathological cases), but we
    may want to avoid the allocations of the few sets used in the new code.
    I'll do that in a subsequent change.
    
    BUG=
    
    Review URL: https://codereview.chromium.org/1634093002
    
    Cr-Commit-Position: refs/heads/master@{#33715}
    1ecf58f4
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...