OSDN Git Service

For phases starting with flow, print basic block information when doing dumps
authormeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Sep 1997 19:15:50 +0000 (19:15 +0000)
committermeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Sep 1997 19:15:50 +0000 (19:15 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@15082 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/flow.c
gcc/print-rtl.c
gcc/toplev.c

index fbaba78..b1bee7c 100644 (file)
@@ -1,3 +1,15 @@
+Thu Sep  4 15:01:49 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * toplev.c (rest_of_compilation): For passes starting with
+       flow_analysis, use print_rtl_with_bb instead of print_rtl.
+
+       * print-rtl.c (print_rtl_single): Print a single rtl value to a
+       file.
+
+       * flow.c (print_rtl_with_bb): Print which insns start and end
+       basic blocks.  For the start of a basic block, also print the live
+       information.
+
 Thu Sep  4 11:51:43 1997  Jim Wilson  <wilson@cygnus.com>
 
        * toplev.c (main): Change #elif to #else/#ifdef
index 3ca1dcf..3b9e593 100644 (file)
@@ -2933,3 +2933,82 @@ dump_flow_info (file)
     }
   fprintf (file, "\n");
 }
+
+\f
+/* Like print_rtl, but also print out live information for the start of each
+   basic block.  */
+
+void
+print_rtl_with_bb (outf, rtx_first)
+     FILE *outf;
+     rtx rtx_first;
+{
+  register rtx tmp_rtx;
+
+  if (rtx_first == 0)
+    fprintf (outf, "(nil)\n");
+
+  else
+    {
+      int i, bb;
+      enum bb_state { NOT_IN_BB, IN_ONE_BB, IN_MULTIPLE_BB };
+      int max_uid = get_max_uid ();
+      int *start = alloca (max_uid * sizeof (int));
+      int *end = alloca (max_uid * sizeof (int));
+      char *in_bb_p = alloca (max_uid * sizeof (enum bb_state));
+
+      for (i = 0; i < max_uid; i++)
+       {
+         start[i] = end[i] = -1;
+         in_bb_p[i] = NOT_IN_BB;
+       }
+
+      for (i = n_basic_blocks-1; i >= 0; i--)
+       {
+         rtx x;
+         start[INSN_UID (basic_block_head[i])] = i;
+         end[INSN_UID (basic_block_end[i])] = i;
+         for (x = basic_block_head[i]; x != NULL_RTX; x = NEXT_INSN (x))
+           {
+             in_bb_p[ INSN_UID(x)] =
+               ((in_bb_p[ INSN_UID(x)] == NOT_IN_BB)
+                ? IN_ONE_BB
+                : IN_MULTIPLE_BB);
+             if (x == basic_block_end[i])
+               break;
+           }
+       }
+
+      for (tmp_rtx = rtx_first; NULL != tmp_rtx; tmp_rtx = NEXT_INSN (tmp_rtx))
+       {
+         if ((bb = start[INSN_UID (tmp_rtx)]) >= 0)
+           {
+             fprintf (outf, ";; Start of basic block %d, registers live:",
+                      bb);
+
+             EXECUTE_IF_SET_IN_REG_SET (basic_block_live_at_start[bb], 0, i,
+                                        {
+                                          fprintf (outf, " %d", i);
+                                          if (i < FIRST_PSEUDO_REGISTER)
+                                            fprintf (outf, " [%s]",
+                                                     reg_names[i]);
+                                        });
+             putc ('\n', outf);
+           }
+
+         if (in_bb_p[ INSN_UID(tmp_rtx)] == NOT_IN_BB
+             && GET_CODE (tmp_rtx) != NOTE
+             && GET_CODE (tmp_rtx) != BARRIER)
+           fprintf (outf, ";; Insn is not within a basic block\n");
+         else if (in_bb_p[ INSN_UID(tmp_rtx)] == IN_MULTIPLE_BB)
+           fprintf (outf, ";; Insn is in multiple basic blocks\n");
+
+         print_rtl_single (outf, tmp_rtx);
+
+         if ((bb = end[INSN_UID (tmp_rtx)]) >= 0)
+           fprintf (outf, ";; End of basic block %d\n", bb);
+
+         putc ('\n', outf);
+       }
+    }
+}
index 1073288..bb4ee0d 100644 (file)
@@ -345,3 +345,16 @@ print_rtl (outf, rtx_first)
        print_rtx (rtx_first);
       }
 }
+
+/* Like print_rtx, except specify a file.  */
+
+void
+print_rtl_single (outf, x)
+     FILE *outf;
+     rtx x;
+{
+  outfile = outf;
+  sawclose = 0;
+  print_rtx (x);
+  putc ('\n', outf);
+}
index 156310b..d1ddf20 100644 (file)
@@ -3350,7 +3350,7 @@ rest_of_compilation (decl)
   if (flow_dump)
     TIMEVAR (dump_time,
             {
-              print_rtl (flow_dump_file, insns);
+              print_rtl_with_bb (flow_dump_file, insns);
               fflush (flow_dump_file);
             });
 
@@ -3367,7 +3367,7 @@ rest_of_compilation (decl)
               fprintf (combine_dump_file, "\n;; Function %s\n\n",
                        (*decl_printable_name) (decl, 2));
               dump_combine_stats (combine_dump_file);
-              print_rtl (combine_dump_file, insns);
+              print_rtl_with_bb (combine_dump_file, insns);
               fflush (combine_dump_file);
             });
 
@@ -3387,7 +3387,7 @@ rest_of_compilation (decl)
   if (regmove_dump)
     TIMEVAR (dump_time,
             {
-              print_rtl (regmove_dump_file, insns);
+              print_rtl_with_bb (regmove_dump_file, insns);
               fflush (regmove_dump_file);
             });
 
@@ -3414,7 +3414,7 @@ rest_of_compilation (decl)
   if (sched_dump)
     TIMEVAR (dump_time,
             {
-              print_rtl (sched_dump_file, insns);
+              print_rtl_with_bb (sched_dump_file, insns);
               fflush (sched_dump_file);
             });
 
@@ -3437,7 +3437,7 @@ rest_of_compilation (decl)
                        (*decl_printable_name) (decl, 2));
               dump_flow_info (local_reg_dump_file);
               dump_local_alloc (local_reg_dump_file);
-              print_rtl (local_reg_dump_file, insns);
+              print_rtl_with_bb (local_reg_dump_file, insns);
               fflush (local_reg_dump_file);
             });
 
@@ -3466,7 +3466,7 @@ rest_of_compilation (decl)
     TIMEVAR (dump_time,
             {
               dump_global_regs (global_reg_dump_file);
-              print_rtl (global_reg_dump_file, insns);
+              print_rtl_with_bb (global_reg_dump_file, insns);
               fflush (global_reg_dump_file);
             });
 
@@ -3505,7 +3505,7 @@ rest_of_compilation (decl)
       if (sched2_dump)
        TIMEVAR (dump_time,
                 {
-                  print_rtl (sched2_dump_file, insns);
+                  print_rtl_with_bb (sched2_dump_file, insns);
                   fflush (sched2_dump_file);
                 });
     }
@@ -3533,7 +3533,7 @@ rest_of_compilation (decl)
             {
               fprintf (jump2_opt_dump_file, "\n;; Function %s\n\n",
                        (*decl_printable_name) (decl, 2));
-              print_rtl (jump2_opt_dump_file, insns);
+              print_rtl_with_bb (jump2_opt_dump_file, insns);
               fflush (jump2_opt_dump_file);
             });
 
@@ -3555,7 +3555,7 @@ rest_of_compilation (decl)
                 {
                   fprintf (dbr_sched_dump_file, "\n;; Function %s\n\n",
                            (*decl_printable_name) (decl, 2));
-                  print_rtl (dbr_sched_dump_file, insns);
+                  print_rtl_with_bb (dbr_sched_dump_file, insns);
                   fflush (dbr_sched_dump_file);
                 });
        }
@@ -3576,7 +3576,7 @@ rest_of_compilation (decl)
               {
                 fprintf (stack_reg_dump_file, "\n;; Function %s\n\n",
                          (*decl_printable_name) (decl, 2));
-                print_rtl (stack_reg_dump_file, insns);
+                print_rtl_with_bb (stack_reg_dump_file, insns);
                 fflush (stack_reg_dump_file);
               });
     }