http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57193
Richard Henderson <rth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2013-05-07 00:00:00 |2014-2-12 CC| |rth at gcc dot gnu.org --- Comment #4 from Richard Henderson <rth at gcc dot gnu.org> --- It seems like incomplete reload inheritance: (insn 19 16 21 2 (set (reg:V8HI 107) (truncate:V8HI (lshiftrt:V8SI (mult:V8SI (zero_extend:V8SI (subreg:V8HI (reg:V16QI 105) 0)) (zero_extend:V8SI (subreg:V8HI (reg/v:V2DI 101 [ f ]) 0))) (const_int 16 [0x10])))) include/emmintrin.h:1362 2134 {*umulv8hi3_highpart} (expr_list:REG_DEAD (reg:V16QI 105) (nil))) Creating newreg=111 from oldreg=107, assigning class SSE_REGS to r111 19: r111:V8HI=trunc(zero_extend(r111:V8HI)*zero_extend(r101:V2DI#0) 0>>0x10) REG_DEAD r105:V16QI Inserting insn reload before: 31: r111:V8HI=r105:V16QI#0 Inserting insn reload after: 32: r107:V8HI=r111:V8HI The new register r111 does wind up inheriting from r107, but not transitively to r105. Thus we wind up leaving the copy insn 31.