https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62120
Bug ID: 62120 Summary: [ICE] ADDITIONAL_REGISTER_NAMES for [YZ]MMs, regno>8 should be disable in 32-bit Product: gcc Version: 4.10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: kyukhin at gcc dot gnu.org Hello, It seems like ADDITIONAL_REG_NAMES should be checked for given register availability during compilation. Here's example. extern int i; void foo () { register int mm_var asm ("xmm9") __attribute__((unused)); i+=++mm_var; } Gives correct error: $ ./build-x86_64-linux/prev-gcc/xgcc -B./build-x86_64-linux/prev-gcc /export/users/kyukhin/gcc/git/gcc/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c -S -m32 -mno-sse /export/users/kyukhin/gcc/git/gcc/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c: In function ‘foo’: /export/users/kyukhin/gcc/git/gcc/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c:4:16: error: invalid register name for ‘mm_var’ register int mm_var asm ("xmm9") __attribute__((unused)); Replacing xmm to ymm: extern int i; void foo () { register int mm_var asm ("ymm9") __attribute__((unused)); i+=++mm_var; } Gives ICE: $ ./build-x86_64-linux/prev-gcc/xgcc -B./build-x86_64-linux/prev-gcc /export/users/kyukhin/gcc/git/gcc/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c -S -m32 -mno-sse /export/users/kyukhin/gcc/git/gcc/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c: In function ‘foo’: /export/users/kyukhin/gcc/git/gcc/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c:6:1: internal compiler error: Max. number of generated reload insns per insn is achieved (90) } ^ Please submit a full bug report, I suspect because no check against ADDITIONAL_REG_NAMES are performed. Probably it should be updated in i386.c:ix86_conditional_register_usage ()