https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103544
Bug ID: 103544
Summary: compiler crashes when trying to vectorize loop
Product: gcc
Version: 11.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: monad at posteo dot net
Target Milestone: ---
the following program crashes g++:
int crash_me(char* ptr, size_t size){
std::array<short, 16> result = {0};
size_t no_iters = 0;
for(size_t i = 0; i < size - 12; i+= 13){
for(size_t j = 0; j < 12; j++){
result[j] += ptr[i + j] - '0';
}
no_iters++;
}
int result_int = 0;
for(int j = 0; j < 12; j++){
int bit_value = result[j] > no_iters/2 ? 1 : 0;
result_int |= bit_value;
}
return result_int;
}
it results in:
during GIMPLE pass: vect
<source>: In function 'int crash_me(char*, size_t)':
<source>:4:5: internal compiler error: in vect_transform_reduction, at
tree-vect-loop.c:7378
4 | int crash_me(char* ptr, size_t size){
| ^~~~~~~~
0x1786229 internal_error(char const*, ...)
???:0
0x678608 fancy_abort(char const*, int, char const*)
???:0
0xf53cdc vect_transform_reduction(_loop_vec_info*, _stmt_vec_info*,
gimple_stmt_iterator*, gimple**, _slp_tree*)
???:0
0xf4936d vect_transform_stmt(vec_info*, _stmt_vec_info*, gimple_stmt_iterator*,
_slp_tree*, _slp_instance*)
???:0
0xf861ee vect_schedule_slp(vec_info*, vec<_slp_instance*, va_heap, vl_ptr>)
???:0
0xf64ed0 vect_transform_loop(_loop_vec_info*, gimple*)
???:0
0xf90d61 vectorize_loops()
???:0
optimization flags used: -O3 -march=haswell
g++ version: 11.1 on my local machine, 11.2 on godbolt.
godbolt link: https://godbolt.org/z/WjPbcE4sa