diff options
author | Richard Henderson <rth@cygnus.com> | 1999-10-14 16:31:25 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1999-10-14 16:31:25 -0700 |
commit | ff6663134070df58da6bee2b654fb683ba4cfb25 (patch) | |
tree | bb8ecc69cc595e63f765606859f035b861876b72 /gcc | |
parent | d1abb9254b8e917820e4b8c31f7ec0cc1090b6f6 (diff) | |
download | gcc-ff6663134070df58da6bee2b654fb683ba4cfb25.zip gcc-ff6663134070df58da6bee2b654fb683ba4cfb25.tar.gz gcc-ff6663134070df58da6bee2b654fb683ba4cfb25.tar.bz2 |
flow.c (propagate_block): Use free_EXPR_LIST_list instead of zapping mem_set_list.
* flow.c (propagate_block): Use free_EXPR_LIST_list instead of
zapping mem_set_list.
(invalidate_mems_from_autoinc): Use free_EXPR_LIST_node.
(mark_set_1, mark_used_regs): Likewise.
From-SVN: r29990
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/flow.c | 40 |
2 files changed, 27 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6fe5822..e9305fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -3,6 +3,11 @@ Thu Oct 14 16:27:50 1999 Richard Henderson <rth@cygnus.com> * flow.c (propagate_block): Add call-clobbered registers to significant too. + * flow.c (propagate_block): Use free_EXPR_LIST_list instead of + zapping mem_set_list. + (invalidate_mems_from_autoinc): Use free_EXPR_LIST_node. + (mark_set_1, mark_used_regs): Likewise. + Thu Oct 14 13:54:25 1999 Jason Merrill <jason@yorick.cygnus.com> * toplev.c (main): Don't complain about options for other languages. @@ -263,12 +263,7 @@ static int loop_depth; static int cc0_live; /* During propagate_block, this contains a list of all the MEMs we are - tracking for dead store elimination. - - ?!? Note we leak memory by not free-ing items on this list. We need to - write some generic routines to operate on memory lists since cse, gcse, - loop, sched, flow and possibly other passes all need to do basically the - same operations on these lists. */ + tracking for dead store elimination. */ static rtx mem_set_list; @@ -3227,7 +3222,6 @@ propagate_block (old, first, last, significant, bnum, flags) live = ALLOCA_REG_SET (); cc0_live = 0; - mem_set_list = NULL_RTX; if (flags & PROP_REG_INFO) { @@ -3451,7 +3445,7 @@ propagate_block (old, first, last, significant, bnum, flags) flags, insn); /* Calls also clobber memory. */ - mem_set_list = NULL_RTX; + free_EXPR_LIST_list (&mem_set_list); } /* Update OLD for the registers used or set. */ @@ -3473,6 +3467,7 @@ propagate_block (old, first, last, significant, bnum, flags) FREE_REG_SET (dead); FREE_REG_SET (live); + free_EXPR_LIST_list (&mem_set_list); } /* Return 1 if X (the body of an insn, or part of it) is just dead stores @@ -3730,20 +3725,23 @@ invalidate_mems_from_autoinc (insn) { rtx temp = mem_set_list; rtx prev = NULL_RTX; + rtx next; while (temp) { + next = XEXP (temp, 1); if (reg_overlap_mentioned_p (XEXP (note, 0), XEXP (temp, 0))) { /* Splice temp out of list. */ if (prev) - XEXP (prev, 1) = XEXP (temp, 1); + XEXP (prev, 1) = next; else - mem_set_list = XEXP (temp, 1); + mem_set_list = next; + free_EXPR_LIST_node (temp); } else prev = temp; - temp = XEXP (temp, 1); + temp = next; } } } @@ -3836,9 +3834,11 @@ mark_set_1 (needed, dead, x, insn, significant, flags) { rtx temp = mem_set_list; rtx prev = NULL_RTX; + rtx next; while (temp) { + next = XEXP (temp, 1); if ((GET_CODE (reg) == MEM && output_dependence (XEXP (temp, 0), reg)) || (GET_CODE (reg) == REG @@ -3846,13 +3846,14 @@ mark_set_1 (needed, dead, x, insn, significant, flags) { /* Splice this entry out of the list. */ if (prev) - XEXP (prev, 1) = XEXP (temp, 1); + XEXP (prev, 1) = next; else - mem_set_list = XEXP (temp, 1); + mem_set_list = next; + free_EXPR_LIST_node (temp); } else prev = temp; - temp = XEXP (temp, 1); + temp = next; } } @@ -4300,20 +4301,23 @@ mark_used_regs (needed, live, x, flags, insn) { rtx temp = mem_set_list; rtx prev = NULL_RTX; + rtx next; while (temp) { + next = XEXP (temp, 1); if (anti_dependence (XEXP (temp, 0), x)) { /* Splice temp out of the list. */ if (prev) - XEXP (prev, 1) = XEXP (temp, 1); + XEXP (prev, 1) = next; else - mem_set_list = XEXP (temp, 1); + mem_set_list = next; + free_EXPR_LIST_node (temp); } else prev = temp; - temp = XEXP (temp, 1); + temp = next; } } @@ -4606,7 +4610,7 @@ mark_used_regs (needed, live, x, flags, insn) So for now, just clear the memory set list and mark any regs we can find in ASM_OPERANDS as used. */ if (code != ASM_OPERANDS || MEM_VOLATILE_P (x)) - mem_set_list = NULL_RTX; + free_EXPR_LIST_list (&mem_set_list); /* For all ASM_OPERANDS, we must traverse the vector of input operands. We can not just fall through here since then we would be confused |