https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118017
--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Uroš Bizjak from comment #3)
> It looks to me that reload is trying to handle the following sequence from
> _.322r.ira dump:
>
> (insn 32 31 35 2 (set (subreg:TI (reg:TD 99 [ _2 ]) 0)
> (reg:TI 20 xmm0)) "pr118017.c":14:24 94 {*movti_internal}
> (expr_list:REG_DEAD (reg:TI 20 xmm0)
> (nil)))
> ...
>
> (insn 41 40 42 2 (set (mem/c:TI (plus:DI (reg/f:DI 19 frame)
> (const_int -240 [0xffffffffffffff10])) [0 S16 A128])
> (subreg:TI (reg:TD 99 [ _2 ]) 0)) "pr118017.c":14:20 94
> {*movti_internal}
> (nil))
Please note that TImode and TDmode are tieable on x86_64 targets, so LRA should
simple consider all registers as TImode:
#define VALID_SSE_REG_MODE(MODE) \
((MODE) == V1TImode || (MODE) == TImode \
|| (MODE) == V4SFmode || (MODE) == V4SImode \
|| (MODE) == SFmode || (MODE) == SImode \
|| (MODE) == TFmode || (MODE) == TDmode)
and in ix86_modes_tieable_p:
/* If MODE2 is only appropriate for an SSE register, then tie with
any other mode acceptable to SSE registers. */
...
if (GET_MODE_SIZE (mode2) == 16
&& ix86_hard_regno_mode_ok (FIRST_SSE_REG, mode2))
return (GET_MODE_SIZE (mode1) == 16
&& ix86_hard_regno_mode_ok (FIRST_SSE_REG, mode1));