v8/test/unittests/compiler/regalloc
Ross McIlroy 4a60191149 [TurboProp] Add support for deferred block spills in fast reg alloc
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: Tobias Tebbi <tebbi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70374}
2020-10-07 10:08:29 +00:00
..
live-range-unittest.cc [regalloc] Remove live range splintering 2020-09-28 16:45:35 +00:00
mid-tier-register-allocator-unittest.cc [TurboProp] Add support for deferred block spills in fast reg alloc 2020-10-07 10:08:29 +00:00
move-optimizer-unittest.cc [turbofan][cleanup] Remove dead ExplicitOperand class. 2019-09-10 08:23:40 +00:00
register-allocator-unittest.cc [regalloc] Remove live range splintering 2020-09-28 16:45:35 +00:00