https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106787
Bug ID: 106787 Summary: ICE in vect_schedule_slp_node, at tree-vect-slp.cc:8648 Product: gcc Version: 13.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org CC: rsandifo at gcc dot gnu.org Target Milestone: --- Created attachment 53524 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53524&action=edit gcda file Seen in 511.povray_r benchmark when run with PGO: $ g++ matrices.ii -Ofast -march=skylake -fprofile-use -c -w during GIMPLE pass: slp matrices.ii: In function 'void pov::MTimesB(double (*)[4], double (*)[4])': matrices.ii:4:6: internal compiler error: in vect_schedule_slp_node, at tree-vect-slp.cc:8648 4 | void MTimesB(MATRIX matrix1, MATRIX result) { | ^~~~~~~ 0x9085a4 vect_schedule_slp_node /home/marxin/Programming/gcc/gcc/tree-vect-slp.cc:8648 0x155ce23 vect_schedule_scc /home/marxin/Programming/gcc/gcc/tree-vect-slp.cc:9018 0x155cb58 vect_schedule_scc /home/marxin/Programming/gcc/gcc/tree-vect-slp.cc:8999 0x155d450 vect_schedule_slp(vec_info*, vec<_slp_instance*, va_heap, vl_ptr> const&) /home/marxin/Programming/gcc/gcc/tree-vect-slp.cc:9135 0x155e93f vect_slp_region /home/marxin/Programming/gcc/gcc/tree-vect-slp.cc:7387 0x155ff2c vect_slp_bbs /home/marxin/Programming/gcc/gcc/tree-vect-slp.cc:7499 0x15601b3 vect_slp_function(function*) /home/marxin/Programming/gcc/gcc/tree-vect-slp.cc:7587 0x15697d9 execute /home/marxin/Programming/gcc/gcc/tree-vectorizer.cc:1532 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. $ cat matrices.ii typedef double MATRIX[][4]; double MTimesB_t0, MTimesB_t1, MTimesB_t2, MTimesB_t3; namespace pov { void MTimesB(MATRIX matrix1, MATRIX result) { MTimesB_t0 = result[0][3]; MTimesB_t1 = result[1][3]; MTimesB_t2 = result[2][3]; MTimesB_t3 = result[3][3]; result[2][3] = matrix1[2][0] * MTimesB_t0 + matrix1[2][1] * MTimesB_t1 + matrix1[2][2] * MTimesB_t2 + matrix1[2][3] * MTimesB_t3; result[3][3] = matrix1[3][0] * MTimesB_t0 + matrix1[3][1] * MTimesB_t1 + matrix1[3][2] * MTimesB_t2 + matrix1[3][3] * MTimesB_t3; } } // namespace pov