[Liftoff] Avoid quadratic behaviour in stack transfers
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: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#58588}
Showing
Please
register
or
sign in
to comment