[arm64] Refactor veneer pool emission
Assembler::EmitVeneers has potential quadratic behavior, which appears as hangs on chromecrash (see the linked bug). We iterate a list of branches (unresolved_branches_), and for each branch iterate yet another list of branches (the label link list in RemoveBranchFromLabelLinkChain). Ordering decisions increase the problem, by iterating in the outer loop in ascending pc offset order, and in the inner loop (which removes the branch from the linked list) in descending order. This CL mostly refactors the outer loop: - Instead of iterating over the whole unresolved_branches_ list, iterate only the relevant part. - Call RemoveBranchFromLabelLinkChain in descending pc offset order. - Keep veneer emission in ascending pc offset order. Bug: chromium:1162080 Change-Id: I77bb3d961c1b19ef1c31e777b640b213869bc1d6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2794435 Commit-Queue: Jakob Gruber <jgruber@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#73762}
Showing
Please
register
or
sign in
to comment