Description[turbofan] Single entry into deferred
If a deferred block has multiple predecessors, they have to be
all deferred. Otherwise, we can run into a situation where if a range
that spills only in deferred blocks inserts its spill in the block, and
other ranges need moves inserted by ResolveControlFlow in the predecessors,
the register of the range spilled in the deferred block may be clobbered.
To avoid that, when a deferred block has multiple predecessors, and some
are not deferred, we add a non-deferred block to collect all such edges.
This CL addresses the validator assertion failure the referenced issue, as well
as the greedy allocator failure - which was caused by the situation described
above.
BUG=v8:4940
LOG=n
Committed: https://crrev.com/5ae587cfb342f3a845802591a1f4133b5a2849f9
Cr-Commit-Position: refs/heads/master@{#35742}
Patch Set 1 #
Total comments: 4
Patch Set 2 : #
Messages
Total messages: 13 (7 generated)
|