[Bug c++/106841] [12/13 Regression] ICE in vect_get_vec_defs_for_operand, at tree-vect-stmts.cc:1509 since r12-2733-g31855ba6b16cd138
marxin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Sep 6 04:49:32 GMT 2022
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
More information about the Gcc-bugs
mailing list