https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118067
--- Comment #10 from Uroš Bizjak <ubizjak at gmail dot com> --- Please note that RA loops with SImode, the dump from _.324r.reload reads: (insn 193 5 191 2 (set (reg:SI 338) (subreg/j:SI (reg/v:V32HI 165 [ u ]) 0)) "pr118067.c":13:8 96 {*movsi_internal} (nil)) (note 191 193 192 2 NOTE_INSN_DELETED) (insn 192 191 194 2 (set (reg:SI 339) (reg:SI 338)) "pr118067.c":13:8 96 {*movsi_internal} (nil)) ... (insn 280 279 281 2 (set (reg:SI 426) (reg:SI 425)) "pr118067.c":13:8 96 {*movsi_internal} (nil)) (insn 281 280 9 2 (set (subreg/j:SI (reg:HI 337) 0) (reg:SI 426)) "pr118067.c":13:8 96 {*movsi_internal} (nil)) (insn 9 281 10 2 (parallel [ (set (reg:HI 99 [ _2 ]) (lshiftrt:HI (reg:HI 337) (const_int 1 [0x1]))) (clobber (reg:CC 17 flags)) ]) "pr118067.c":13:8 1215 {*lshrhi3_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))) One would expect a HImode spill from (reg/v:V32HI 165 [ u ]) to a temporary memory location (due to targetm.secondary_memory_needed) and fill from this location to (reg:HI 337). Both instructions are available with TARGET_AVX512F.