Hi Jeff,

on 2024/8/26 06:13, Jeff Law wrote:
> 
> So is this patch still relevant Kewen?

Yes, sorry that I forgot to follow up this after stage 1 opens.

> 
> On 12/20/23 2:25 AM, Kewen.Lin wrote:
>> Hi,
>>
>> This patch follows Richi's suggestion "scheduling shouldn't
>> special case empty blocks as they usually do not appear" in
>> [1], it removes function no_real_insns_p and its uses
>> completely.
>>
>> There is some case that one block previously has only one
>> INSN_P, but while scheduling some other blocks this only
>> INSN_P gets moved there and the block becomes empty so
>> that the only NOTE_P insn was counted then, but since this
>> block isn't empty initially and any NOTE_P gets skipped in
>> a normal block, the count to-be-scheduled doesn't count it
>> in, it can cause the below assertion to fail:
>>
>>    /* Sanity check: verify that all region insns were scheduled.  */
>>    gcc_assert (sched_rgn_n_insns == rgn_n_insns);
>>
>> A bitmap rgn_init_empty_bb is proposed to detect such case
>> by recording one one block is empty initially or not before
>> actual scheduling.  The other changes are mainly to handle
>> NOTE which wasn't expected before but now we have to face
>> with.
>>
>> Bootstrapped and regress-tested on:
>>    - powerpc64{,le}-linux-gnu
>>    - x86_64-redhat-linux
>>    - aarch64-linux-gnu
>>
>> Also tested this with superblock scheduling (sched2) turned
>> on by default, bootstrapped and regress-tested again on the
>> above triples.  I tried to test with seletive-scheduling
>> 1/2 enabled by default, it's bootstrapped & regress-tested
>> on x86_64-redhat-linux, but both failed to build on
>> powerpc64{,le}-linux-gnu and aarch64-linux-gnu even without
>> this patch (so it's unrelated, I've filed two PRs for
>> observed failures on Power separately).
>>
>> [1] https://inbox.sourceware.org/gcc-patches/CAFiYyc2hMvbU_+
>> a47ytnbxf0yrcybwrhru2jdcw5a0px3+n...@mail.gmail.com/
>>
>> Is it ok for trunk or next stage 1?
>>
>> BR,
>> Kewen
>> -----
>>     PR rtl-optimization/108273
>>
>> gcc/ChangeLog:
>>
>>     * config/aarch64/aarch64.cc (aarch64_sched_adjust_priority): Early
>>     return for NOTE_P.
>>     * haifa-sched.cc (recompute_todo_spec): Likewise.
>>     (setup_insn_reg_pressure_info): Likewise.
>>     (schedule_insn): Handle NOTE_P specially as we don't skip empty block
>>     any more and adopt NONDEBUG_INSN_P somewhere appropriate.
>>     (commit_schedule): Likewise.
>>     (prune_ready_list): Likewise.
>>     (schedule_block): Likewise.
>>     (set_priorities): Likewise.
>>     (fix_tick_ready): Likewise.
>>     (no_real_insns_p): Remove.
>>     * rtl.h (SCHED_GROUP_P): Add NOTE consideration.
>>     * sched-ebb.cc (schedule_ebb): Skip leading labels like note to ensure
>>     that we don't have the chance to have single label block, remove the
>>     call to no_real_insns_p.
>>     * sched-int.h (no_real_insns_p): Remove declaration.
>>     * sched-rgn.cc (free_block_dependencies): Remove the call to
>>     no_real_insns_p.
>>     (compute_priorities): Likewise.
>>     (schedule_region): Remove the call to no_real_insns_p, check
>>     rgn_init_empty_bb and update rgn_n_insns if need.
>>     (sched_rgn_local_init): Init rgn_init_empty_bb.
>>     (sched_rgn_local_free): Free rgn_init_empty_bb.
>>     (rgn_init_empty_bb): New static bitmap.
>>     * sel-sched.cc (sel_region_target_finish): Remove the call to
>>     no_real_insns_p.
> This largely looks sensible.  One change caught my eye though.
> 
> SCHED_GROUP_P IIRC only applies to INSNs.  That bit means something different 
> for NOTEs.  I think the change to rtl.h should be backed out, which may mean 
> you need further changes into the scheduler infrastructure.
> 
> Definitely will need a rebase and retest given the age of the patch.

Thanks for your review comments, I'll check SCHED_GROUP_P and get back to you 
soon.

BR,
Kewen

Reply via email to