https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88145
Bug ID: 88145 Summary: ICE: unrecognizable insn (mffs) targeting 32-bit BE FPU-less powerpc CPUs Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: asolokha at gmx dot com Target Milestone: --- Target: powerpc-*-linux-gnu gcc-9.0.0-alpha20181118 snapshot (r266255) ICEs when compiling gcc/testsuite/gcc.target/powerpc/test_mffsl.c for 32-bit powerpc cores that don't include a FPU: % powerpc-e300c3-linux-gnu-gcc-9.0.0-alpha20181118 -mcpu=e300c2 -c gcc/testsuite/gcc.target/powerpc/test_mffsl.c -o /dev/null gcc/testsuite/gcc.target/powerpc/test_mffsl.c: In function 'main': gcc/testsuite/gcc.target/powerpc/test_mffsl.c:20:3: error: impossible constraint in 'asm' 20 | __asm __volatile ("mffs %0" : "=f"(f14)); | ^~~~~ gcc/testsuite/gcc.target/powerpc/test_mffsl.c:32:1: error: unrecognizable insn: 32 | } | ^ (insn 9 8 10 2 (set (reg:DF 128) (unspec_volatile:DF [ (const_int 0 [0]) ] UNSPECV_MFFS)) "gcc/testsuite/gcc.target/powerpc/test_mffsl.c":23:21 -1 (nil)) during RTL pass: vregs gcc/testsuite/gcc.target/powerpc/test_mffsl.c:32:1: internal compiler error: in extract_insn, at recog.c:2305 0x639917 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20181118/work/gcc-9-20181118/gcc/rtl-error.c:108 0x639935 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20181118/work/gcc-9-20181118/gcc/rtl-error.c:116 0x637d86 extract_insn(rtx_insn*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20181118/work/gcc-9-20181118/gcc/recog.c:2305 0xa2dbf2 instantiate_virtual_regs_in_insn /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20181118/work/gcc-9-20181118/gcc/function.c:1605 0xa2dbf2 instantiate_virtual_regs /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20181118/work/gcc-9-20181118/gcc/function.c:1975 0xa2dbf2 execute /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20181118/work/gcc-9-20181118/gcc/function.c:2024 gcc 4.9.4 correctly rejects it w/ "error: impossible constraint in 'asm'" and w/o ICE, as does any version of the powerpcspe backend. Also, shouldn't the rs6000 backend reject it when compiling for 85xx CPUs? I see standard FPU instructions in the generated code which I believe shouldn't be there. Maybe -mcpu=854[08] should be removed from the rs6000 backend altogether, duplicating what was done in the powerpcspe backend previously w/ all non-SPE -mcpu's?