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]

[lno] Fix df.c problem


Hello,

as it usually happens, 5 minutes after I sent mail claiming that
lno branch compiles specs, it was pointed out to me that it is no
longer true :-).  I will commit the following fix once it passes
regtesting.

Zdenek

	* df.c (df_reg_def_chain_create, df_reg_use_chain_create): Do not clean
	up the old information here.
	(df_reg_def_chain_clean, df_reg_use_chain_clean): New.
	(df_analyse_subcfg): Call them.

Index: df.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/df.c,v
retrieving revision 1.32.2.12.4.3
diff -c -3 -p -r1.32.2.12.4.3 df.c
*** df.c	9 Mar 2004 18:21:44 -0000	1.32.2.12.4.3
--- df.c	18 Mar 2004 13:47:29 -0000
*************** df_bb_reg_def_chain_create (struct df *d
*** 1318,1325 ****
  
  
  /* Create reg-def chains for each basic block within BLOCKS.  These
!    are a list of definitions for each register.  If REDO is true, remove the
!    old reg-def chains first, otherwise just add new defs to them.  */
  
  static void
  df_reg_def_chain_create (struct df *df, bitmap blocks, bool redo)
--- 1318,1325 ----
  
  
  /* Create reg-def chains for each basic block within BLOCKS.  These
!    are a list of definitions for each register.  If REDO is true, add
!    all defs, otherwise just add the new defs.  */
  
  static void
  df_reg_def_chain_create (struct df *df, bitmap blocks, bool redo)
*************** df_reg_def_chain_create (struct df *df, 
*** 1330,1337 ****
  
    if (redo)
      {
        for (regno = 0; regno < df->n_regs; regno++)
! 	free_reg_ref_chain (&df->regs[regno].defs);
  
        /* Pretend that all defs are new.  */
        df->def_id_save = 0;
--- 1330,1340 ----
  
    if (redo)
      {
+ #ifdef ENABLE_CHECKING
        for (regno = 0; regno < df->n_regs; regno++)
! 	if (df->regs[regno].defs)
! 	  abort ();
! #endif
  
        /* Pretend that all defs are new.  */
        df->def_id_save = 0;
*************** df_reg_def_chain_create (struct df *df, 
*** 1345,1350 ****
--- 1348,1364 ----
    df->def_id_save = old_def_id_save;
  }
  
+ /* Remove all reg-def chains stored in the dataflow object DF.  */
+ 
+ static void
+ df_reg_def_chain_clean (struct df *df)
+ {
+   unsigned regno;
+ 
+   for (regno = 0; regno < df->n_regs; regno++)
+     free_reg_ref_chain (&df->regs[regno].defs);
+ }
+ 
  /* Create reg-use chains for basic block BB.  These are a list of uses
     for each register.  */
  
*************** df_reg_use_chain_create (struct df *df, 
*** 1396,1403 ****
  
    if (redo)
      {
        for (regno = 0; regno < df->n_regs; regno++)
! 	free_reg_ref_chain (&df->regs[regno].uses);
  
        /* Pretend that all uses are new.  */
        df->use_id_save = 0;
--- 1410,1420 ----
  
    if (redo)
      {
+ #ifdef ENABLE_CHECKING
        for (regno = 0; regno < df->n_regs; regno++)
! 	if (df->regs[regno].uses)
! 	  abort ();
! #endif
  
        /* Pretend that all uses are new.  */
        df->use_id_save = 0;
*************** df_reg_use_chain_create (struct df *df, 
*** 1411,1416 ****
--- 1428,1443 ----
    df->use_id_save = old_use_id_save;
  }
  
+ /* Remove all reg-use chains stored in the dataflow object DF.  */
+ 
+ static void
+ df_reg_use_chain_clean (struct df *df)
+ {
+   unsigned regno;
+ 
+   for (regno = 0; regno < df->n_regs; regno++)
+     free_reg_ref_chain (&df->regs[regno].uses);
+ }
  
  /* Create def-use chains from reaching use bitmaps for basic block BB.  */
  static void
*************** df_analyse_subcfg (struct df *df, bitmap
*** 2343,2348 ****
--- 2370,2378 ----
  	    }
  	}
      }
+ 
+   df_reg_def_chain_clean (df);
+   df_reg_use_chain_clean (df);
  
    df_refs_update (df, blocks);
  


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