https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67841
Bug ID: 67841 Summary: Can't use vector registers if all vector registers are callee-saved Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: other Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com CC: julia.koval at intel dot com Blocks: 67552 Target Milestone: --- Target: x86 [hjl@gnu-tools-1 interrupt-1]$ cat y.i typedef float xmm_t __attribute__ ((__vector_size__ (16))); extern xmm_t x, y; void __attribute__((no_caller_saved_registers)) fn (void) { x = __builtin_ia32_addss (x, y); } [hjl@gnu-tools-1 interrupt-1]$ /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -O2 y.i y.i: In function ‘fn’: y.i:10:1: error: unable to find a register to spill } ^ y.i:10:1: error: this is the insn: (insn 6 12 13 2 (set (reg:V4SF 92) (vec_merge:V4SF (plus:V4SF (reg:V4SF 92) (mem/c:V4SF (symbol_ref:DI ("y") [flags 0x40] <var_decl 0x7fde708f0990 y>) [1 y+0 S16 A128])) (reg:V4SF 92) (const_int 1 [0x1]))) y.i:9 1410 {sse_vmaddv4sf3} (expr_list:REG_EQUIV (mem/c:V4SF (symbol_ref:DI ("x") [flags 0x40] <var_decl 0x7fde708f0900 x>) [1 x+0 S16 A128]) (nil))) y.i:10:1: internal compiler error: in assign_by_spills, at lra-assigns.c:1431 0xceef23 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) /export/gnu/import/git/sources/gcc/gcc/rtl-error.c:109 0xbb54ba assign_by_spills /export/gnu/import/git/sources/gcc/gcc/lra-assigns.c:1431 0xbb5e1d lra_assign() /export/gnu/import/git/sources/gcc/gcc/lra-assigns.c:1606 0xbaf6f7 lra(_IO_FILE*) /export/gnu/import/git/sources/gcc/gcc/lra.c:2343 0xb5c4f5 do_reload /export/gnu/import/git/sources/gcc/gcc/ira.c:5391 0xb5c8a8 execute /export/gnu/import/git/sources/gcc/gcc/ira.c:5562 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. [hjl@gnu-tools-1 interrupt-1]$ Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67552 [Bug 67552] [meta] x86 interrupt attribute