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?

Reply via email to