From 925be47cd54bcdb5e6da71a37de22ca08f367f83 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Fri, 16 Oct 1998 01:23:51 +0000 Subject: [PATCH] cse.c (cse_basic_block): Fixup hash flushing loop so we do not accidently walk into the free list. * cse.c (cse_basic_block): Fixup hash flushing loop so we do not accidently walk into the free list. Comment how that can happen. (invalidate): Fix indentation. From-SVN: r23122 --- gcc/ChangeLog | 6 ++++++ gcc/cse.c | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 55cc43ea593..36aff77a3f9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Fri Oct 16 08:13:46 1998 David S. Miller + + * cse.c (cse_basic_block): Fixup hash flushing loop so we do not + accidently walk into the free list. Comment how that can happen. + (invalidate): Fix indentation. + Thu Oct 15 23:53:29 1998 Bernd Schmidt Jeffrey A Law (law@cygnus.com) diff --git a/gcc/cse.c b/gcc/cse.c index 1933fbc75d1..7e64ef305f2 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -1651,7 +1651,7 @@ invalidate (x, full_mode) tendregno = tregno + HARD_REGNO_NREGS (tregno, GET_MODE (p->exp)); if (tendregno > regno && tregno < endregno) - remove_from_table (p, hash); + remove_from_table (p, hash); } } @@ -8706,7 +8706,7 @@ cse_basic_block (from, to, next_branch, around_loop) { register enum rtx_code code = GET_CODE (insn); int i; - struct table_elt *p, *next; + struct table_elt *p; /* If we have processed 1,000 insns, flush the hash table to avoid extreme quadratic behavior. We must not include NOTEs @@ -8720,10 +8720,10 @@ cse_basic_block (from, to, next_branch, around_loop) if (code != NOTE && num_insns++ > 1000) { for (i = 0; i < NBUCKETS; i++) - for (p = table[i]; p; p = next) + for (p = table[i]; p; p = table[i]) { - next = p->next_same_hash; - + /* Note that invalidate can remove elements + after P in the current hash chain. */ if (GET_CODE (p->exp) == REG) invalidate (p->exp, p->mode); else -- 2.30.2