From a30fe4b68120118221578b111036fa5fea0d25b3 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 7 Oct 2016 10:06:24 +0000 Subject: bitmap.c (bitmap_elem_to_freelist): Set indx to -1. 2016-10-07 Richard Biener * bitmap.c (bitmap_elem_to_freelist): Set indx to -1. * bitmap.h (bmp_iter_set): When advancing to the next element check that we didn't remove the current one. (bmp_iter_and): Likewise. (bmp_iter_and_compl): Likewise. * tree-ssa.c (release_defs_bitset): Do not remove worklist bit we currently iterate on but keep a one-level queue. * sched-deps.c (remove_from_deps): Do not clear current bit but keep a one-level queue. From-SVN: r240859 --- gcc/sched-deps.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'gcc/sched-deps.c') diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c index 41a6af2..dc46351 100644 --- a/gcc/sched-deps.c +++ b/gcc/sched-deps.c @@ -3992,8 +3992,14 @@ remove_from_deps (struct deps_desc *deps, rtx_insn *insn) removed = remove_from_dependence_list (insn, &deps->last_pending_memory_flush); deps->pending_flush_length -= removed; + unsigned to_clear = -1U; EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i, rsi) { + if (to_clear != -1U) + { + CLEAR_REGNO_REG_SET (&deps->reg_last_in_use, to_clear); + to_clear = -1U; + } struct deps_reg *reg_last = &deps->reg_last[i]; if (reg_last->uses) remove_from_dependence_list (insn, ®_last->uses); @@ -4005,8 +4011,10 @@ remove_from_deps (struct deps_desc *deps, rtx_insn *insn) remove_from_dependence_list (insn, ®_last->clobbers); if (!reg_last->uses && !reg_last->sets && !reg_last->implicit_sets && !reg_last->clobbers) - CLEAR_REGNO_REG_SET (&deps->reg_last_in_use, i); + to_clear = i; } + if (to_clear != -1U) + CLEAR_REGNO_REG_SET (&deps->reg_last_in_use, to_clear); if (CALL_P (insn)) { -- cgit v1.1