https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96451

--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> ---
On Wed, 5 Aug 2020, linkw at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96451
> 
> --- Comment #3 from Kewen Lin <linkw at gcc dot gnu.org> ---
> (In reply to Richard Biener from comment #2)
> > possibly a latent issue since the patch is supposed to be cost-only
> 
> Yes, this case will hit ICE too with -fno-vect-cost-model even without the
> culprit commit.
> 
> Without that commit, the costing says it's not profitable to vectorize the
> epilogue further, while with that we are able to vectorize the epilogue. With
> the forced option -fdbg-cnt=vect_loop:1, it only allows us to vectorize one
> loop, so it skips the epilogue which has the scalar mask_store statement from
> if-cvt and is determined to be vectorized.
> 
> I'm not sure what the dbg counter should mean for loop vect. If it's for the
> original scalar loop, then the main vectorized loop and the epilogue loop to 
> be
> vectorized should be vectorized. The fix could be: 
> 
> diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
> index 26a1846..150bdcf 100644
> --- a/gcc/tree-vectorizer.c
> +++ b/gcc/tree-vectorizer.c
> @@ -1066,7 +1066,7 @@ try_vectorize_loop_1 (hash_table<simduid_to_vf>
> *&simduid_to_vf_htab,
>        return ret;
>      }
> 
> -  if (!dbg_cnt (vect_loop))
> +  if (!LOOP_VINFO_EPILOGUE_P (loop_vinfo) && !dbg_cnt (vect_loop))
>      {
>        /* Free existing information if loop is analyzed with some
>          assumptions.  */
> 
> If the dbg counter is for all kinds of loop (main or epilogue), the fix seems
> to be: add one interface for dbg counter framework to query the remaining
> allowed count, compare the remaining number and the number of epilogue loops 
> in
> vect_do_peeling, then remove the exceeding epilogue loops there.

I think the above patch is OK and is what was originally intended.

Care to push it to master?

Reply via email to