http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48343
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aoliva at gcc dot gnu.org --- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-03-30 15:16:55 UTC --- So, before combiner we have: (insn 23 22 24 3 (parallel [ (set (reg:SI 98) (plus:SI (reg:SI 97 [ prephitmp.9 ]) (reg/v:SI 64 [ j ]))) (clobber (reg:CC 17 flags)) ]) pr48343.c:12 252 {*addsi_1} (expr_list:REG_DEAD (reg:SI 97 [ prephitmp.9 ]) (expr_list:REG_DEAD (reg/v:SI 64 [ j ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))))) (insn 24 23 25 3 (parallel [ (set (reg:SI 99) (zero_extend:SI (mem/s/j:QI (plus:SI (plus:SI (reg/f:SI 20 frame) (reg/v:SI 71 [ i ])) (const_int -320 [0xfffffffffffffec0])) [0 s S1 A8]))) (clobber (reg:CC 17 flags)) ]) pr48343.c:12 123 {*zero_extendqisi2_movzbl_and} (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))) (insn 25 24 27 3 (parallel [ (set (reg:SI 66 [ D.1999 ]) (plus:SI (reg:SI 98) (reg:SI 99))) (clobber (reg:CC 17 flags)) ]) pr48343.c:12 252 {*addsi_1} (expr_list:REG_DEAD (reg:SI 99) (expr_list:REG_DEAD (reg:SI 98) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))))) (debug_insn 27 25 28 3 (var_location:SI k (reg/v:SI 71 [ i ])) pr48343.c:13 -1 (nil)) (debug_insn 28 27 29 3 (var_location:SI i (and:SI (reg:SI 66 [ D.1999 ]) (const_int 255 [0xff]))) pr48343.c:13 -1 (nil)) and SUBST_MODE is applied to pseudo 98 when i2 is insn 23 and i3 is insn 25, after a previous propagate_for_debug set of changes which were with i3 insn 30. So, IMHO we don't want to stop at i3 for propagate_for_debug if we are retrying (goto retry in combine_instructions), instead we want to stop at the last i3 we've been processing in the current BB. I'll try to write a patch.