-
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: Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#70374}
4a601911