xf. http://gcc.gnu.org/ml/gcc/2008-05/msg00274.html
> Why is store_motion doing this? > > STORE_MOTION delete insn in BB 2: > (insn 8 7 27 2 dj.c:10 (parallel [ > (set (mem/s/j:HI (reg/v/f:HI 26 [ s ]) [0 > <variable>.buf+0 S2 A8]) > (ashift:HI (reg/v:HI 27 [ n ]) > (subreg:QI (reg/v:HI 27 [ n ]) 0))) > (clobber (scratch:HI)) > ]) 223 {ashlhi3_i} (expr_list:REG_DEAD (reg/v:HI 27 [ n ]) > (nil))) > STORE MOTION replaced with insn: > (insn 27 8 9 2 dj.c:10 (set (reg:HI 29 [ <variable>.buf ]) > > (ashift:HI (reg/v:HI 27 [ n ]) > (subreg:QI (reg/v:HI 27 [ n ]) 0))) -1 > (expr_list:REG_DEAD (reg/v:HI 27 [ n ]) > (nil))) This insn is generated by gen_move_insn in gcse.c:replace_store_insn(). Maybe that should be emit_move_insn()? Gr. Steven