• mtrofin's avatar
    [turbofan] Splinter into one range. · efdcd202
    mtrofin authored
    Before this CL, we created one live range per successive set of
    deferred blocks. For scenarios with many such blocks, this creates
    an upfront pressure for the register allocator to deal with many ranges.
    Linear sorts ranges, which is a super-linear operation.
    
    The change places all deferred intervals into one range, meaning that,
    at most, there will be twice as many live ranges as the original set. In
    pathological cases (benchmarks/Compile/slow_nbody1.js), this change
    halves the compilation time. We see some improvements elsewhere,
    notably SQLite at ~4-5%.
    
    We may be able to avoid the subsequent merge. Its cost is the
    additional ranges it may need to create. The sole reason for the merge
    phase is to provide an unchanged view of the world to the subsequent
    phases. With the at-most-one splinter model, we may be able to teach
    the other phases about splintering - should we find perf hindrances
    due to merging.
    
    Review URL: https://codereview.chromium.org/1391023007
    
    Cr-Commit-Position: refs/heads/master@{#31224}
    efdcd202
register-allocator.cc 115 KB