https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106841

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|ice in                      |[12/13 Regression] ICE in
                   |vect_get_vec_defs_for_opera |vect_get_vec_defs_for_opera
                   |nd, at                      |nd, at
                   |tree-vect-stmts.cc:1509     |tree-vect-stmts.cc:1509
                   |                            |since
                   |                            |r12-2733-g31855ba6b16cd138
             Status|UNCONFIRMED                 |NEW
   Target Milestone|---                         |12.3
   Last reconfirmed|                            |2022-09-06
                 CC|                            |marxin at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
Thanks for the report!

Reduced to:

$ cat pr106841.C
struct R3 {
  double z;
  R3(R3 A, R3 B) : z(B.z - A.z) {}
  double norme() { return z; }
};
struct TBoundaryEdge {
  int *vertices[2];
  int &operator[](int i) { return *vertices[i]; }
};
struct Mesh {
  int vertices;
  TBoundaryEdge *bedges;
  int operator()(int &vv) { return &vv - &vertices; }
  TBoundaryEdge be(int i) { return bedges[i]; }
};
template <typename Data> struct GenericElement {
  typedef typename Data::V Vertex;
  static const int nv = Data::NbOfVertices;
  Vertex *vertices[nv];
  double mes;
  void set(int *iv) {
    Vertex *v0;
    for (int i = 0; i < nv; ++i)
      vertices[i] = v0 + iv[i];
    mes = Data::mesure(vertices);
  }
};
struct DataSeg3 {
  static const int NbOfVertices = 2;
  typedef R3 V;
  static double mesure(V *pv[]) { return R3(*pv[0], *pv[1]).norme(); }
};
struct MeshS {
  MeshS();
};
template <class> struct Movemesh_Op { int operator()() const; };
template <> int Movemesh_Op<int>::operator()() const {
  Mesh pTh;
  GenericElement<DataSeg3> *bS = new GenericElement<DataSeg3>;
  for (int ibe; ibe; ibe++) {
    TBoundaryEdge K(pTh.be(ibe));
    int iv[2];
    for (int i = 0; i < 2; i++) {
      int &__trans_tmp_2 = K[i];
      iv[i] = pTh(__trans_tmp_2);
    }
    bS[ibe].set(iv);
  }
  MeshS T_Th;
}

$ g++ pr106841.C -c -w -O3 -ffast-math -march=bdver2
during GIMPLE pass: vect
pr106841.C: In member function ‘int Movemesh_Op< <template-parameter-1-1>
>::operator()() const [with <template-parameter-1-1> = int]’:
pr106841.C:37:17: internal compiler error: in vect_get_vec_defs_for_operand, at
tree-vect-stmts.cc:1509
   37 | template <> int Movemesh_Op<int>::operator()() const {
      |                 ^~~~~~~~~~~~~~~~
0x9ea8b8 vect_get_vec_defs_for_operand(vec_info*, _stmt_vec_info*, unsigned
int, tree_node*, vec<tree_node*, va_heap, vl_ptr>*, tree_node*)
        /home/marxin/Programming/gcc/gcc/tree-vect-stmts.cc:1509
0x2236ade vect_get_gather_scatter_ops
        /home/marxin/Programming/gcc/gcc/tree-vect-stmts.cc:3066
0x2247d85 vectorizable_load
        /home/marxin/Programming/gcc/gcc/tree-vect-stmts.cc:9627
0x2250120 vect_transform_stmt(vec_info*, _stmt_vec_info*,
gimple_stmt_iterator*, _slp_tree*, _slp_instance*)
        /home/marxin/Programming/gcc/gcc/tree-vect-stmts.cc:11344
0x15081f1 vect_transform_loop_stmt
        /home/marxin/Programming/gcc/gcc/tree-vect-loop.cc:9606
0x1523202 vect_transform_loop(_loop_vec_info*, gimple*)
        /home/marxin/Programming/gcc/gcc/tree-vect-loop.cc:10042
0x15649de vect_transform_loops
        /home/marxin/Programming/gcc/gcc/tree-vectorizer.cc:1007
0x1564fbf try_vectorize_loop_1
        /home/marxin/Programming/gcc/gcc/tree-vectorizer.cc:1153
0x1564fbf try_vectorize_loop
        /home/marxin/Programming/gcc/gcc/tree-vectorizer.cc:1183
0x1565354 execute
        /home/marxin/Programming/gcc/gcc/tree-vectorizer.cc:1299
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.

And it started with r12-2733-g31855ba6b16cd138

Reply via email to