https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116195
Bug ID: 116195 Summary: arm: ICE building pr111150.C Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: adhemerval.zanella at linaro dot org Target Milestone: --- It seems that this change triggered with Linaro CI on arm 32 bit [1]: -- Executing on host: /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/x86_64-pc-linux-gnu/bin/arm-eabi-g++ /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/g++.dg/tree-ssa/pr111150.C -mthumb -march=armv8.1-m.main+mve.fp+fp.dp -mtune=cortex-m55 -mfloat-abi=hard -mfpu=auto -fdiagnostics-plain-output -nostdinc++ -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/arm-eabi/gcc-gcc.git~master-stage2/arm-eabi/libstdc++-v3/include/arm-eabi -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/arm-eabi/gcc-gcc.git~master-stage2/arm-eabi/libstdc++-v3/include -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/libstdc++-v3/libsupc++ -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/libstdc++-v3/include/backward -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/libstdc++-v3/testsuite/util -fmessage-length=0 -std=gnu++98 -O1 -fdump-tree-forwprop1 -Wno-psabi -S -o pr111150.s (timeout = 600) spawn -ignore SIGHUP /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/x86_64-pc-linux-gnu/bin/arm-eabi-g++ /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/g++.dg/tree-ssa/pr111150.C -mthumb -march=armv8.1-m.main+mve.fp+fp.dp -mtune=cortex-m55 -mfloat-abi=hard -mfpu=auto -fdiagnostics-plain-output -nostdinc++ -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/arm-eabi/gcc-gcc.git~master-stage2/arm-eabi/libstdc++-v3/include/arm-eabi -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/arm-eabi/gcc-gcc.git~master-stage2/arm-eabi/libstdc++-v3/include -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/libstdc++-v3/libsupc++ -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/libstdc++-v3/include/backward -I/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/libstdc++-v3/testsuite/util -fmessage-length=0 -std=gnu++98 -O1 -fdump-tree-forwprop1 -Wno-psabi -S -o pr111150.s /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/g++.dg/tree-ssa/pr111150.C: In function 'v4si f1_(v4si, v4si, v4si, v4si, v4si, v4si)': /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/g++.dg/tree-ssa/pr111150.C:13:1: error: unrecognizable insn: (insn 22 21 26 2 (set (reg:V4SI 120 [ <retval> ]) (unspec:V4SI [ (reg:V4SI 136) (reg:V4SI 137) (subreg:V4BI (reg:HI 135) 0) ] VPSELQ_S)) "/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/g++.dg/tree-ssa/pr111150.C":12:17 -1 (nil)) during RTL pass: vregs /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/snapshots/gcc.git~master/gcc/testsuite/g++.dg/tree-ssa/pr111150.C:13:1: internal compiler error: in extract_insn, at recog.cc:2848 0x21fd635 internal_error(char const*, ...) ../../../../../../gcc/gcc/diagnostic-global-context.cc:491 0x9a0958 fancy_abort(char const*, int, char const*) ../../../../../../gcc/gcc/diagnostic.cc:1725 0x840e4d _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) ../../../../../../gcc/gcc/rtl-error.cc:108 0x840e6f _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) ../../../../../../gcc/gcc/rtl-error.cc:116 0x83f76b extract_insn(rtx_insn*) ../../../../../../gcc/gcc/recog.cc:2848 0xf1a805 instantiate_virtual_regs_in_insn ../../../../../../gcc/gcc/function.cc:1612 0xf1a805 instantiate_virtual_regs ../../../../../../gcc/gcc/function.cc:1995 0xf1a805 execute ../../../../../../gcc/gcc/function.cc:2042 -- Accordingly to Andrew Piski, this is backend bug that was exposed by the patch. `vcond_mask_<mode><MVE_vpred>` for operand[3] uses s_register_operand which allows subreg but then it creates a VPSELQ_S unspec which uses vpr_register_operand as the operand which does not allow subreg and does not forces into a register. [1] https://ci.linaro.org/job/tcwg_gnu_embed_check_gcc--master-thumb_m55_hard_eabi-build/517/artifact/artifacts/00-sumfiles/