OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / sched-vis.c
index 9bbc435..8949421 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
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 02111-1307, USA.  */
 \f
 #include "config.h"
@@ -27,9 +27,12 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "rtl.h"
 #include "tm_p.h"
 #include "regs.h"
+#include "hard-reg-set.h"
+#include "basic-block.h"
 #include "insn-attr.h"
 #include "sched-int.h"
 
+#ifdef INSN_SCHEDULING
 /* target_units bitmask has 1 for each unit in the cpu.  It should be
    possible to compute this variable from the machine description.
    But currently it is computed by examining the insn list.  Since
@@ -81,9 +84,11 @@ insn_print_units (insn)
 #define MAX_VISUAL_LINES 100
 #define INSN_LEN 30
 int n_visual_lines;
+static unsigned visual_tbl_line_length;
 char *visual_tbl;
 int n_vis_no_unit;
-rtx vis_no_unit[10];
+#define MAX_VISUAL_NO_UNIT 20
+rtx vis_no_unit[MAX_VISUAL_NO_UNIT];
 
 /* Finds units that are in use in this fuction.  Required only
    for visualization.  */
@@ -132,6 +137,8 @@ get_visual_tbl_length ()
   n += n1;
   n += strlen ("\n") + 2;
 
+  visual_tbl_line_length = n;
+
   /* Compute length of visualization string.  */
   return (MAX_VISUAL_LINES * n);
 }
@@ -585,7 +592,7 @@ print_value (buf, x, verbose)
     case SUBREG:
       print_value (t, SUBREG_REG (x), verbose);
       cur = safe_concat (buf, cur, t);
-      sprintf (t, "#%d", SUBREG_WORD (x));
+      sprintf (t, "#%d", SUBREG_BYTE (x));
       cur = safe_concat (buf, cur, t);
       break;
     case SCRATCH:
@@ -838,8 +845,11 @@ void
 visualize_no_unit (insn)
      rtx insn;
 {
-  vis_no_unit[n_vis_no_unit] = insn;
-  n_vis_no_unit++;
+  if (n_vis_no_unit < MAX_VISUAL_NO_UNIT)
+    {
+      vis_no_unit[n_vis_no_unit] = insn;
+      n_vis_no_unit++;
+    }
 }
 
 /* Print insns scheduled in clock, for visualization.  */
@@ -895,7 +905,9 @@ void
 visualize_stall_cycles (stalls)
      int stalls;
 {
-  int i;
+  static const char *const prefix = ";;       ";
+  const char *suffix = "\n";
+  char *p;
 
   /* If no more room, split table into two.  */
   if (n_visual_lines >= MAX_VISUAL_LINES)
@@ -906,10 +918,21 @@ visualize_stall_cycles (stalls)
 
   n_visual_lines++;
 
-  sprintf (visual_tbl + strlen (visual_tbl), ";;       ");
-  for (i = 0; i < stalls; i++)
-    sprintf (visual_tbl + strlen (visual_tbl), ".");
-  sprintf (visual_tbl + strlen (visual_tbl), "\n");
+  p = visual_tbl + strlen (visual_tbl);
+  strcpy (p, prefix);
+  p += strlen (prefix);
+
+  if ((unsigned)stalls >
+      visual_tbl_line_length - strlen (prefix) - strlen (suffix))
+    {
+      suffix = "[...]\n";
+      stalls = visual_tbl_line_length - strlen (prefix) - strlen (suffix);
+    }
+
+  memset (p, '.', stalls);
+  p += stalls;
+
+  strcpy (p, suffix);
 }
 
 /* Allocate data used for visualization during scheduling.  */
@@ -927,3 +950,4 @@ visualize_free ()
 {
   free (visual_tbl);
 }
+#endif