From: Tamar Christina Date: Mon, 2 Oct 2023 10:50:24 +0000 (+0100) Subject: rtl: relax validate_subreg to allow paradoxical subregs that change mode X-Git-Tag: basepoints/gcc-15~5777 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a35ab1c1a3d04c28519a062fedfebda818b927a4;p=thirdparty%2Fgcc.git rtl: relax validate_subreg to allow paradoxical subregs that change mode This patch relaxes the subreg invariant that you can only change modes or make it paradoxical in one conversion. i.e. it now allows subreg:V2DI (reg:DF ..)) This is well defined in the generic sense and allowing it would enable you to write RTL without the extra moves which can be interfered with by combine. Patch has been pre-approved[1], but giving people chance to object [1] https://gcc.gnu.org/pipermail/gcc-patches/2023-September/629119.html gcc/ChangeLog: * emit-rtl.cc (validate_subreg): Relax subreg rule. --- diff --git a/gcc/emit-rtl.cc b/gcc/emit-rtl.cc index 8bd623dcd0ef..84b6833225e6 100644 --- a/gcc/emit-rtl.cc +++ b/gcc/emit-rtl.cc @@ -947,7 +947,7 @@ validate_subreg (machine_mode omode, machine_mode imode, in post-reload splitters that make arbitrarily mode changes to the registers themselves. */ else if (VECTOR_MODE_P (omode) - && GET_MODE_INNER (omode) == GET_MODE_INNER (imode)) + && GET_MODE_UNIT_SIZE (omode) == GET_MODE_UNIT_SIZE (imode)) ; /* Subregs involving floating point modes are not allowed to change size unless it's an insert into a complex mode.