This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[lno] Fix df.c problem
- From: Zdenek Dvorak <rakdver at atrey dot karlin dot mff dot cuni dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Cc: DORIT at il dot ibm dot com
- Date: Thu, 18 Mar 2004 14:51:52 +0100
- Subject: [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);