> -----Original Message-----
> From: Richard Biener <[email protected]>
> Sent: 06 February 2026 14:58
> To: [email protected]
> Cc: Tamar Christina <[email protected]>; Victor Do Nascimento
> <[email protected]>
> Subject: [PATCH] tree-optimization/123225 - require iteration estimate for
> uncounted loops
> 
> The following makes uncounted loops not profitable to vectorize
> unless there's an estimate on the number of iterations, either
> from array sizes, overflow, or PGO, that indicates proftiability.
> Or trivial profitability, but that's impossible to reach - Tamars
> pending patch might change this in some cases.
> 
> I have verified that with PGO we do vectorize the testcase in the PR.
> 
> When Tamar lands the patch to elide the epilog in some cases the
> vect_estimate_min_profitable_iters estimate should improve, not
> accounting for the epilog, eventually passing the triviality
> check (which is quite permissive as written here).
> 
> Bootstrap and regtest running on x86_64-unknown-linux-gnu.
> 
> OK?
> 

No objections from me.

Thanks,
Tamar

> Thanks,
> Richard.
> 
>       PR tree-optimization/123225
>       * tree-vect-loop.cc (vect_analyze_loop_costing): For uncounted
>       loops reject not trivially profitable loops that have no
>       estimate on the number of scalar iterations.
> 
>       * gcc.dg/vect/costmodel/x86_64/costmodel-pr123225.c: New
> testcase.
> ---
>  .../vect/costmodel/x86_64/costmodel-pr123225.c  | 17
> +++++++++++++++++
>  gcc/tree-vect-loop.cc                           | 16 ++++++++++++++++
>  2 files changed, 33 insertions(+)
>  create mode 100644
> gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr123225.c
> 
> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-
> pr123225.c b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-
> pr123225.c
> new file mode 100644
> index 00000000000..00dd79f5d77
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr123225.c
> @@ -0,0 +1,17 @@
> +/* { dg-do compile } */
> +/* { dg-additional-options "-msse4" } */
> +
> +short *
> +foo (short *arr)
> +{
> +  unsigned int pos = 0;
> +  while(1)
> +    {
> +      arr++;
> +      if (*arr == 0)
> +     break;
> +    }
> +  return arr;
> +}
> +
> +/* { dg-final { scan-tree-dump-not "optimized" "vect" } } */
> diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
> index bb9bb35cfa8..e6b63ffe37f 100644
> --- a/gcc/tree-vect-loop.cc
> +++ b/gcc/tree-vect-loop.cc
> @@ -1958,6 +1958,22 @@ vect_analyze_loop_costing (loop_vec_info
> loop_vinfo,
>        return -1;
>      }
> 
> +  /* As we cannot use a runtime check to gate profitability for uncounted
> +     loops require either an estimate or if none, at least a profitable
> +     vectorization within the first vector iteration (that condition
> +     will practically never be true due to the required epilog and
> +     likely alignment prologue).   */
> +  if (LOOP_VINFO_NITERS_UNCOUNTED_P (loop_vinfo)
> +      && estimated_niter == -1
> +      && min_profitable_estimate > (int) vect_vf_for_cost (loop_vinfo))
> +    {
> +      if (dump_enabled_p ())
> +     dump_printf_loc (MSG_NOTE, vect_location,
> +                      "not vectorized: no loop iteration estimate on the "
> +                      "uncounted loop and not trivially profitable.\n");
> +      return -1;
> +    }
> +
>    return 1;
>  }
> 
> --
> 2.51.0

Reply via email to