aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/conflict.c17
-rw-r--r--gcc/ssa.c13
3 files changed, 24 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0046e6e..4f07be0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-01-12 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+ * conflict.c (conflict_graph_compute): Free regsets when finished.
+ * ssa.c (compute_coalesced_reg_partition): Likewise.
+
2002-01-12 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
* global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED
diff --git a/gcc/conflict.c b/gcc/conflict.c
index 99cd9ca..d1fb129 100644
--- a/gcc/conflict.c
+++ b/gcc/conflict.c
@@ -449,20 +449,20 @@ conflict_graph_compute (regs, p)
{
int b;
conflict_graph graph = conflict_graph_new (max_reg_num ());
+ regset_head live_head;
+ regset live = &live_head;
+ regset_head born_head;
+ regset born = &born_head;
+
+ INIT_REG_SET (live);
+ INIT_REG_SET (born);
for (b = n_basic_blocks; --b >= 0; )
{
basic_block bb = BASIC_BLOCK (b);
- regset_head live_head;
- regset live = &live_head;
- regset_head born_head;
- regset born = &born_head;
rtx insn;
rtx head;
- INIT_REG_SET (live);
- INIT_REG_SET (born);
-
/* Start with the regs that are live on exit, limited to those
we're interested in. */
COPY_REG_SET (live, bb->global_live_at_end);
@@ -524,5 +524,8 @@ conflict_graph_compute (regs, p)
}
}
+ FREE_REG_SET (live);
+ FREE_REG_SET (born);
+
return graph;
}
diff --git a/gcc/ssa.c b/gcc/ssa.c
index bb71706..503d1a7 100644
--- a/gcc/ssa.c
+++ b/gcc/ssa.c
@@ -1850,6 +1850,8 @@ compute_coalesced_reg_partition ()
{
int bb;
int changed = 0;
+ regset_head phi_set_head;
+ regset phi_set = &phi_set_head;
partition p =
partition_new (ssa_definition->num_elements);
@@ -1861,20 +1863,21 @@ compute_coalesced_reg_partition ()
for (bb = n_basic_blocks; --bb >= 0; )
make_regs_equivalent_over_bad_edges (bb, p);
+ INIT_REG_SET (phi_set);
+
do
{
- regset_head phi_set;
conflict_graph conflicts;
changed = 0;
/* Build the set of registers involved in phi nodes, either as
arguments to the phi function or as the target of a set. */
- INITIALIZE_REG_SET (phi_set);
- mark_phi_and_copy_regs (&phi_set);
+ CLEAR_REG_SET (phi_set);
+ mark_phi_and_copy_regs (phi_set);
/* Compute conflicts. */
- conflicts = conflict_graph_compute (&phi_set, p);
+ conflicts = conflict_graph_compute (phi_set, p);
/* FIXME: Better would be to process most frequently executed
blocks first, so that most frequently executed copies would
@@ -1892,6 +1895,8 @@ compute_coalesced_reg_partition ()
}
while (changed > 0);
+ FREE_REG_SET (phi_set);
+
return p;
}