https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123380
--- Comment #6 from Jeffrey A. Law <law at gcc dot gnu.org> ---
(insn 6 3 8 2 (set (reg/v:HF 140 [ f ])
(mem:HF (reg/f:DI 162 [ fp ]) [1 *fp_8(D)+0 S2 A16])) "j.c":8:16 138
{*movhf_softfloat}
(expr_list:REG_DEAD (reg/f:DI 162 [ fp ])
(nil)))
[ ... ]
(insn 9 8 44 2 (set (reg:DI 139 [ _15 ])
(subreg:DI (reg/v:HF 140 [ f ]) 0)) 275 {*movdi_64bit}
(nil))
[ ... ]
(insn 45 44 46 2 (set (reg:DI 161)
(ashiftrt:DI (ashift:DI (subreg:DI (mem:HF (reg/f:DI 162 [ fp ]) [1
*fp_8(D)+0 S2 A16]) 0)
(const_int 40 [0x28]))
(const_int 32 [0x20]))) 312 {ashlsi3_extend}
(expr_list:REG_DEAD (reg:DI 139 [ _15 ])
(nil)))
The problem happens when we try to combine those. We ultimately generate and
try to simplify this:
(set (reg:DI 161)
(ashiftrt:DI (ashift:DI (subreg:DI (mem:HF (reg/f:DI 162 [ fp ]) [1
*fp_8(D)+0 S2 A16]) 0)
(const_int 40 [0x28]))
(const_int 32 [0x20])))
$22 = void