------- Comment #3 from pinskia at gcc dot gnu dot org 2006-10-22 23:55 ------- Confirmed, what happens is that combine combines: (insn 18 16 19 3 (set (reg/v/f:SI 123 [ node ]) (plus:SI (reg/v/f:SI 123 [ node ]) (const_int -4 [0xfffffffffffffffc]))) 79 {*addsi3_internal1} (nil) (nil))
(insn 19 18 20 3 (set (reg:HI 125 [ <variable>.x ]) (mem/s/j:HI (reg/v/f:SI 123 [ node ]) [2 <variable>.x+0 S2 A32])) 313 {*movhi_internal} (insn_list:REG_DEP_TRUE 18 (nil)) (nil)) Into: (note 18 16 19 3 NOTE_INSN_DELETED) (insn 19 18 20 3 (parallel [ (set (reg:HI 125 [ <variable>.x ]) (mem/s/j:HI (plus:SI (reg/v/f:SI 123 [ node ]) (const_int -4 [0xfffffffffffffffc])) [2 <variable>.x+0 S2 A32])) (set (reg/v/f:SI 123 [ node ]) (plus:SI (reg/v/f:SI 123 [ node ]) (const_int -4 [0xfffffffffffffffc]))) ]) 361 {*movhi_update1} (nil) (nil)) But it forgets about: (insn 20 19 21 3 (set (reg:SI 124 [ <variable>.x ]) (zero_extend:SI (reg:HI 125 [ <variable>.x ]))) 42 {*rs6000.md:772} (insn_list:REG_DEP_TRUE 19 (nil)) (expr_list:REG_DEAD (reg:HI 125 [ <variable>.x ]) (nil))) Which is where the extra clrlwi comes from. -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Component|target |rtl-optimization Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2006-10-22 23:55:55 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29083