http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60438
--- Comment #15 from linzj <manjian2006 at gmail dot com> ---
dir = merge_dir (dir, old_insns_match_p (0, i1, i2));
if (dir == dir_none || (!dir_p && dir != dir_both))
break;
{
print_rtl_single (stdout, i1);
print_rtl_single (stdout, i2);
printf ("dir = %d\n",dir);
}
outputs:
(insn 14 13 53 3 (parallel [
(set (reg/f:SI 7 sp)
(plus:SI (reg/f:SI 7 sp)
(const_int 16 [0x10])))
(clobber (reg:CC 17 flags))
]) 1.cpp:14 241 {*addsi_1}
(expr_list:REG_UNUSED (reg:CC 17 flags)
(expr_list:REG_ARGS_SIZE (const_int 0 [0])
(nil))))
(insn 38 55 39 4 (parallel [
(set (reg/f:SI 7 sp)
(plus:SI (reg/f:SI 7 sp)
(const_int 16 [0x10])))
(clobber (reg:CC 17 flags))
]) 241 {*addsi_1}
(expr_list:REG_UNUSED (reg:CC 17 flags)
(expr_list:REG_ARGS_SIZE (const_int 0 [0])
(nil))))
dir = 1
That's exactly what should not be merged.