OSDN Git Service

* regclass.c (dump_regclass): New function.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 21 Nov 1999 12:33:17 +0000 (12:33 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 21 Nov 1999 12:33:17 +0000 (12:33 +0000)
(regclass): New parameter DUMP, call DUMP_REGCLASS.
* toplev.c (rest_of_compilation): Opent lreg dump file before regclass,
pass rtl_dump_file to regclass.
* rtl.h (regclass): Update prototype.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30600 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/regclass.c
gcc/rtl.h
gcc/toplev.c

index 0913a62..50d158c 100644 (file)
@@ -1,3 +1,11 @@
+Fro Nov 19 05:48:45 CET 1999  Jan Hubicka  <hubicka@freesoft.cz>
+
+       * regclass.c (dump_regclass): New function.
+       (regclass): New parameter DUMP, call DUMP_REGCLASS.
+       * toplev.c (rest_of_compilation): Opent lreg dump file before regclass,
+       pass rtl_dump_file to regclass.
+       * rtl.h (regclass): Update prototype.
+
 Sun Nov 21 17:11:13 1999  Geoffrey Keating  <geoffk@cygnus.com>
 
        * varasm.c (output_constructor): Solve problem with long long
index d495fdc..f14433c 100644 (file)
@@ -696,6 +696,7 @@ static int loop_depth;
 static int loop_cost;
 
 static rtx scan_one_insn       PROTO((rtx, int));
+static void dump_regclass      PROTO((FILE *));
 static void record_reg_classes PROTO((int, int, rtx *, enum machine_mode *,
                                       char *, const char **, rtx));
 static int copy_cost           PROTO((rtx, enum machine_mode, 
@@ -745,6 +746,28 @@ regclass_init ()
   prefclass = 0;
 }
 \f
+/* Dump register costs.  */
+void
+dump_regclass (dump)
+     FILE *dump;
+{
+  static const char *const reg_class_names[] = REG_CLASS_NAMES;
+  int i;
+  for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
+    {
+      enum reg_class class;
+      if (REG_N_REFS (i))
+       {
+         fprintf (dump, ";; Register %i costs:", i);
+         for (class = 0; class < N_REG_CLASSES; class++)
+           fprintf (dump, " %s:%i", reg_class_names[(int) class],
+                    costs[i].cost[class]);
+         fprintf (dump, " MEM:%i\n\n", costs[i].mem_cost);
+       }
+    }
+}
+
+\f
 /* Subroutine of regclass, processes one insn INSN.  Scan it and record each
    time it would save code to put a certain register in a certain class.
    PASS, when nonzero, inhibits some optimizations which need only be done
@@ -951,9 +974,10 @@ scan_one_insn (insn, pass)
    This pass comes just before local register allocation.  */
 
 void
-regclass (f, nregs)
+regclass (f, nregs, dump)
      rtx f;
      int nregs;
+     FILE *dump;
 {
   register rtx insn;
   register int i;
@@ -1109,6 +1133,8 @@ regclass (f, nregs)
        }
     }
 
+  if (dump)
+    dump_regclass (dump);
 #ifdef FORBIDDEN_INC_DEC_CLASSES
   free (in_inc_dec);
 #endif
index dedbe99..136cb92 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1571,7 +1571,7 @@ extern void init_regs                     PROTO ((void));
 extern void init_reg_sets              PROTO ((void));
 extern void regset_release_memory      PROTO ((void));
 extern void regclass_init              PROTO ((void));
-extern void regclass                   PROTO ((rtx, int));
+extern void regclass                   PROTO ((rtx, int, FILE *));
 extern void reg_scan                   PROTO ((rtx, int, int));
 extern void reg_scan_update            PROTO ((rtx, rtx, int));
 extern void fix_register               PROTO ((const char *, int, int));
index 20ce927..53a8a79 100644 (file)
@@ -4032,7 +4032,7 @@ rest_of_compilation (decl)
     {
       TIMEVAR (flow_time,
               {
-                regclass (insns, max_reg_num ());
+                regclass (insns, max_reg_num (), NULL);
                 stupid_life_analysis (insns, max_reg_num (),
                                       rtl_dump_file);
               });
@@ -4146,6 +4146,9 @@ rest_of_compilation (decl)
      epilogue thus changing register elimination offsets.  */
   current_function_is_leaf = leaf_function_p ();
 
+  if (local_reg_dump)
+    open_dump_file (".12.lreg", decl_printable_name (decl, 2));
+
   /* Unless we did stupid register allocation,
      allocate pseudo-regs that are used only within 1 basic block. 
 
@@ -4159,7 +4162,7 @@ rest_of_compilation (decl)
                  of life info during sched.  */
               if (! flag_schedule_insns)
                 recompute_reg_usage (insns, ! optimize_size);
-              regclass (insns, max_reg_num ());
+              regclass (insns, max_reg_num (), rtl_dump_file);
               rebuild_label_notes_after_reload = local_alloc ();
             });
   else
@@ -4169,8 +4172,6 @@ rest_of_compilation (decl)
 
   if (local_reg_dump)
     {
-      open_dump_file (".12.lreg", decl_printable_name (decl, 2));
-
       TIMEVAR (dump_time, dump_flow_info (rtl_dump_file));
       TIMEVAR (dump_time, dump_local_alloc (rtl_dump_file));