------- Comment #4 from pinskia at gcc dot gnu dot org 2009-01-01 21:48 ------- RTL DSE does this optimization ...
(insn 8 7 11 2 t.c:12 (set (mem/s/c:SI (reg/f:SI 60) [0 u.ii+0 S4 A32]) (const_int 20 [0x14])) 47 {*movsi_1} (expr_list:REG_DEAD (reg/f:SI 60) (nil))) (insn 11 8 14 2 t.c:12 (set (reg:SI 63 [ u.cc.c+1 ]) (sign_extend:SI (mem/s/j:QI (plus:SI (reg/f:SI 60) (const_int 1 [0x1])) [0 u.cc.c+1 S1 A8]))) 132 {extendqisi2} (expr_list:REG_DEAD (reg/f:SI 62) (nil))) (insn 14 11 15 2 t.c:12 (set (reg:SI 65 [ u.cc.c ]) (sign_extend:SI (mem/s/j:QI (reg/f:SI 60) [0 u.cc.c+0 S1 A32]))) 132 {extendqisi2} (expr_list:REG_DEAD (reg/f:SI 64) (nil))) Into: (insn 30 7 31 2 t.c:12 (set (reg:QI 66) (const_int 0 [0x0])) -1 (nil)) (insn 31 30 8 2 t.c:12 (set (reg:QI 67) (const_int 20 [0x14])) -1 (nil)) (insn 8 31 11 2 t.c:12 (set (mem/s/c:SI (reg/f:SI 60) [0 u.ii+0 S4 A32]) (const_int 20 [0x14])) 47 {*movsi_1} (nil)) (insn 11 8 14 2 t.c:12 (set (reg:SI 63 [ u.cc.c+1 ]) (sign_extend:SI (reg:QI 66))) 132 {extendqisi2} (nil)) (insn 14 11 15 2 t.c:12 (set (reg:SI 65 [ u.cc.c ]) (sign_extend:SI (reg:QI 67))) 132 {extendqisi2} (expr_list:REG_DEAD (reg/f:SI 60) (nil))) And then combine simplifies it into just return 20 with the memory store still -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Component|middle-end |tree-optimization Keywords| |TREE Last reconfirmed|2008-02-22 10:46:25 |2009-01-01 21:48:16 date| | Version|unknown |4.4.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35292