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

--- Comment #6 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Jakub Jelinek from comment #5)
> It doesn't unfortunately.
Just a wild guess, in PR78547 we trip at:

#2  0x00000000011b4fbb in loc_cmp (x=0x2aaaae9330a8, y=0x2aaaae930fd8) at
../../git/gcc/gcc/var-tracking.c:3417
3417          gcc_assert (GET_MODE (x) == GET_MODE (y));
(gdb) p debug_rtx (y)
(mem/c:V1TI (value/u:DI 1:1 @0x2ab27f0/0x2a485f0) [1 u128_3+0 S16 A128])
$9 = void
(gdb) p debug_rtx (x)
(mem/c:TI (value/u:DI 1:1 @0x2ab27f0/0x2a485f0) [1 u128_3+0 S16 A128])
$10 = void

and your patch handles registers in:

+             rtx *loc = DF_REF_LOC (ref);
+             if (REG_P (*loc) && GET_MODE (*loc) == V1TImode)
+               {
+                 *loc = gen_rtx_SUBREG (TImode, *loc, 0);
+                 changed = true;
+               }

maybe we need to handle memory locations here, too?

Reply via email to