• mtrofin's avatar
    [turbofan] Single entry into deferred · 5ae587cf
    mtrofin authored
    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
    
    Review URL: https://codereview.chromium.org/1912093005
    
    Cr-Commit-Position: refs/heads/master@{#35742}
    5ae587cf
register-allocator.cc 128 KB