diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/conflict.c | 17 | ||||
-rw-r--r-- | gcc/ssa.c | 13 |
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; } @@ -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; } |