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

            Bug ID: 103170
           Summary: ICE: output_operand: incompatible floating point /
                    vector register operand for '%s'
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: asolokha at gmx dot com
  Target Milestone: ---
            Target: aarch64-linux-gnu

gfortran-12.0.0-alpha20211107 snapshot
(g:962ff7d2849e1fa6a1fe0535aa2dec5c2b9a32a6) ICEs when compiling the following
testcase, extracted from gcc/testsuite/gfortran.dg/loop_versioning_4.f90, w/
-O3 -fselective-scheduling2 -ftree-parallelize-loops=2 -fno-tree-ch:

subroutine f5(x, n, limit, step)
  integer :: n, limit, step
  real :: x(limit, n)
  do i = 1, n
     do j = 1, limit, step
        x(j, i) = 100
     end do
  end do
end subroutine f5

% aarch64-linux-gnu-gfortran-12.0.0 -O3 -fselective-scheduling2
-ftree-parallelize-loops=2 -fno-tree-ch -c hxpbnms6.f90
during RTL pass: final
hxpbnms6.f90:9:17:

    9 | end subroutine f5
      |                 ^
internal compiler error: output_operand: incompatible floating point / vector
register operand for '%s'
0xc1d5fc output_operand_lossage(char const*, ...)
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:3235
0xc1d7df output_operand(rtx_def*, int)
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:3677
0xc1e506 output_asm_insn(char const*, rtx_def**)
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:3570
0xc1e506 output_asm_insn(char const*, rtx_def**)
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:3453
0xc2258f final_scan_insn_1
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:2894
0xc2294b final_scan_insn(rtx_insn*, _IO_FILE*, int, int, int*)
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:2940
0xc22a36 final_1
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:1997
0xc23711 rest_of_handle_final
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:4285
0xc23711 execute
       
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.0_alpha20211107/work/gcc-12-20211107/gcc/final.c:4363

BTW, looking at existing selective scheduler related PRs, I can see a pattern
involving -fselective-scheduling{,2} -fno-tree-ch.

Reply via email to