re PR rtl-optimization/47612 (RTL crash when cc0 setter moved away from cc0 user)
authorBernd Schmidt <bernds@codesourcery.com>
Wed, 4 May 2011 20:24:15 +0000 (20:24 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Wed, 4 May 2011 20:24:15 +0000 (20:24 +0000)
PR rtl-optimization/47612
* df-problems.c (can_move_insns_across): Don't pick a cc0 setter
as the last insn of the sequence to be moved.

From-SVN: r173393

gcc/ChangeLog
gcc/df-problems.c

index 00d84974ca30888affe39cdeaad662b5a56c297f..4ff3175c079187b41a4e6ff1e6c52556ce15a66c 100644 (file)
@@ -1,3 +1,9 @@
+2011-05-04  Bernd Schmidt  <bernds@codesourcery.com>
+
+       PR rtl-optimization/47612
+       * df-problems.c (can_move_insns_across): Don't pick a cc0 setter
+       as the last insn of the sequence to be moved.
+
 2011-05-04  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/48864
index 0f398ba3aa4bf87ea12846b888ac630e8bc0ecce..e5b88e3d2dcf74097011e3171357c446d1e61f01 100644 (file)
@@ -4001,7 +4001,10 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to,
          if (bitmap_intersect_p (merge_set, test_use)
              || bitmap_intersect_p (merge_use, test_set))
            break;
-         max_to = insn;
+#ifdef HAVE_cc0
+         if (!sets_cc0_p (insn))
+#endif
+           max_to = insn;
        }
       next = NEXT_INSN (insn);
       if (insn == to)
@@ -4038,7 +4041,11 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to,
     {
       if (NONDEBUG_INSN_P (insn))
        {
-         if (!bitmap_intersect_p (test_set, local_merge_live))
+         if (!bitmap_intersect_p (test_set, local_merge_live)
+#ifdef HAVE_cc0
+             && !sets_cc0_p (insn)
+#endif
+             )
            {
              max_to = insn;
              break;