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

--- Comment #18 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-14 branch has been updated by Richard Biener
<[email protected]>:

https://gcc.gnu.org/g:7c36056ede3a7e0eed8c95b4080b3f4ce6be12b1

commit r14-11333-g7c36056ede3a7e0eed8c95b4080b3f4ce6be12b1
Author: Richard Biener <[email protected]>
Date:   Mon Jan 27 10:49:51 2025 +0100

    rtl-optimization/118662 - wrong combination of vector sign-extends

    The following fixes an issue in the RTL combiner where we correctly
    combine two vector sign-extends with a vector load

    Trying 7, 9 -> 10:
        7: r106:V4QI=[r119:DI]
          REG_DEAD r119:DI
        9: r108:V4HI=sign_extend(vec_select(r106:V4QI#0,parallel))
       10: r109:V4SI=sign_extend(vec_select(r108:V4HI#0,parallel))
          REG_DEAD r108:V4HI

    to

    modifying insn i2     9: r109:V4SI=sign_extend([r119:DI])

    but since r106 is used we wrongly materialize it using a subreg:

    modifying insn i3    10: r106:V4QI=r109:V4SI#0

    which of course does not work for modes with more than one component,
    specifically vector and complex modes.

            PR rtl-optimization/118662
            * combine.cc (try_combine): When re-materializing a load
            from an extended reg by a lowpart subreg make sure we're
            not dealing with vector or complex modes.

            * gcc.dg/torture/pr118662.c: New testcase.

    (cherry picked from commit 343e1083eb9f57e05c0caba195f118ef2e95cc40)
  • [Bug rtl-optimization/118662] [... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to