vect: Don't retry if the previous analysis fails

Message ID f026396c-59b8-36ae-2332-e2ece6db2e3b@linux.ibm.com
State New
Headers
Series vect: Don't retry if the previous analysis fails |

Commit Message

Kewen.Lin May 17, 2023, 6:05 a.m. UTC
  Hi,

When working on a cost tweaking patch, I found that a newly
added test case has different dumpings with stage-1 and
bootstrapped gcc.  By looking into it, the apparent reason
is vect_analyze_loop_2 doesn't get slp_done_for_suggested_uf
set expectedly, the following retrying will use the garbage
slp_done_for_suggested_uf instead.  In fact, the setting of
slp_done_for_suggested_uf only happens when the previous
analysis succeeds, for the mentioned test case, its previous
analysis does fail, it's unexpected to use the value of
slp_done_for_suggested_uf any more.

In function vect_analyze_loop_1, we only return success when
res is true, which is the result of 1st analysis.  It means
we never try to vectorize with unroll_vinfo if the previous
analysis fails.  So this patch shouldn't break anything, and
just stop some useless analysis early.

Bootstrapped and regtested on x86_64-redhat-linux,
aarch64-linux-gnu and powerpc64{,le}-linux-gnu.

Is it ok for trunk?

BR,
Kewen
-----
gcc/ChangeLog:

	* tree-vect-loop.cc (vect_analyze_loop_1): Don't retry analysis with
	suggested unroll factor once the previous analysis fails.
---
 gcc/tree-vect-loop.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--
2.31.1
  

Comments

Richard Biener May 17, 2023, 6:32 a.m. UTC | #1
On Wed, May 17, 2023 at 8:06 AM Kewen.Lin <linkw@linux.ibm.com> wrote:
>
> Hi,
>
> When working on a cost tweaking patch, I found that a newly
> added test case has different dumpings with stage-1 and
> bootstrapped gcc.  By looking into it, the apparent reason
> is vect_analyze_loop_2 doesn't get slp_done_for_suggested_uf
> set expectedly, the following retrying will use the garbage
> slp_done_for_suggested_uf instead.  In fact, the setting of
> slp_done_for_suggested_uf only happens when the previous
> analysis succeeds, for the mentioned test case, its previous
> analysis does fail, it's unexpected to use the value of
> slp_done_for_suggested_uf any more.
>
> In function vect_analyze_loop_1, we only return success when
> res is true, which is the result of 1st analysis.  It means
> we never try to vectorize with unroll_vinfo if the previous
> analysis fails.  So this patch shouldn't break anything, and
> just stop some useless analysis early.
>
> Bootstrapped and regtested on x86_64-redhat-linux,
> aarch64-linux-gnu and powerpc64{,le}-linux-gnu.
>
> Is it ok for trunk?

OK for trunk and affected branches.

Richard.

> BR,
> Kewen
> -----
> gcc/ChangeLog:
>
>         * tree-vect-loop.cc (vect_analyze_loop_1): Don't retry analysis with
>         suggested unroll factor once the previous analysis fails.
> ---
>  gcc/tree-vect-loop.cc | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
> index ed0166fedab..905145ae97b 100644
> --- a/gcc/tree-vect-loop.cc
> +++ b/gcc/tree-vect-loop.cc
> @@ -3044,7 +3044,7 @@ vect_analyze_loop_1 (class loop *loop, vec_info_shared *shared,
>                      res ? "succeeded" : " failed",
>                      GET_MODE_NAME (loop_vinfo->vector_mode));
>
> -  if (!main_loop_vinfo && suggested_unroll_factor > 1)
> +  if (res && !main_loop_vinfo && suggested_unroll_factor > 1)
>      {
>        if (dump_enabled_p ())
>         dump_printf_loc (MSG_NOTE, vect_location,
> --
> 2.31.1
  
Kewen.Lin May 22, 2023, 5:36 a.m. UTC | #2
on 2023/5/17 14:32, Richard Biener wrote:
> On Wed, May 17, 2023 at 8:06 AM Kewen.Lin <linkw@linux.ibm.com> wrote:
>>
>> Hi,
>>
>> When working on a cost tweaking patch, I found that a newly
>> added test case has different dumpings with stage-1 and
>> bootstrapped gcc.  By looking into it, the apparent reason
>> is vect_analyze_loop_2 doesn't get slp_done_for_suggested_uf
>> set expectedly, the following retrying will use the garbage
>> slp_done_for_suggested_uf instead.  In fact, the setting of
>> slp_done_for_suggested_uf only happens when the previous
>> analysis succeeds, for the mentioned test case, its previous
>> analysis does fail, it's unexpected to use the value of
>> slp_done_for_suggested_uf any more.
>>
>> In function vect_analyze_loop_1, we only return success when
>> res is true, which is the result of 1st analysis.  It means
>> we never try to vectorize with unroll_vinfo if the previous
>> analysis fails.  So this patch shouldn't break anything, and
>> just stop some useless analysis early.
>>
>> Bootstrapped and regtested on x86_64-redhat-linux,
>> aarch64-linux-gnu and powerpc64{,le}-linux-gnu.
>>
>> Is it ok for trunk?
> 
> OK for trunk and affected branches.

Pushed as r14-926 and backported in r13-7364 & r12-9633.  Thanks!

BR,
Kewen
  

Patch

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index ed0166fedab..905145ae97b 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -3044,7 +3044,7 @@  vect_analyze_loop_1 (class loop *loop, vec_info_shared *shared,
 		     res ? "succeeded" : " failed",
 		     GET_MODE_NAME (loop_vinfo->vector_mode));

-  if (!main_loop_vinfo && suggested_unroll_factor > 1)
+  if (res && !main_loop_vinfo && suggested_unroll_factor > 1)
     {
       if (dump_enabled_p ())
 	dump_printf_loc (MSG_NOTE, vect_location,