aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched-deps.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-10-07 10:06:24 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-10-07 10:06:24 +0000
commita30fe4b68120118221578b111036fa5fea0d25b3 (patch)
treeb23b27954b915b8b7d050e18c30416a85b78a564 /gcc/sched-deps.c
parenta93cdc5c6f1d56226c3ef7b69423a4074783de34 (diff)
downloadgcc-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.c10
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, &reg_last->uses);
@@ -4005,8 +4011,10 @@ remove_from_deps (struct deps_desc *deps, rtx_insn *insn)
remove_from_dependence_list (insn, &reg_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))
{