OSDN Git Service

* config/mips/mips.c (save_restore_insns): Don't mark any register
[pf3gnuchains/gcc-fork.git] / gcc / sched-rgn.c
index 46c734c..e0a2a63 100644 (file)
@@ -4,21 +4,21 @@
    Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
    and currently maintained by, Jim Wilson (wilson@cygnus.com)
 
-This file is part of GNU CC.
+This file is part of GCC.
 
-GNU CC is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
 
-GNU CC is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING.  If not, write to the Free
-the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+along with GCC; see the file COPYING.  If not, write to the Free the
+Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 02111-1307, USA.  */
 
 /* This pass implements list scheduling within basic blocks.  It is
@@ -1396,13 +1396,15 @@ check_live_1 (src, x)
         || GET_CODE (reg) == STRICT_LOW_PART)
     reg = XEXP (reg, 0);
 
-  if (GET_CODE (reg) == PARALLEL
-      && GET_MODE (reg) == BLKmode)
+  if (GET_CODE (reg) == PARALLEL)
     {
       register int i;
+
       for (i = XVECLEN (reg, 0) - 1; i >= 0; i--)
-       if (check_live_1 (src, XVECEXP (reg, 0, i)))
-         return 1;
+       if (XEXP (XVECEXP (reg, 0, i), 0) != 0)
+         if (check_live_1 (src, XEXP (XVECEXP (reg, 0, i), 0)))
+           return 1;
+
       return 0;
     }
 
@@ -1474,12 +1476,14 @@ update_live_1 (src, x)
         || GET_CODE (reg) == STRICT_LOW_PART)
     reg = XEXP (reg, 0);
 
-  if (GET_CODE (reg) == PARALLEL
-      && GET_MODE (reg) == BLKmode)
+  if (GET_CODE (reg) == PARALLEL)
     {
       register int i;
+
       for (i = XVECLEN (reg, 0) - 1; i >= 0; i--)
-       update_live_1 (src, XVECEXP (reg, 0, i));
+       if (XEXP (XVECEXP (reg, 0, i), 0) != 0)
+         update_live_1 (src, XEXP (XVECEXP (reg, 0, i), 0));
+
       return;
     }
 
@@ -1915,15 +1919,17 @@ haifa_classify_insn (insn)
              if (tmp_class == TRAP_RISKY)
                break;
              /* Test if it is a load.  */
-             tmp_class =
-               WORST_CLASS (tmp_class,
-                            may_trap_exp (SET_SRC (XVECEXP (pat, 0, i)), 0));
+             tmp_class
+               = WORST_CLASS (tmp_class,
+                              may_trap_exp (SET_SRC (XVECEXP (pat, 0, i)),
+                                            0));
              break;
            case COND_EXEC:
            case TRAP_IF:
              tmp_class = TRAP_RISKY;
              break;
-           default:;
+           default:
+             ;
            }
          insn_class = WORST_CLASS (insn_class, tmp_class);
          if (insn_class == TRAP_RISKY || insn_class == IRISKY)
@@ -2346,7 +2352,7 @@ static struct sched_info region_sched_info =
 
   NULL, NULL,
   NULL, NULL,
-  0
+  0, 0
 };
 
 /* Add dependences so that branches are scheduled to run last in their
@@ -2803,10 +2809,7 @@ schedule_region (rgn)
         or after the last real insn of the block.  So if the first insn
         has a REG_SAVE_NOTE which would otherwise be emitted before the
         insn, it is redundant with the note before the start of the
-        block, and so we have to take it out.
-
-        FIXME: Probably the same thing should be done with REG_SAVE_NOTEs
-        referencing NOTE_INSN_SETJMP at the end of the block.  */
+        block, and so we have to take it out.  */
       if (INSN_P (head))
        {
          rtx note;
@@ -2814,14 +2817,9 @@ schedule_region (rgn)
          for (note = REG_NOTES (head); note; note = XEXP (note, 1))
            if (REG_NOTE_KIND (note) == REG_SAVE_NOTE)
              {
-               if (INTVAL (XEXP (note, 0)) != NOTE_INSN_SETJMP)
-                 {
-                   remove_note (head, note);
-                   note = XEXP (note, 1);
-                   remove_note (head, note);
-                 }
-               else
-                 note = XEXP (note, 1);
+               remove_note (head, note);
+               note = XEXP (note, 1);
+               remove_note (head, note);
              }
        }