[Bug target/127225] [17 Regression] ICE: in extract_insn, at recog.cc:2894 with -frounding-math -mgeneral-regs-only -mavx512vbmi -mno-sse2
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Sep 9 01:13:27 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127225
--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuhongt@gcc.gnu.org>:
https://gcc.gnu.org/g:919c0d16c91c930c374db6665f55595653511636
commit r17-4017-g919c0d16c91c930c374db6665f55595653511636
Author: liuhongt <hongtao.liu@intel.com>
Date: Sun Sep 6 23:10:43 2026 -0700
i386: Fix unrecognizable V2SF zero move in V4SF vec_init [PR127225]
With -mno-sse2 -mno-mmx -mno-3dnow, TARGET_SSE is still on but both
TARGET_MMX and TARGET_MMX_WITH_SSE (TARGET_64BIT && TARGET_SSE2) are
off, so there is no movv2sf expander even though *vec_concatv2sf_sse
(TARGET_SSE) can still create V2SFmode pseudos.
The !TARGET_SSE2 arm of ix86_expand_vector_init_v4sf materialized the
zero upper half with a raw emit_insn (gen_rtx_SET (...)), which bypasses
the emit_move_insn_1 fallback of moving via the same-sized integer mode,
and so left behind
(set (reg:V2SF 107) (const_vector:V2SF [(const_double:SF 0.0) x2]))
for extract_insn to choke on. Use emit_move_insn instead; the zero then
comes out as a DImode move and the sequence is the xorps/unpcklps/movlhps
one GCC 16 emitted for this case.
gcc/ChangeLog:
PR target/127225
* config/i386/i386-expand.cc (ix86_expand_vector_init_v4sf): Use
emit_move_insn rather than a bare SET to materialize the V2SFmode
zero half, as movv2sf may not be available.
gcc/testsuite/ChangeLog:
PR target/127225
* gcc.target/i386/pr127225.c: New test.
More information about the Gcc-bugs
mailing list