• Clemens Hammacher's avatar
    [Liftoff] Avoid quadratic behaviour in stack transfers · 23a85a33
    Clemens Hammacher authored
    We currently iterate the list of unexecuted register moves repeatedly,
    always executing the moves whose destination register is not being used
    as source register any more. This can lead to quadratic execution times
    if only a small number of moves is processed in every iteration.
    
    This CL refactors this such that we iterate the moves at most three
    times: Once for executing moves which can be executed right away (fast
    path) and for computing the source register use counts. A second time
    to execute all remaining non-cyclic moves, and a third time to execute
    cyclic moves.
    During the second and third iteration, whenever we decrement the source
    register use count, we check whether it drops to zero and execute the
    respective move right away.
    
    R=ahaas@chromium.org
    
    Bug: v8:6600, v8:8423
    Change-Id: I503328f5ae5f0208e35d53c71b4c289d75799892
    Reviewed-on: https://chromium-review.googlesource.com/c/1397703
    Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
    Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58588}
    23a85a33
liftoff-assembler.cc 31.4 KB