This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Move reg-alloc and reg-scan dump


Hi,
Using -da dies as dump_flow_info output reg-scan data that is not
up-to-date each time we want to output flowgraph.
This info is important enought for dumping I guess only for reg-alloc,
so I would propose moving the dump to local-alloc...


Tue Dec 10 20:33:18 CET 2002  Jan Hubicka  <jh@suse.cz>
	* cfg.c (dump_flow_info): Move regalloc and reg-scan data dump to ...
	* local-alloc.c (dump_local_alloc): ... here
Index: cfg.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfg.c,v
retrieving revision 1.35.12.1
diff -c -3 -p -r1.35.12.1 cfg.c
*** cfg.c	7 Dec 2002 16:41:07 -0000	1.35.12.1
--- cfg.c	10 Dec 2002 19:21:39 -0000
*************** void
*** 501,554 ****
  dump_flow_info (file)
       FILE *file;
  {
-   int i;
-   int max_regno = max_reg_num ();
    basic_block bb;
-   static const char * const reg_class_names[] = REG_CLASS_NAMES;
- 
-   fprintf (file, "%d registers.\n", max_regno);
-   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
-     if (REG_N_REFS (i))
-       {
- 	enum reg_class class, altclass;
- 
- 	fprintf (file, "\nRegister %d used %d times across %d insns",
- 		 i, REG_N_REFS (i), REG_LIVE_LENGTH (i));
- 	if (REG_BASIC_BLOCK (i) >= 0)
- 	  fprintf (file, " in block %d", REG_BASIC_BLOCK (i));
- 	if (REG_N_SETS (i))
- 	  fprintf (file, "; set %d time%s", REG_N_SETS (i),
- 		   (REG_N_SETS (i) == 1) ? "" : "s");
- 	if (regno_reg_rtx[i] != NULL && REG_USERVAR_P (regno_reg_rtx[i]))
- 	  fprintf (file, "; user var");
- 	if (REG_N_DEATHS (i) != 1)
- 	  fprintf (file, "; dies in %d places", REG_N_DEATHS (i));
- 	if (REG_N_CALLS_CROSSED (i) == 1)
- 	  fprintf (file, "; crosses 1 call");
- 	else if (REG_N_CALLS_CROSSED (i))
- 	  fprintf (file, "; crosses %d calls", REG_N_CALLS_CROSSED (i));
- 	if (regno_reg_rtx[i] != NULL
- 	    && PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
- 	  fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
- 
- 	class = reg_preferred_class (i);
- 	altclass = reg_alternate_class (i);
- 	if (class != GENERAL_REGS || altclass != ALL_REGS)
- 	  {
- 	    if (altclass == ALL_REGS || class == ALL_REGS)
- 	      fprintf (file, "; pref %s", reg_class_names[(int) class]);
- 	    else if (altclass == NO_REGS)
- 	      fprintf (file, "; %s or none", reg_class_names[(int) class]);
- 	    else
- 	      fprintf (file, "; pref %s, else %s",
- 		       reg_class_names[(int) class],
- 		       reg_class_names[(int) altclass]);
- 	  }
- 
- 	if (regno_reg_rtx[i] != NULL && REG_POINTER (regno_reg_rtx[i]))
- 	  fprintf (file, "; pointer");
- 	fprintf (file, ".\n");
-       }
  
    fprintf (file, "\n%d basic blocks, %d edges.\n", n_basic_blocks, n_edges);
    FOR_EACH_BB (bb)
--- 501,507 ----
Index: local-alloc.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/local-alloc.c,v
retrieving revision 1.112
diff -c -3 -p -r1.112 local-alloc.c
*** local-alloc.c	4 Nov 2002 16:57:01 -0000	1.112
--- local-alloc.c	10 Dec 2002 19:21:48 -0000
*************** dump_local_alloc (file)
*** 2478,2483 ****
--- 2478,2529 ----
       FILE *file;
  {
    int i;
+   int max_regno = max_reg_num ();
+   static const char * const reg_class_names[] = REG_CLASS_NAMES;
+ 
+   fprintf (file, "%d registers.\n", max_regno);
+   for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
+     if (REG_N_REFS (i))
+       {
+ 	enum reg_class class, altclass;
+ 
+ 	fprintf (file, "\nRegister %d used %d times across %d insns",
+ 		 i, REG_N_REFS (i), REG_LIVE_LENGTH (i));
+ 	if (REG_BASIC_BLOCK (i) >= 0)
+ 	  fprintf (file, " in block %d", REG_BASIC_BLOCK (i));
+ 	if (REG_N_SETS (i))
+ 	  fprintf (file, "; set %d time%s", REG_N_SETS (i),
+ 		   (REG_N_SETS (i) == 1) ? "" : "s");
+ 	if (regno_reg_rtx[i] != NULL && REG_USERVAR_P (regno_reg_rtx[i]))
+ 	  fprintf (file, "; user var");
+ 	if (REG_N_DEATHS (i) != 1)
+ 	  fprintf (file, "; dies in %d places", REG_N_DEATHS (i));
+ 	if (REG_N_CALLS_CROSSED (i) == 1)
+ 	  fprintf (file, "; crosses 1 call");
+ 	else if (REG_N_CALLS_CROSSED (i))
+ 	  fprintf (file, "; crosses %d calls", REG_N_CALLS_CROSSED (i));
+ 	if (regno_reg_rtx[i] != NULL
+ 	    && PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
+ 	  fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
+ 
+ 	class = reg_preferred_class (i);
+ 	altclass = reg_alternate_class (i);
+ 	if (class != GENERAL_REGS || altclass != ALL_REGS)
+ 	  {
+ 	    if (altclass == ALL_REGS || class == ALL_REGS)
+ 	      fprintf (file, "; pref %s", reg_class_names[(int) class]);
+ 	    else if (altclass == NO_REGS)
+ 	      fprintf (file, "; %s or none", reg_class_names[(int) class]);
+ 	    else
+ 	      fprintf (file, "; pref %s, else %s",
+ 		       reg_class_names[(int) class],
+ 		       reg_class_names[(int) altclass]);
+ 	  }
+ 
+ 	if (regno_reg_rtx[i] != NULL && REG_POINTER (regno_reg_rtx[i]))
+ 	  fprintf (file, "; pointer");
+ 	fprintf (file, ".\n");
+       }
    for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
      if (reg_renumber[i] != -1)
        fprintf (file, ";; Register %d in %d.\n", i, reg_renumber[i]);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]