https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105254
Bug ID: 105254
Summary: ICE in exact_div, at poly-int.h:2219
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: asolokha at gmx dot com
CC: rsandifo at gcc dot gnu.org
Target Milestone: ---
Target: aarch64-linux-gnu
g++ 12.0.1 20220410 snapshot (g:54c5e064cc3dc3c9b3dff12b6d48dc3efd482b07) ICEs
when compiling the following testcase w/ -mcpu=demeter -O1
-ftree-loop-vectorize:
template <typename>
struct complex;
template <>
struct complex<double> {
void operator+= (complex r) { v_ += r.v_; }
_Complex v_;
};
template <typename T>
void
bar (T);
void
foo (complex<double> *x)
{
complex<double> s {0.0};
for (int i = 0; i < 16; ++i)
s += x[i];
bar<complex<double>> (s);
}
% aarch64-linux-gnu-g++-12.0.1 -mcpu=demeter -O1 -ftree-loop-vectorize -c
blv9apl0.cpp
during GIMPLE pass: vect
blv9apl0.cpp: In function 'void foo(complex<double>*)':
blv9apl0.cpp:15:1: internal compiler error: in exact_div, at poly-int.h:2219
15 | foo (complex<double> *x)
| ^~~
0x8a54a7 poly_int<2u, poly_result<unsigned long, if_nonpoly<unsigned int,
unsigned int, poly_int_traits<unsigned int>::is_poly>::type,
poly_coeff_pair_traits<unsigned long, if_nonpoly<unsigned int, unsigned int,
poly_int_traits<unsigned int>::is_poly>::type>::result_kind>::type>
exact_div<2u, unsigned long, unsigned int>(poly_int_pod<2u, unsigned long>
const&, unsigned int)
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.1_p20220410/work/gcc-12-20220410/gcc/poly-int.h:2219
0x8a8422 poly_int<2u, poly_result<unsigned long, if_nonpoly<unsigned int,
unsigned int, poly_int_traits<unsigned int>::is_poly>::type,
poly_coeff_pair_traits<unsigned long, if_nonpoly<unsigned int, unsigned int,
poly_int_traits<unsigned int>::is_poly>::type>::result_kind>::type>
exact_div<2u, unsigned long, unsigned int>(poly_int_pod<2u, unsigned long>
const&, unsigned int)
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.1_p20220410/work/gcc-12-20220410/gcc/tree-vect-loop.cc:3158
0x8a8422 vect_analyze_loop(loop*, vec_info_shared*)
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.1_p20220410/work/gcc-12-20220410/gcc/tree-vect-loop.cc:3032
0x14bc3d9 try_vectorize_loop_1
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.1_p20220410/work/gcc-12-20220410/gcc/tree-vectorizer.cc:1050
0x14bc3d9 try_vectorize_loop
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.1_p20220410/work/gcc-12-20220410/gcc/tree-vectorizer.cc:1165
0x14bd074 execute
/var/tmp/portage/cross-aarch64-linux-gnu/gcc-12.0.1_p20220410/work/gcc-12-20220410/gcc/tree-vectorizer.cc:1281