Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[rustc_span][perf] Hoist lookup sorted by words out of the loop. #114395

Merged
merged 1 commit into from
Aug 3, 2023

Commits on Aug 3, 2023

  1. [rustc_span][perf] Hoist lookup sorted by words out of the loop.

    @lqd commented on rust-lang#114351 asking
    if `sort_by_words(lookup)` is computed repeatedly. I was assuming that
    rustc should have no difficulties to hoist it automatically outside of
    the loop to avoid repeated pure computation, but according to
     https://godbolt.org/z/frs8Kj1rq it seems like I was wrong:
    original version seems to have 2 calls per loop iteration
    ```
    .LBB16_3:
            mov     rbx, qword ptr [r13]
            mov     r14, qword ptr [r13 + 8]
            lea     rdi, [rsp + 40]
            mov     rsi, rbx
            mov     rdx, r14
            call    example::sort_by_words
            lea     rdi, [rsp + 64]
            mov     rsi, qword ptr [rsp + 8]
            mov     rdx, qword ptr [rsp + 16]
            call    example::sort_by_words
            mov     rdi, qword ptr [rsp + 40]
            mov     rdx, qword ptr [rsp + 56]
            mov     rsi, qword ptr [rsp + 64]
            cmp     rdx, qword ptr [rsp + 80]
            mov     qword ptr [rsp + 32], rdi
            mov     qword ptr [rsp + 24], rsi
            jne     .LBB16_5
            call    qword ptr [rip + bcmp@GOTPCREL]
            test    eax, eax
            sete    al
            mov     dword ptr [rsp + 4], eax
            mov     rsi, qword ptr [rsp + 72]
            test    rsi, rsi
            jne     .LBB16_8
            jmp     .LBB16_9
    ```
    but the manually hoisted version just 1:
    ```
    .LBB16_3:
            mov     r13, qword ptr [r15]
            mov     r14, qword ptr [r15 + 8]
            lea     rdi, [rsp + 64]
            mov     rsi, r13
            mov     rdx, r14
            call    example::sort_by_words
            mov     rdi, qword ptr [rsp + 64]
            mov     rdx, qword ptr [rsp + 16]
            cmp     qword ptr [rsp + 80], rdx
            mov     qword ptr [rsp + 32], rdi
            jne     .LBB16_5
            mov     rsi, qword ptr [rsp + 8]
            call    qword ptr [rip + bcmp@GOTPCREL]
            test    eax, eax
            sete    bpl
            mov     rsi, qword ptr [rsp + 72]
            test    rsi, rsi
            jne     .LBB16_8
            jmp     .LBB16_9
    ```
    This code is probably not very hot, but there is no reason to leave
    such a low hanging fruit.
    ttsugriy committed Aug 3, 2023
    Configuration menu
    Copy the full SHA
    6ae2677 View commit details
    Browse the repository at this point in the history