------- Comment #2 from pinskia at gcc dot gnu dot org 2007-08-22 22:39 ------- What the auto pre-increment pass is doing looks ok from the point of view of correct RTL. Before: (insn 22 21 70 4 t.c:11 (parallel [ (set (reg:DF 123 [ pretmp.23 ]) (float:DF (reg/v:SI 128 [ n ]))) (use (reg:SI 132)) (use (reg:DF 133)) (clobber (mem/c/i:DF (plus:SI (reg/f:SI 113 sfp) (const_int 8 [0x8])) [2 S8 A64])) (clobber (reg:DF 137)) (clobber (reg:SI 138)) ]) 244 {*floatsidf2_internal} (expr_list:REG_DEAD (reg:DF 133) (expr_list:REG_DEAD (reg:SI 132) (expr_list:REG_UNUSED (reg:SI 138) (expr_list:REG_UNUSED (reg:DF 137) (expr_list:REG_EQUAL (float:DF (reg/v:SI 128 [ n ])) (nil)))))))
(insn 70 22 24 4 t.c:6 (set (reg/f:SI 139) (plus:SI (reg/f:SI 113 sfp) (const_int 8 [0x8]))) 79 {*addsi3_internal1} (nil)) After: (insn 80 21 22 4 t.c:11 (set (reg/f:SI 139) (reg/f:SI 113 sfp)) -1 (nil)) (insn 22 80 24 4 t.c:11 (parallel [ (set (reg:DF 123 [ pretmp.23 ]) (float:DF (reg/v:SI 128 [ n ]))) (use (reg:SI 132)) (use (reg:DF 133)) (clobber (mem/c/i:DF (pre_inc:SI (reg/f:SI 139)) [2 S8 A64])) (clobber (reg:DF 137)) (clobber (reg:SI 138)) ]) 244 {*floatsidf2_internal} (expr_list:REG_INC (reg/f:SI 139) (expr_list:REG_DEAD (reg:DF 133) (expr_list:REG_DEAD (reg:SI 132) (expr_list:REG_UNUSED (reg:SI 138) (expr_list:REG_UNUSED (reg:DF 137) (expr_list:REG_EQUAL (float:DF (reg/v:SI 128 [ n ])) (nil)))))))) The semantics have not changed but we get an pre_inc inside the clobber now. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33151