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

Reply via email to