On Mon, May 03, 2021 at 07:03:24PM +0200, Tom de Vries wrote:
> +      if (sctx->is_simt && !known_eq (sctx->max_vf, 1U))
> +     {
> +       tree c = omp_find_clause (gimple_omp_for_clauses (ctx->stmt),
> +                                 OMP_CLAUSE_REDUCTION);
> +       if (c && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
> +         /* UDR reductions are not supported yet for SIMT, disable SIMT.  */
> +         sctx->max_vf = 1;

This isn't sufficient, you could have e.g. 2 reductions, the first non-UDR
one and the second one with UDR.
So it needs to be a for loop like:
          for (tree c = gimple_omp_for_clauses (ctx->stmt); c;
               c = OMP_CLAUSE_CHAIN (c))
            if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
                && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
              {
                /* UDR reductions are not supported yet for SIMT,
                   disable SIMT.  */
                sctx->max_vf = 1;
                break;
              }
(or with omp_find_clause used in two spots).

        Jakub

Reply via email to