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.