mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-27 05:44:15 +08:00
Fail vectorization when not using SLP and --param vect-force-slp == 1
The following adds --param vect-force-slp to enable the transition to full SLP. Full SLP is enforced during stmt analysis where it detects failed SLP discovery and at loop analysis time where it avoids analyzing a loop with SLP disabled. Failure to SLP results in vectorization to fail. * params.opt (vect-force-slp): New param, default 0. * doc/invoke.texi (--param vect-force-slp): Document. * tree-vect-loop.cc (vect_analyze_loop_2): When analyzing without SLP but --param vect-force-slp is 1 fail. * tree-vect-stmts.cc (vect_analyze_stmt): Fail vectorization for non-SLP stmts when --param vect-force-slp is 1.
This commit is contained in:
parent
ad5bfc2b70
commit
de1389e24e
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user