OSDN Git Service

2004-09-17 Jeffrey D. Oldham <oldham@codesourcery.com>
[pf3gnuchains/gcc-fork.git] / gcc / print-rtl.c
index 0143f09..0683159 100644 (file)
@@ -19,22 +19,28 @@ 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.  */
 
-
+/* This file is compiled twice: once for the generator programs,
+   once for the compiler.  */
+#ifdef GENERATOR_FILE
+#include "bconfig.h"
+#else
 #include "config.h"
+#endif
+
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
 #include "rtl.h"
 
-/* We don't want the tree code checking code for the access to the
-   DECL_NAME to be included in the gen* programs.  */
-#undef ENABLE_TREE_CHECKING
+/* These headers all define things which are not available in
+   generator programs.  */
+#ifndef GENERATOR_FILE
 #include "tree.h"
 #include "real.h"
 #include "flags.h"
 #include "hard-reg-set.h"
 #include "basic-block.h"
-#include "tm_p.h"
+#endif
 
 static FILE *outfile;
 
@@ -60,6 +66,24 @@ int flag_simple = 0;
 /* Nonzero if we are dumping graphical description.  */
 int dump_for_graph;
 
+#ifndef GENERATOR_FILE
+static void
+print_decl_name (FILE *outfile, tree node)
+{
+  if (DECL_NAME (node))
+    fputs (IDENTIFIER_POINTER (DECL_NAME (node)), outfile);
+  else
+    {
+      if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1)
+       fprintf (outfile, "L." HOST_WIDE_INT_PRINT_DEC, LABEL_DECL_UID (node));
+      else
+        {
+          char c = TREE_CODE (node) == CONST_DECL ? 'C' : 'D';
+         fprintf (outfile, "%c.%u", c, DECL_UID (node));
+        }
+    }
+}
+
 void
 print_mem_expr (FILE *outfile, tree expr)
 {
@@ -69,9 +93,8 @@ print_mem_expr (FILE *outfile, tree expr)
        print_mem_expr (outfile, TREE_OPERAND (expr, 0));
       else
        fputs (" <variable>", outfile);
-      if (DECL_NAME (TREE_OPERAND (expr, 1)))
-       fprintf (outfile, ".%s",
-                IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (expr, 1))));
+      fputc ('.', outfile);
+      print_decl_name (outfile, TREE_OPERAND (expr, 1));
     }
   else if (TREE_CODE (expr) == INDIRECT_REF)
     {
@@ -79,13 +102,15 @@ print_mem_expr (FILE *outfile, tree expr)
       print_mem_expr (outfile, TREE_OPERAND (expr, 0));
       fputs (")", outfile);
     }
-  else if (DECL_NAME (expr))
-    fprintf (outfile, " %s", IDENTIFIER_POINTER (DECL_NAME (expr)));
   else if (TREE_CODE (expr) == RESULT_DECL)
     fputs (" <result>", outfile);
   else
-    fputs (" <anonymous>", outfile);
+    {
+      fputc (' ', outfile);
+      print_decl_name (outfile, expr);
+    }
 }
+#endif
 
 /* Print IN_RTX onto OUTFILE.  This is the recursive part of printing.  */
 
@@ -124,8 +149,8 @@ print_rtx (rtx in_rtx)
   /* When printing in VCG format we write INSNs, NOTE, LABEL, and BARRIER
      in separate nodes and therefore have to handle them special here.  */
   if (dump_for_graph
-      && (is_insn || GET_CODE (in_rtx) == NOTE
-         || GET_CODE (in_rtx) == CODE_LABEL || GET_CODE (in_rtx) == BARRIER))
+      && (is_insn || NOTE_P (in_rtx)
+         || LABEL_P (in_rtx) || BARRIER_P (in_rtx)))
     {
       i = 3;
       indent = 0;
@@ -231,7 +256,7 @@ print_rtx (rtx in_rtx)
              print_node_brief (outfile, "", decl, 0);
          }
 #endif
-       else if (i == 4 && GET_CODE (in_rtx) == NOTE)
+       else if (i == 4 && NOTE_P (in_rtx))
          {
            switch (NOTE_LINE_NUMBER (in_rtx))
              {
@@ -257,9 +282,11 @@ print_rtx (rtx in_rtx)
 
              case NOTE_INSN_BASIC_BLOCK:
                {
+#ifndef GENERATOR_FILE
                  basic_block bb = NOTE_BASIC_BLOCK (in_rtx);
                  if (bb != 0)
                    fprintf (outfile, " [bb %d]", bb->index);
+#endif
                  break;
                }
 
@@ -281,29 +308,24 @@ print_rtx (rtx in_rtx)
                }
                break;
 
-             case NOTE_INSN_PREDICTION:
-               if (NOTE_PREDICTION (in_rtx))
-                 fprintf (outfile, " [ %d %d ] ",
-                          (int)NOTE_PREDICTION_ALG (in_rtx),
-                          (int) NOTE_PREDICTION_FLAGS (in_rtx));
-               else
-                 fprintf (outfile, " [ ERROR ]");
-               break;
-
              case NOTE_INSN_UNLIKELY_EXECUTED_CODE:
                {
+#ifndef GENERATOR_FILE
                  basic_block bb = NOTE_BASIC_BLOCK (in_rtx);
                  if (bb != 0)
                    fprintf (outfile, " [bb %d]", bb->index);
+#endif
                  break;
                }
                
              case NOTE_INSN_VAR_LOCATION:
+#ifndef GENERATOR_FILE
                fprintf (outfile, " (");
                print_mem_expr (outfile, NOTE_VAR_LOCATION_DECL (in_rtx));
                fprintf (outfile, " ");
                print_rtx (NOTE_VAR_LOCATION_LOC (in_rtx));
                fprintf (outfile, ")");
+#endif
                break;
 
              default:
@@ -385,7 +407,7 @@ print_rtx (rtx in_rtx)
              fprintf(outfile, " %s:%i", insn_file (in_rtx), insn_line (in_rtx));
 #endif
          }
-       else if (i == 6 && GET_CODE (in_rtx) == NOTE)
+       else if (i == 6 && NOTE_P (in_rtx))
          {
            /* This field is only used for NOTE_INSN_DELETED_LABEL, and
               other times often contains garbage from INSN->NOTE death.  */
@@ -421,11 +443,12 @@ print_rtx (rtx in_rtx)
            else
 #endif
              if (flag_dump_unnumbered
-                    && (is_insn || GET_CODE (in_rtx) == NOTE))
+                    && (is_insn || NOTE_P (in_rtx)))
              fputc ('#', outfile);
            else
              fprintf (outfile, " %d", value);
 
+#ifndef GENERATOR_FILE
            if (REG_P (in_rtx) && REG_ATTRS (in_rtx))
              {
                fputs (" [", outfile);
@@ -439,6 +462,7 @@ print_rtx (rtx in_rtx)
                           REG_OFFSET (in_rtx));
                fputs (" ]", outfile);
              }
+#endif
 
            if (is_insn && &INSN_CODE (in_rtx) == &XINT (in_rtx, i)
                && XINT (in_rtx, i) >= 0
@@ -493,10 +517,12 @@ print_rtx (rtx in_rtx)
        break;
 
       case 'b':
+#ifndef GENERATOR_FILE
        if (XBITMAP (in_rtx, i) == NULL)
          fputs (" {null}", outfile);
        else
          bitmap_print (outfile, XBITMAP (in_rtx, i), " {", "}");
+#endif
        sawclose = 0;
        break;
 
@@ -510,8 +536,10 @@ print_rtx (rtx in_rtx)
        break;
 
       case 'B':
+#ifndef GENERATOR_FILE
        if (XBBDEF (in_rtx, i))
          fprintf (outfile, " %i", XBBDEF (in_rtx, i)->index);
+#endif
        break;
 
       default:
@@ -577,8 +605,8 @@ print_rtx (rtx in_rtx)
     }
 
   if (dump_for_graph
-      && (is_insn || GET_CODE (in_rtx) == NOTE
-         || GET_CODE (in_rtx) == CODE_LABEL || GET_CODE (in_rtx) == BARRIER))
+      && (is_insn || NOTE_P (in_rtx)
+         || LABEL_P (in_rtx) || BARRIER_P (in_rtx)))
     sawclose = 0;
   else
     {
@@ -717,7 +745,7 @@ print_rtl (FILE *outf, rtx rtx_first)
       case BARRIER:
        for (tmp_rtx = rtx_first; tmp_rtx != 0; tmp_rtx = NEXT_INSN (tmp_rtx))
          if (! flag_dump_unnumbered
-             || GET_CODE (tmp_rtx) != NOTE || NOTE_LINE_NUMBER (tmp_rtx) < 0)
+             || !NOTE_P (tmp_rtx) || NOTE_LINE_NUMBER (tmp_rtx) < 0)
            {
              fputs (print_rtx_head, outfile);
              print_rtx (tmp_rtx);
@@ -740,7 +768,7 @@ print_rtl_single (FILE *outf, rtx x)
   outfile = outf;
   sawclose = 0;
   if (! flag_dump_unnumbered
-      || GET_CODE (x) != NOTE || NOTE_LINE_NUMBER (x) < 0)
+      || !NOTE_P (x) || NOTE_LINE_NUMBER (x) < 0)
     {
       fputs (print_rtx_head, outfile);
       print_rtx (x);