diff options
author | Kewen Lin <linkw@linux.ibm.com> | 2023-12-20 21:21:54 -0600 |
---|---|---|
committer | Kewen Lin <linkw@linux.ibm.com> | 2023-12-20 21:21:54 -0600 |
commit | ef259ebeb39501bfddcc7c203a9a7a0daefa8ffd (patch) | |
tree | 98218e70f735467033df2c778fa51832829cea6f /gcc | |
parent | 4d9e0f3f211c8c459f285b5cddabc9958ad170f8 (diff) | |
download | gcc-ef259ebeb39501bfddcc7c203a9a7a0daefa8ffd.zip gcc-ef259ebeb39501bfddcc7c203a9a7a0daefa8ffd.tar.gz gcc-ef259ebeb39501bfddcc7c203a9a7a0daefa8ffd.tar.bz2 |
sched: Remove debug counter sched_block
Currently the debug counter sched_block doesn't work well
since we create dependencies for some insns and those
dependencies are expected to be resolved during scheduling
insns but they can get skipped once we are skipping some
block while respecting sched_block debug counter.
For example, for the below test case:
--
int a, b, c, e, f;
float d;
void
g ()
{
float h, i[1];
for (; f;)
if (c)
{
d *e;
if (b)
{
float *j = i;
j[0] = 0;
}
h = d;
}
if (h)
a = i[0];
}
--
ICE occurs with option "-O2 -fdbg-cnt=sched_block:1".
As the discussion in [1], it seems that we think this debug
counter is useless and can be removed. It's also implied
that if it's useful and used often, the above issue should
have been cared about and resolved earlier. So this patch
is to remove this debug counter.
[1] https://gcc.gnu.org/pipermail/gcc-patches/2023-November/635852.html
gcc/ChangeLog:
* dbgcnt.def (sched_block): Remove.
* sched-rgn.cc (schedule_region): Remove the support of debug count
sched_block.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/dbgcnt.def | 1 | ||||
-rw-r--r-- | gcc/sched-rgn.cc | 19 |
2 files changed, 6 insertions, 14 deletions
diff --git a/gcc/dbgcnt.def b/gcc/dbgcnt.def index 871cbf7..a8c4e61 100644 --- a/gcc/dbgcnt.def +++ b/gcc/dbgcnt.def @@ -198,7 +198,6 @@ DEBUG_COUNTER (pre_insn) DEBUG_COUNTER (prefetch) DEBUG_COUNTER (registered_jump_thread) DEBUG_COUNTER (sched2_func) -DEBUG_COUNTER (sched_block) DEBUG_COUNTER (sched_breakdep) DEBUG_COUNTER (sched_func) DEBUG_COUNTER (sched_insn) diff --git a/gcc/sched-rgn.cc b/gcc/sched-rgn.cc index e5964f5..1c8acf5 100644 --- a/gcc/sched-rgn.cc +++ b/gcc/sched-rgn.cc @@ -3198,20 +3198,13 @@ schedule_region (int rgn) current_sched_info->queue_must_finish_empty = current_nr_blocks == 1; curr_bb = first_bb; - if (dbg_cnt (sched_block)) - { - int saved_last_basic_block = last_basic_block_for_fn (cfun); + int saved_last_basic_block = last_basic_block_for_fn (cfun); - schedule_block (&curr_bb, bb_state[first_bb->index]); - gcc_assert (EBB_FIRST_BB (bb) == first_bb); - sched_rgn_n_insns += sched_n_insns; - realloc_bb_state_array (saved_last_basic_block); - save_state_for_fallthru_edge (last_bb, curr_state); - } - else - { - sched_rgn_n_insns += rgn_n_insns; - } + schedule_block (&curr_bb, bb_state[first_bb->index]); + gcc_assert (EBB_FIRST_BB (bb) == first_bb); + sched_rgn_n_insns += sched_n_insns; + realloc_bb_state_array (saved_last_basic_block); + save_state_for_fallthru_edge (last_bb, curr_state); /* Clean up. */ if (current_nr_blocks > 1) |