https://gcc.gnu.org/bugzilla/show_bug.cgi?id=128188
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org,
| |rguenth at gcc dot gnu.org
Last reconfirmed| |2026-10-26
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed. The issue is the else case in vect_simd_lane_linear checks
else if (gimple_call_internal_p (def_stmt, IFN_GOMP_SIMD_LANE)
&& loop->simduid
&& TREE_CODE (gimple_call_arg (def_stmt, 0)) == SSA_NAME
&& (SSA_NAME_VAR (gimple_call_arg (def_stmt, 0))
== loop->simduid))
{
if (!linear_step)
linear_step = 1;
arginfo->linear_step = linear_step;
arginfo->op = base;
arginfo->simd_lane_linear = true;
return;
}
but if that doesn't match for whatever reason we simply loop forever with
the very same (not matching) .GOMP_SIMD_LANE stmt.
In this case
_8 = .GOMP_SIMD_LANE (simduid.1_7(D), 0);
is in loop body 2 which has simduid.1 as simduid but loop is the inner
loop and that doesn't have a simduid. We start the walk from a stmt
in the inner loop, but we should probably stop when leaving it?