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

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jeff Law <l...@gcc.gnu.org>:

https://gcc.gnu.org/g:235215323c67d8ce021a00df0f42e2c1713c7959

commit r15-7242-g235215323c67d8ce021a00df0f42e2c1713c7959
Author: Jeff Law <j...@ventanamicro.com>
Date:   Mon Jan 27 21:25:39 2025 -0700

    [PR target/114085] Fix H8 constraint issue which led to ICE

    Nowhere near the top of my list, but a quick looksie Sunday led to an easy
to
    fix backend bug.  It's not a regression, but given its the H8 backend I
think
    we've safely got a degree of freedom here.

    The H8 has a constraint "U" which allowed both a subset of MEMs and REGs,
so it
    wasn't marked as a memory constraint.  LRA doesn't really handle this well
-- a
    pseudo which didn't get a hard reg was replaced by its MEM.  The stack slot
    doesn't fit the limited addressing forms available and LRA didn't know it
just
    needed to reload the address into a reg.

    Fixed by removing REG from the "U" constraint, turning "U" into a memory
    constraint and adjusting a few patterns to allow "rU" instead of "U".

    We don't really support C++ on the H8 and as a result libstdc++ won't
build.
    Interestingly enough that also keeps the C++ tests from working, even for a
    compile-only test.  So no testcase.  Though I did check the reduced and
    original test manually and ran it through my tester without any
regressions.

            PR target/114085
    gcc/
            * config/h8300/constraints.md (U): No longer accept REGs.
            * config/h8300/logical.md (andqi3_2): Use "rU" rather than "U".
            (andqi3_2_clobber_flags, andqi3_1, <code>qi3_1): Likewise.
            * config/h8300/testcompare.md (tst_extzv_1_n): Likewise.

Reply via email to