Commit a421fe9e by Andre Vieira Committed by Andre Vieira

[vect] Refactor versioning threshold

gcc/ChangeLog:
2019-10-17  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	* tree-vect-loop.c (vect_transform_loop): Move code from here...
	* tree-vect-loop-manip.c (vect_loop_versioning): ... to here.
	* tree-vectorizer.h (vect_loop_versioning): Remove unused parameters.

From-SVN: r277101
parent aa9dffac
2019-10-17 Andre Vieira <andre.simoesdiasvieira@arm.com>
* tree-vect-loop.c (vect_transform_loop): Move code from here...
* tree-vect-loop-manip.c (vect_loop_versioning): ... to here.
* tree-vectorizer.h (vect_loop_versioning): Remove unused parameters.
2019-10-17 Richard Biener <rguenther@suse.de> 2019-10-17 Richard Biener <rguenther@suse.de>
* tree-vect-loop.c (needs_fold_left_reduction_p): Export. * tree-vect-loop.c (needs_fold_left_reduction_p): Export.
......
...@@ -2966,9 +2966,7 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo, tree * cond_expr) ...@@ -2966,9 +2966,7 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo, tree * cond_expr)
*COND_EXPR_STMT_LIST. */ *COND_EXPR_STMT_LIST. */
class loop * class loop *
vect_loop_versioning (loop_vec_info loop_vinfo, vect_loop_versioning (loop_vec_info loop_vinfo)
unsigned int th, bool check_profitability,
poly_uint64 versioning_threshold)
{ {
class loop *loop = LOOP_VINFO_LOOP (loop_vinfo), *nloop; class loop *loop = LOOP_VINFO_LOOP (loop_vinfo), *nloop;
class loop *scalar_loop = LOOP_VINFO_SCALAR_LOOP (loop_vinfo); class loop *scalar_loop = LOOP_VINFO_SCALAR_LOOP (loop_vinfo);
...@@ -2988,10 +2986,15 @@ vect_loop_versioning (loop_vec_info loop_vinfo, ...@@ -2988,10 +2986,15 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
bool version_align = LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT (loop_vinfo); bool version_align = LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT (loop_vinfo);
bool version_alias = LOOP_REQUIRES_VERSIONING_FOR_ALIAS (loop_vinfo); bool version_alias = LOOP_REQUIRES_VERSIONING_FOR_ALIAS (loop_vinfo);
bool version_niter = LOOP_REQUIRES_VERSIONING_FOR_NITERS (loop_vinfo); bool version_niter = LOOP_REQUIRES_VERSIONING_FOR_NITERS (loop_vinfo);
poly_uint64 versioning_threshold
= LOOP_VINFO_VERSIONING_THRESHOLD (loop_vinfo);
tree version_simd_if_cond tree version_simd_if_cond
= LOOP_REQUIRES_VERSIONING_FOR_SIMD_IF_COND (loop_vinfo); = LOOP_REQUIRES_VERSIONING_FOR_SIMD_IF_COND (loop_vinfo);
unsigned th = LOOP_VINFO_COST_MODEL_THRESHOLD (loop_vinfo);
if (check_profitability) if (th >= vect_vf_for_cost (loop_vinfo)
&& !LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
&& !ordered_p (th, versioning_threshold))
cond_expr = fold_build2 (GE_EXPR, boolean_type_node, scalar_loop_iters, cond_expr = fold_build2 (GE_EXPR, boolean_type_node, scalar_loop_iters,
build_int_cst (TREE_TYPE (scalar_loop_iters), build_int_cst (TREE_TYPE (scalar_loop_iters),
th - 1)); th - 1));
......
...@@ -8083,18 +8083,8 @@ vect_transform_loop (loop_vec_info loop_vinfo) ...@@ -8083,18 +8083,8 @@ vect_transform_loop (loop_vec_info loop_vinfo)
if (LOOP_REQUIRES_VERSIONING (loop_vinfo)) if (LOOP_REQUIRES_VERSIONING (loop_vinfo))
{ {
poly_uint64 versioning_threshold
= LOOP_VINFO_VERSIONING_THRESHOLD (loop_vinfo);
if (check_profitability
&& ordered_p (poly_uint64 (th), versioning_threshold))
{
versioning_threshold = ordered_max (poly_uint64 (th),
versioning_threshold);
check_profitability = false;
}
class loop *sloop class loop *sloop
= vect_loop_versioning (loop_vinfo, th, check_profitability, = vect_loop_versioning (loop_vinfo);
versioning_threshold);
sloop->force_vectorize = false; sloop->force_vectorize = false;
check_profitability = false; check_profitability = false;
} }
......
...@@ -1514,8 +1514,7 @@ extern void vect_set_loop_condition (class loop *, loop_vec_info, ...@@ -1514,8 +1514,7 @@ extern void vect_set_loop_condition (class loop *, loop_vec_info,
extern bool slpeel_can_duplicate_loop_p (const class loop *, const_edge); extern bool slpeel_can_duplicate_loop_p (const class loop *, const_edge);
class loop *slpeel_tree_duplicate_loop_to_edge_cfg (class loop *, class loop *slpeel_tree_duplicate_loop_to_edge_cfg (class loop *,
class loop *, edge); class loop *, edge);
class loop *vect_loop_versioning (loop_vec_info, unsigned int, bool, class loop *vect_loop_versioning (loop_vec_info);
poly_uint64);
extern class loop *vect_do_peeling (loop_vec_info, tree, tree, extern class loop *vect_do_peeling (loop_vec_info, tree, tree,
tree *, tree *, tree *, int, bool, bool); tree *, tree *, tree *, int, bool, bool);
extern void vect_prepare_for_masked_peels (loop_vec_info); extern void vect_prepare_for_masked_peels (loop_vec_info);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment