------- Additional Comments From hp at gcc dot gnu dot org 2004-12-20 01:55 ------- Combine changes:
(insn 13 12 15 0 (set (reg:HI 273) (mem:HI (plus:DI (reg/v/f:DI 269 [ y ]) (const_int 2 [0x2])) [3 S2 A16])) 1 {movhi} (nil) (expr_list:REG_DEAD (reg/v/f:DI 269 [ y ]) (nil))) (insn 15 13 16 0 (set (reg:DI 275) (plus:DI (reg:DI 272) (subreg:DI (reg:HI 273) 0))) 7 {adddi3} (insn_list:REG_DEP_TRUE 12 (insn_list:REG_DEP_TRUE 13 (nil))) (expr_list:REG_DEAD (reg:DI 272) (expr_list:REG_DEAD (reg:HI 273) (nil)))) into: (insn 15 13 16 0 (set (reg:DI 275) (plus:DI (reg:DI 272) (subreg:DI (mem:HI (plus:DI (reg/v/f:DI 269 [ y ]) (const_int 2 [0x2])) [3 S2 A16]) 0))) 7 {adddi3} (insn_list:REG_DEP_TRUE 12 (nil)) (expr_list:REG_DEAD (reg/v/f:DI 269 [ y ]) (expr_list:REG_DEAD (reg:DI 272) (nil)))) which is already wrong because the address isn't valid in DImode (STRICT_ALIGNMENT). Likely a paradoxical subregs issue; they're allowed if !INSN_SCHEDULING. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18701