https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115028

--- Comment #11 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <pins...@gcc.gnu.org>:

https://gcc.gnu.org/g:892ee5ffba0760794a932e36771863a86ef2b271

commit r15-7705-g892ee5ffba0760794a932e36771863a86ef2b271
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Thu Feb 20 13:03:51 2025 -0800

    i386: Fix pr101950-2.c [PR115028]

    So what is happening here is that after r15-268-g9dbff9c05520a7,
    a move instruction still exists after combine and the register
    allocator choses different register allocation order for the xor
    and because the input operand of lzcntq is not the same as output
    operand, there is an extra xor that happens (due to an errata).

    This fixes the testcase by using loading from a pointer instead
    of a function argument directly. The register allocator has more
    freedom since the load has no hard register associated with it (rdi)
    so it can be in eax register right away.

    Tested for both -m32 and -m64 on x86_64-linux-gnu.

    gcc/testsuite/ChangeLog:

            PR testsuite/115028
            * gcc.target/i386/pr101950-2.c: Use a pointer argument instead
            of the argument directly.

    Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>

Reply via email to