@@ -16955,6 +16955,9 @@ this parameter. The default value of this parameter is 50.
@item vect-induction-float
Enable loop vectorization of floating point inductions.
+@item vect-force-slp
+Force the use of SLP when vectorizing, fail if not possible.
+
@item vrp-block-limit
Maximum number of basic blocks before VRP switches to a lower memory algorithm.
@@ -1198,6 +1198,10 @@ The maximum factor which the loop vectorizer applies to the cost of statements i
Common Joined UInteger Var(param_vect_induction_float) Init(1) IntegerRange(0, 1) Param Optimization
Enable loop vectorization of floating point inductions.
+-param=vect-force-slp=
+Common Joined UInteger Var(param_vect_force_slp) Init(0) IntegerRange(0, 1) Param Optimization
+Force the use of SLP when vectorizing, fail if not possible.
+
-param=vrp-block-limit=
Common Joined UInteger Var(param_vrp_block_limit) Init(150000) Optimization Param
Maximum number of basic blocks before VRP switches to a fast model with less memory requirements.
@@ -2891,6 +2891,12 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo, bool &fatal,
/* This is the point where we can re-start analysis with SLP forced off. */
start_over:
+ /* When we arrive here with SLP disabled and we are supposed
+ to use SLP for everything fail vectorization. */
+ if (!slp && param_vect_force_slp)
+ return opt_result::failure_at (vect_location,
+ "may need non-SLP handling\n");
+
/* Apply the suggested unrolling factor, this was determined by the backend
during finish_cost the first time we ran the analyzis for this
vector mode. */
@@ -13353,6 +13353,12 @@ vect_analyze_stmt (vec_info *vinfo,
return opt_result::success ();
}
+ /* When we arrive here with a non-SLP statement and we are supposed
+ to use SLP for everything fail vectorization. */
+ if (!node && param_vect_force_slp)
+ return opt_result::failure_at (stmt_info->stmt,
+ "needs non-SLP handling\n");
+
ok = true;
if (!bb_vinfo
&& (STMT_VINFO_RELEVANT_P (stmt_info)