https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118297
Bug ID: 118297
Summary: vect_analyze_loop_form gets confused by outer loop
that only executes its body once
Product: gcc
Version: 15.0
URL: https://godbolt.org/z/a5nKv3xnx
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: tiborgyri at gmail dot com
CC: tiborgyri at gmail dot com
Target Milestone: ---
See: https://godbolt.org/z/a5nKv3xnx
The outer loop of the loop nest trivially only runs its body exactly once, yet
something prints "not vectorized: unsupported outerloop form."
I have looked at the tree vectorizer source file and the only place I could
find this message was in vect_analyze_loop_form (line 1824):
entryedge = loop_preheader_edge (innerloop);
if (entryedge->src != loop->header
|| !single_exit (innerloop)
|| single_exit (innerloop)->dest != EDGE_PRED (loop->latch, 0)->src)
return opt_result::failure_at (vect_location,
"not vectorized:"
" unsupported outerloop form.\n");
I am not sure which of these conditions ends up being true, but to me it sounds
a bit silly when GCC says this trivial outer loop is unsupported by the
vectorizer.