https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81778
--- Comment #10 from Tom de Vries <vries at gcc dot gnu.org> ---
Tentative patch:
...
diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c
index 99cb4f9dda4..034de497390 100644
--- a/gcc/omp-expand.c
+++ b/gcc/omp-expand.c
@@ -6333,6 +6333,8 @@ expand_omp_simd (struct omp_region *region, struct
omp_for_data *fd)
/* Collapsed loops not handled for SIMT yet: limit to one lane only. */
if (fd->collapse > 1)
simt_maxlane = build_one_cst (unsigned_type_node);
+ else if (TREE_CODE (fd->loops[0].step) != INTEGER_CST)
+ simt_maxlane = build_one_cst (unsigned_type_node);
else if (safelen_int < omp_max_simt_vf ())
simt_maxlane = build_int_cst (unsigned_type_node, safelen_int);
tree vf
@@ -6636,6 +6638,10 @@ expand_omp_simd (struct omp_region *region, struct
omp_for_data *fd)
else
t = fold_build2 (PLUS_EXPR, type, fd->loop.v, step);
expand_omp_build_assign (&gsi, fd->loop.v, t);
+ /* The alternative IV needs to to be updated as well, but isn't
+ currently. Assert that we fall back to simt_maxlane == 1. */
+ gcc_assert (altv == NULL_TREE
+ || tree_int_cst_equal (simt_maxlane, integer_one_node));
}
/* Remove GIMPLE_OMP_RETURN. */
...