Hi,
PR62151 is about wrong code generated on x86_641, which starts from
one of my checkin.  I did some investigation, now can confirm it's
another latent bug in combine pass as analyzed by comment#7 in the PR.
Here is a patch can fix the problem, as well as the code given in the
comment.  It passes bootstrap on x86_64, but the problem is code in
that part of combine is kind of ad-hoc implemented.  To be honest, I
don't fully understand it, so it would be better to have some combine
pass experts look into it and give some comments.

Thanks,
bin
Index: gcc/combine.c
===================================================================
--- gcc/combine.c       (revision 214083)
+++ gcc/combine.c       (working copy)
@@ -13489,7 +13489,13 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3
                       || rtx_equal_p (XEXP (note, 0), elim_i1)
                       || rtx_equal_p (XEXP (note, 0), elim_i0))
                break;
-             tem = i3;
+
+             if (from_insn && i2
+                 && from_insn != i2 && from_insn != i3
+                 && reg_set_p (XEXP (note, 0), PATTERN (i2)))
+               tem = i2;
+             else
+               tem = i3;
            }
 
          if (place == 0)

Reply via email to