• Ross McIlroy's avatar
    [TurboProp] Add support for deferred block spills in fast reg alloc · 4a601911
    Ross McIlroy authored
    Adds support for avoiding spills in non-deferred blocks by instead
    restricting the spill ranges to deferred blocks if the virtual
    register is only spilled in deferred blocks.
    
    It does this by tracking registers that reach the exit point of deferred
    blocks and spilling them them pre-emptively in the deferred block while
    treating them as committed from the point of view of the non-deferred
    blocks. We also now track whether virtual registers need to be spilled
    at their SSA definition point (where they are output by an instruction),
    or can instead be spilled at the entry to deferred blocks for use as
    spill slots within those deferred blocks. In both cases, the tracking
    of these deferred spills is kept as a pending operation until the
    allocator confirms that adding these spills will avoid spills in the
    non-deferred pathways, to avoid adding unnecessary extra spills in
    deferred blocks.
    
    BUG=v8:9684
    
    Change-Id: Ib151e795567f0e4e7f95538415a8cc117d235b64
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2440603
    Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
    Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#70374}
    4a601911
bit-vector.h 9.9 KB