------- Comment #9 from steven at gcc dot gnu dot org 2010-01-07 21:36 ------- At -Os, in the .188r.postreload RTL dump:
(insn 46 12 17 2 t.c:8 (parallel [ (set (reg/v:SI 2 r2 [orig:133 flags ] [133]) (if_then_else:SI (ne (reg:SI 2 r2 [orig:138 bool_var ] [138]) (const_int 0 [0x0])) (const_int 2 [0x2]) (const_int 0 [0x0]))) (clobber (reg:CC 24 cc)) ]) 291 {movcond} (nil)) And one pass later, in the .190r.split2 RTL dump: (insn 49 12 50 2 t.c:8 (set (reg:CC 24 cc) (compare:CC (reg:SI 2 r2 [orig:138 bool_var ] [138]) (const_int 0 [0x0]))) 220 {*arm_cmpsi_insn} (nil)) (insn 50 49 51 2 t.c:8 (cond_exec (ne (reg:CC 24 cc) (const_int 0 [0x0])) (set (reg/v:SI 2 r2 [orig:133 flags ] [133]) (const_int 2 [0x2]))) 2367 {neon_vornv2di+77} (nil)) (insn 51 50 17 2 t.c:8 (cond_exec (eq (reg:CC 24 cc) (const_int 0 [0x0])) (set (reg/v:SI 2 r2 [orig:133 flags ] [133]) (const_int 0 [0x0]))) 2367 {neon_vornv2di+77} (nil)) There's your redundant mov, from an insn splitter. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42494