------- Comment #3 from kazu at gcc dot gnu dot org 2006-05-11 19:40 -------
The combiner combines
=== i1 ===
(insn 10 8 11 2 (set (reg/f:SI 103)
(symbol_ref:SI ("y") <var_decl 0xf7f71de0 y>)) 145 {*arm_movsi_insn}
(nil)
(nil))
=== i2 ===
(insn 11 10 13 2 (set (reg:SI 105 [ y ])
(zero_extend:SI (mem/v/c/i:HI (reg/f:SI 103) [0 y+0 S2 A16]))) 123
{*arm_zero_extendhisi2} (insn_list:REG_DEP_TRUE 10 (nil))
(expr_list:REG_DEAD (reg/f:SI 103)
(nil)))
=== i3 ===
(insn 13 11 14 2 (set (reg:SI 106)
(ashift:SI (reg:SI 105 [ y ])
(const_int 16 [0x10]))) 101 {*arm_shiftsi3} (insn_list:REG_DEP_TRUE
11 (nil))
(expr_list:REG_DEAD (reg:SI 105 [ y ])
(nil)))
into
(set (subreg:HI (reg:SI 106) 0)
(const_int 0 [0x0]))
Doh!
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27538