[Bug target/104004] New: [12 Regression] ICE: in extract_insn, at recog.c:2769 (error: unrecognizable insn)

asolokha at gmx dot com gcc-bugzilla@gcc.gnu.org
Thu Jan 13 10:42:31 GMT 2022


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);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~


More information about the Gcc-bugs mailing list