public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Amend split vector loop analysis into main and epilogue analysis
@ 2021-11-05 14:03 Richard Biener
  0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2021-11-05 14:03 UTC (permalink / raw)
  To: gcc-patches

I forgot to commit the changes done as response to Richards review
before committing.

Will push after bootstrap.

2021-11-05  Richard Biener  <rguenther@suse.de>

	* tree-vect-loop.c (vect_analyze_loop): Remove obsolete
	comment and expand on another one.  Combine nested if.
---
 gcc/tree-vect-loop.c | 48 +++++++++-----------------------------------
 1 file changed, 10 insertions(+), 38 deletions(-)

diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index abf87f99d6d..b56b7a4a386 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -2998,35 +2998,6 @@ vect_analyze_loop (class loop *loop, vec_info_shared *shared)
       return opt_loop_vec_info::propagate_failure (res);
     }
 
-  /* When pick_lowest_cost_p is true, we should in principle iterate
-     over all the loop_vec_infos that LOOP_VINFO could replace and
-     try to vectorize LOOP_VINFO under the same conditions.
-     E.g. when trying to replace an epilogue loop, we should vectorize
-     LOOP_VINFO as an epilogue loop with the same VF limit.  When trying
-     to replace the main loop, we should vectorize LOOP_VINFO as a main
-     loop too.
-
-     However, autovectorize_vector_modes is usually sorted as follows:
-
-     - Modes that naturally produce lower VFs usually follow modes that
-     naturally produce higher VFs.
-
-     - When modes naturally produce the same VF, maskable modes
-     usually follow unmaskable ones, so that the maskable mode
-     can be used to vectorize the epilogue of the unmaskable mode.
-
-     This order is preferred because it leads to the maximum
-     epilogue vectorization opportunities.  Targets should only use
-     a different order if they want to make wide modes available while
-     disparaging them relative to earlier, smaller modes.  The assumption
-     in that case is that the wider modes are more expensive in some
-     way that isn't reflected directly in the costs.
-
-     There should therefore be few interesting cases in which
-     LOOP_VINFO fails when treated as an epilogue loop, succeeds when
-     treated as a standalone loop, and ends up being genuinely cheaper
-     than FIRST_LOOP_VINFO.  */
-
   auto_vector_modes vector_modes;
   /* Autodetect first vector size we try.  */
   vector_modes.safe_push (VOIDmode);
@@ -3042,7 +3013,10 @@ vect_analyze_loop (class loop *loop, vec_info_shared *shared)
   unsigned int first_loop_next_i = 0;
   unsigned HOST_WIDE_INT simdlen = loop->simdlen;
 
-  /* First determine the main loop vectorization mode.  */
+  /* First determine the main loop vectorization mode, either the first
+     one that works, starting with auto-detecting the vector mode and then
+     following the targets order of preference, or the one with the
+     lowest cost if pick_lowest_cost_p.  */
   while (1)
     {
       unsigned int loop_vinfo_i = mode_i;
@@ -3065,15 +3039,13 @@ vect_analyze_loop (class loop *loop, vec_info_shared *shared)
 	      first_loop_vinfo = opt_loop_vec_info::success (NULL);
 	      simdlen = 0;
 	    }
-	  else if (pick_lowest_cost_p && first_loop_vinfo)
+	  else if (pick_lowest_cost_p
+		   && first_loop_vinfo
+		   && vect_joust_loop_vinfos (loop_vinfo, first_loop_vinfo))
 	    {
-	      /* Keep trying to roll back vectorization attempts while the
-		 loop_vec_infos they produced were worse than this one.  */
-	      if (vect_joust_loop_vinfos (loop_vinfo, first_loop_vinfo))
-		{
-		  delete first_loop_vinfo;
-		  first_loop_vinfo = opt_loop_vec_info::success (NULL);
-		}
+	      /* Pick loop_vinfo over first_loop_vinfo.  */
+	      delete first_loop_vinfo;
+	      first_loop_vinfo = opt_loop_vec_info::success (NULL);
 	    }
 	  if (first_loop_vinfo == NULL)
 	    {
-- 
2.31.1

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-05 14:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-05 14:03 [PATCH] Amend split vector loop analysis into main and epilogue analysis Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).