https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104004
Bug ID: 104004 Summary: [12 Regression] ICE: in extract_insn, at recog.c:2769 (error: unrecognizable insn) Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: ice-on-invalid-code Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: asolokha at gmx dot com CC: linkw at gcc dot gnu.org, wschmidt at gcc dot gnu.org Target Milestone: --- Target: powerpc-*-linux-gnu 1. gcc 12.0.0 20220109 snapshot (g:49d73c9fb644673323845efebfe6b3106e70af8a) ICEs when compiling gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c w/ -mcpu=e300c2: % powerpc-e300c3-linux-gnu-gcc-12.0.0 -mcpu=e300c2 -c gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c: In function 'foo': gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c:9:1: error: unrecognizable insn: 9 | } | ^ (insn 15 14 16 2 (set (reg:DF 119) (unspec_volatile:DF [ (const_int 0 [0]) ] UNSPECV_MFFS)) "gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c":8:3 -1 (nil)) during RTL pass: vregs gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c:9:1: internal compiler error: in extract_insn, at recog.c:2769 0x6adda1 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/rtl-error.c:108 0x6addc1 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/rtl-error.c:116 0x6ac3cf extract_insn(rtx_insn*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/recog.c:2769 0xb23843 instantiate_virtual_regs_in_insn /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/function.c:1611 0xb23843 instantiate_virtual_regs /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/function.c:1985 0xb23843 execute /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/function.c:2034 2. After adding -O1 (in fact, w/ any optimization level) to the command line, it fails to recognize UNSPECV_MTFSB0 instead: % powerpc-e300c3-linux-gnu-gcc-12.0.0 -mcpu=e300c2 -O1 -c gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c: In function 'foo': gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c:9:1: error: unrecognizable insn: 9 | } | ^ (insn 5 2 6 2 (unspec_volatile [ (const_int 31 [0x1f]) ] UNSPECV_MTFSB0) "gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c":8:3 -1 (nil)) during RTL pass: vregs gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c:9:1: internal compiler error: in extract_insn, at recog.c:2769 0x6adda1 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/rtl-error.c:108 0x6addc1 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/rtl-error.c:116 0x6ac3cf extract_insn(rtx_insn*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/recog.c:2769 0xb2309c instantiate_virtual_regs_in_insn /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/function.c:1660 0xb2309c instantiate_virtual_regs /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/function.c:1985 0xb2309c execute /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20220109/work/gcc-12-20220109/gcc/function.c:2034 Other builtins related to loading (storing) data from (to) FPSCR are also affected. gcc 11.2 rejects the code correctly w/ the following diagnostics: % powerpc-e300c3-linux-gnu-gcc-11.2.0 -mcpu=e300c2 -O1 -c gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c: In function 'foo': gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c:8:3: error: '__builtin_set_fpscr_rn' not supported with '-msoft-float' 8 | __builtin_set_fpscr_rn (val); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~