aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2025-08-12 11:00:54 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2025-08-12 12:48:26 +0200
commit6405c5c4419bef9589baf22daf162a6928af5441 (patch)
tree7185b731da08528a8bca848afd2473a9e715b390 /gcc
parente82c8413eda498163ae2e0ecc458ea0428708c30 (diff)
downloadgcc-6405c5c4419bef9589baf22daf162a6928af5441.zip
gcc-6405c5c4419bef9589baf22daf162a6928af5441.tar.gz
gcc-6405c5c4419bef9589baf22daf162a6928af5441.tar.bz2
Cleanup SLP decision during loop analysis
The following refactors the now misleading slp_done_for_suggested_uf and slp states kept during vectorizer loop analysis. * tree-vect-loop.cc (vect_analyze_loop_2): Change slp_done_for_suggested_uf to a boolean single_lane_slp_done_for_suggested_uf. Change slp to force_single_lane boolean. (vect_analyze_loop_1): Adjust similarly.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-vect-loop.cc37
1 files changed, 19 insertions, 18 deletions
diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 32a424c..3b56f86 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -2196,13 +2196,13 @@ vect_determine_partial_vectors_and_peeling (loop_vec_info loop_vinfo)
indicates if some analysis meets fatal error. If one non-NULL pointer
SUGGESTED_UNROLL_FACTOR is provided, it's intent to be filled with one
worked out suggested unroll factor, while one NULL pointer shows it's
- going to apply the suggested unroll factor. SLP_DONE_FOR_SUGGESTED_UF
- is to hold the slp decision when the suggested unroll factor is worked
- out. */
+ going to apply the suggested unroll factor.
+ SINGLE_LANE_SLP_DONE_FOR_SUGGESTED_UF is to hold whether single-lane
+ slp was forced when the suggested unroll factor was worked out. */
static opt_result
vect_analyze_loop_2 (loop_vec_info loop_vinfo, bool &fatal,
unsigned *suggested_unroll_factor,
- unsigned& slp_done_for_suggested_uf)
+ bool& single_lane_slp_done_for_suggested_uf)
{
opt_result ok = opt_result::success ();
int res;
@@ -2266,14 +2266,14 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo, bool &fatal,
bool applying_suggested_uf = loop_vinfo->suggested_unroll_factor > 1;
gcc_assert (!applying_suggested_uf || !suggested_unroll_factor);
- /* If the slp decision is false when suggested unroll factor is worked
- out, and we are applying suggested unroll factor, we can simply skip
- all slp related analyses this time. */
- unsigned slp = !applying_suggested_uf ? 2 : slp_done_for_suggested_uf;
+ /* When single-lane SLP was forced and we are applying suggested unroll
+ factor, keep that decision here. */
+ bool force_single_lane = (applying_suggested_uf
+ && single_lane_slp_done_for_suggested_uf);
/* Classify all cross-iteration scalar data-flow cycles.
Cross-iteration cycles caused by virtual phis are analyzed separately. */
- vect_analyze_scalar_cycles (loop_vinfo, slp == 2);
+ vect_analyze_scalar_cycles (loop_vinfo, !force_single_lane);
vect_pattern_recog (loop_vinfo);
@@ -2333,7 +2333,7 @@ start_over:
/* Check the SLP opportunities in the loop, analyze and build
SLP trees. */
ok = vect_analyze_slp (loop_vinfo, loop_vinfo->stmt_vec_infos.length (),
- slp == 1);
+ force_single_lane);
if (!ok)
return ok;
@@ -2668,7 +2668,7 @@ start_over:
gcc_assert (known_eq (vectorization_factor,
LOOP_VINFO_VECT_FACTOR (loop_vinfo)));
- slp_done_for_suggested_uf = slp;
+ single_lane_slp_done_for_suggested_uf = force_single_lane;
/* Ok to vectorize! */
LOOP_VINFO_VECTORIZABLE_P (loop_vinfo) = 1;
@@ -2679,7 +2679,7 @@ again:
gcc_assert (!ok);
/* Try again with single-lane SLP. */
- if (slp == 1)
+ if (force_single_lane)
return ok;
/* If we are applying suggested unroll factor, we don't need to
@@ -2732,7 +2732,7 @@ again:
}
/* Roll back state appropriately. Force single-lane SLP this time. */
- slp = 1;
+ force_single_lane = true;
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
"re-trying with single-lane SLP\n");
@@ -2889,12 +2889,12 @@ vect_analyze_loop_1 (class loop *loop, vec_info_shared *shared,
if (masked_p != -1)
loop_vinfo->can_use_partial_vectors_p = masked_p;
unsigned int suggested_unroll_factor = 1;
- unsigned slp_done_for_suggested_uf = 0;
+ bool single_lane_slp_done_for_suggested_uf = false;
/* Run the main analysis. */
opt_result res = vect_analyze_loop_2 (loop_vinfo, fatal,
&suggested_unroll_factor,
- slp_done_for_suggested_uf);
+ single_lane_slp_done_for_suggested_uf);
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
"***** Analysis %s with vector mode %s\n",
@@ -2926,16 +2926,17 @@ vect_analyze_loop_1 (class loop *loop, vec_info_shared *shared,
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
"***** Re-trying analysis for unrolling"
- " with unroll factor %d and slp %s.\n",
+ " with unroll factor %d and %s slp.\n",
suggested_unroll_factor,
- slp_done_for_suggested_uf ? "on" : "off");
+ single_lane_slp_done_for_suggested_uf
+ ? "single-lane" : "");
loop_vec_info unroll_vinfo
= vect_create_loop_vinfo (loop, shared, loop_form_info, NULL);
unroll_vinfo->vector_mode = vector_mode;
unroll_vinfo->suggested_unroll_factor = suggested_unroll_factor;
opt_result new_res
= vect_analyze_loop_2 (unroll_vinfo, fatal, NULL,
- slp_done_for_suggested_uf);
+ single_lane_slp_done_for_suggested_uf);
if (new_res)
{
delete loop_vinfo;