https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93996

--- Comment #9 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #7)
> This seems to fix the issue (but I am not a scheduler expert and I am not
> 100% sure about it):
> diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
> index 1d3de7b6a76..9ca986eabdd 100644
> --- a/gcc/haifa-sched.c
> +++ b/gcc/haifa-sched.c
> @@ -4239,6 +4239,8 @@ remove_notes (rtx_insn *head, rtx_insn *tail)
>           if (insn != tail)
>             {
>               remove_insn (insn);
> +             if (NOTE_P (next) && NOTE_KIND (next) == NOTE_INSN_BASIC_BLOCK)
> +               next = NEXT_INSN (next);
>               add_reg_note (next, REG_SAVE_NOTE,
>                             GEN_INT (NOTE_INSN_EPILOGUE_BEG));
>               break;

There's one another test-case (also fixed with the suggested hunk):

$ ./gcc/xgcc -Bgcc
/home/marxin/Programming/gcc/gcc/testsuite/gcc.target/aarch64/pr71727-2.c
-ftree-parallelize-loops=10 -O3 -fsched2-use-superblocks
--param=max-predicted-iterations=0 --param=parloops-min-per-thread=2 -c -S
during RTL pass: sched2
/home/marxin/Programming/gcc/gcc/testsuite/gcc.target/aarch64/pr71727-2.c: In
function ‘foo._loopfn.0’:
/home/marxin/Programming/gcc/gcc/testsuite/gcc.target/aarch64/pr71727-2.c:11:3:
internal compiler error: in safe_as_a, at is-a.h:210
   11 |   for (sum = 0, count = 0; count < length; count++) {
      |   ^
0xb32326 rtx_insn* safe_as_a<rtx_insn*, rtx_def>(rtx_def*)
        /home/marxin/Programming/gcc2/gcc/is-a.h:210
0xb31bb3 NEXT_INSN(rtx_insn const*)
        /home/marxin/Programming/gcc2/gcc/rtl.h:1469
0x209466b schedule_ebb(rtx_insn*, rtx_insn*, bool)
        /home/marxin/Programming/gcc2/gcc/sched-ebb.c:486
0x2094cb1 schedule_ebbs()
        /home/marxin/Programming/gcc2/gcc/sched-ebb.c:655
0x11b703a rest_of_handle_sched2
        /home/marxin/Programming/gcc2/gcc/sched-rgn.c:3744
0x11b7208 execute
        /home/marxin/Programming/gcc2/gcc/sched-rgn.c:3882

Reply via email to