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)
