https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81778
--- Comment #6 from Tom de Vries <vries at gcc dot gnu.org> ---
This is essentially:
...
diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c
index 2c28682..3990998 100644
--- a/gcc/omp-expand.c
+++ b/gcc/omp-expand.c
@@ -4327,6 +4327,18 @@ expand_omp_simd (struct omp_region *region,
if (V cond N2) goto L0; else goto L2;
L2:
+ and for simt (assuming sufficient safe_len), we generate pseudocode
+
+ V = N1 + simt_lane * STEP; // Can this overflow?
+ goto L1;
+ L0:
+ BODY;
+ V += STEP * simt_vf; // This can overflow, see PR81778
+ L1:
+ if (V cond N2) goto L0; else goto L2;
+ L2:
+ V -= STEP * (simt_vf - 1)
+
For collapsed loops, given parameters:
collapse(3)
for (V1 = N11; V1 cond1 N12; V1 += STEP1)
...