https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85090
--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> --- The problem lies in: (insn 4214 4213 4219 2 (parallel [ (set (subreg:DI (reg:V32HI 4037 [ i ]) 0) (ior:DI (reg:DI 4040) (reg:DI 4038 [ _7 ]))) (clobber (reg:CC 17 flags)) ]) "pr85090.c":13 442 {*iordi_1} (expr_list:REG_DEAD (reg:DI 4040) (expr_list:REG_DEAD (reg:DI 4038 [ _7 ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))))) (insn 4219 4214 4220 2 (set (reg/i:V32HI 21 xmm0) (reg:V32HI 4037 [ i ])) "pr85090.c":16 1254 {movv32hi_internal} (expr_list:REG_DEAD (reg:V32HI 4037 [ i ]) where (insn 4214) reloads with: (insn 4214 4213 5658 2 (parallel [ (set (reg:DI 0 ax [4040]) (ior:DI (reg:DI 0 ax [4040]) (reg:DI 1 dx [orig:4038 _7 ] [4038]))) (clobber (reg:CC 17 flags)) ]) "pr85090.c":13 442 {*iordi_1} (nil)) (insn 5658 4214 5812 2 (set (mem/c:DI (plus:DI (reg/f:DI 7 sp) (const_int 264 [0x108])) [4 %sfp+-64 S8 A512]) (reg:DI 0 ax [4040])) "pr85090.c":13 85 {*movdi_internal} (nil)) (insn 5812 5658 4219 2 (set (reg:DI 57 xmm20 [orig:422 i ] [422]) (mem/c:DI (plus:DI (reg/f:DI 7 sp) (const_int 264 [0x108])) [4 %sfp+-64 S8 A512])) "pr85090.c":13 85 {*movdi_internal} (nil)) (insn 4219 5812 4220 2 (set (reg/i:V32HI 21 xmm0) (reg/v:V32HI 57 xmm20 [orig:422 i ] [422])) "pr85090.c":16 1254 {movv32hi_internal} (nil)) Using a subreg is not enough to change only part of the register.