diff options
author | Richard Biener <rguenther@suse.de> | 2016-10-07 10:06:24 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-10-07 10:06:24 +0000 |
commit | a30fe4b68120118221578b111036fa5fea0d25b3 (patch) | |
tree | b23b27954b915b8b7d050e18c30416a85b78a564 /gcc/sched-deps.c | |
parent | a93cdc5c6f1d56226c3ef7b69423a4074783de34 (diff) | |
download | gcc-a30fe4b68120118221578b111036fa5fea0d25b3.zip gcc-a30fe4b68120118221578b111036fa5fea0d25b3.tar.gz gcc-a30fe4b68120118221578b111036fa5fea0d25b3.tar.bz2 |
bitmap.c (bitmap_elem_to_freelist): Set indx to -1.
2016-10-07 Richard Biener <rguenther@suse.de>
* 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
Diffstat (limited to 'gcc/sched-deps.c')
-rw-r--r-- | gcc/sched-deps.c | 10 |
1 files changed, 9 insertions, 1 deletions
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)) { |