https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96446
Bug ID: 96446 Summary: ICE when spilling an MMA accumulator Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: bergner at gcc dot gnu.org Target Milestone: --- We get an ICE when we are forced to spill an MMA accumulator that has a zero value. We seem to be missing a alternative that accepts the value zero in the move pattern. This is broken on trunk and the GCC 10 branch. bergner@pike:~/gcc/BUGS$ cat quad-ice.c extern void bar (void); void foo (__vector_quad *dst) { __vector_quad acc; __builtin_mma_xxsetaccz (&acc); bar (); *dst = acc; } bergner@pike:~/gcc/BUGS$ /home/bergner/gcc/build/gcc-fsf-mainline-base-debug/gcc/xgcc -B/home/bergner/gcc/build/gcc-fsf-mainline-base-debug/gcc -S -O2 -mcpu=power10 quad-ice.c quad-ice.c: In function ‘foo’: quad-ice.c:9:1: error: could not split insn 9 | } | ^ (insn 15 41 16 (set (reg:PXI 32 0 [orig:117 _1 ] [117]) (const_int 0 [0])) "quad-ice.c":8:8 2001 {*movpxi} (nil)) during RTL pass: final quad-ice.c:9:1: internal compiler error: in final_scan_insn_1, at final.c:3073 0x11109e6b _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) /home/bergner/gcc/gcc-fsf-mainline-base/gcc/rtl-error.c:108 0x10a741bf final_scan_insn_1 /home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:3073 0x10a74a4b final_scan_insn(rtx_insn*, _IO_FILE*, int, int, int*) /home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:3152 0x10a6f807 final_1 /home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:2020 0x10a7b6f7 rest_of_handle_final /home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:4658 0x10a7be3f execute /home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:4736 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions.