re PR middle-end/37359 (IRA miscompiled transfer.o in libgfortran, sejmp)
authorVladimir Makarov <vmakarov@redhat.com>
Thu, 4 Sep 2008 19:02:33 +0000 (19:02 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Thu, 4 Sep 2008 19:02:33 +0000 (12:02 -0700)
2008-09-04  Vladimir Makarov  <vmakarov@redhat.com>

PR middle-end/37359
* ira-lives.c (process_bb_node_lives): Check setjmp.

From-SVN: r139996

gcc/ChangeLog
gcc/ira-lives.c

index e4e254c..867f926 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-04  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR middle-end/37359
+       * ira-lives.c (process_bb_node_lives): Check setjmp.
+
 2008-09-04  Richard Sandiford  <rdsandiford@googlemail.com>
 
        PR middle-end/37243
index 73cc062..a66bbf6 100644 (file)
@@ -714,9 +714,12 @@ process_bb_node_lives (ira_loop_tree_node_t loop_tree_node)
                  
                  ALLOCNO_CALL_FREQ (a) += freq;
                  ALLOCNO_CALLS_CROSSED_NUM (a)++;
-                 /* Don't allocate allocnos that cross calls, if this
-                    function receives a nonlocal goto.  */
-                 if (cfun->has_nonlocal_label)
+                 /* Don't allocate allocnos that cross setjmps or any
+                    call, if this function receives a nonlocal
+                    goto.  */
+                 if (cfun->has_nonlocal_label
+                     || find_reg_note (insn, REG_SETJMP,
+                                       NULL_RTX) != NULL_RTX)
                    {
                      SET_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a));
                      SET_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a));