On 06/08/2020 04:54, Richard Sandiford wrote:
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index f9b0e9714d9..d7067989ad7 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -947,6 +947,11 @@ validate_subreg (machine_mode omode, machine_mode imode,
else if (VECTOR_MODE_P (omode)
&& GET_MODE_INNER (omode) == GET_MODE_INNER (imode))
;
+ /* Allow sections of vectors, both smaller and paradoxical. (This just
+ works for integers, but needs to be explicitly allowed for floats.) */
+ else if (VECTOR_MODE_P (omode) && VECTOR_MODE_P (imode)
+ && GET_MODE_INNER (omode) == GET_MODE_INNER (imode))
+ ;
Might be missing something, but isn't this a subcondition of the
previous “else if”? It looks like that ought to catch every case
that the new one does.
Apparently, Hongtao and Uroš fixed my problem while I was working on this.
Yes, my patch does the same (although I would question whether it's safe
to use "GET_MODE_INNER (imode)" without having first confirmed "imode"
is a vector mode).
Anyway, I can drop my patch.
Andrew