aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-data-refs.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-10-10 14:02:25 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-10-10 14:02:25 +0000
commit247afa98ba2512c7d90f3e9e05af41067ef756a3 (patch)
treeab4b351127d672cf2cd574866297570353c15fea /gcc/tree-vect-data-refs.c
parent019f36a648fd3f35e562eb7ddd3ff6393b30b4c7 (diff)
downloadgcc-247afa98ba2512c7d90f3e9e05af41067ef756a3.zip
gcc-247afa98ba2512c7d90f3e9e05af41067ef756a3.tar.gz
gcc-247afa98ba2512c7d90f3e9e05af41067ef756a3.tar.bz2
re PR middle-end/92046 (Command line options (that are per-functions) are affecting --params which are global.)
2019-10-10 Richard Biener <rguenther@suse.de> PR middle-end/92046 * opts.c (finish_options): Do not influence global --params from options that are adjustable per function. * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Apply --param adjustment based on active cost-model. * tree-ssa-phiopt.c (cond_if_else_store_replacement): Disable further store-sinking when vectorization or if-conversion are not enabled. From-SVN: r276807
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r--gcc/tree-vect-data-refs.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 6390b19..e2baeb0 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -2075,6 +2075,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
{
unsigned max_allowed_peel
= PARAM_VALUE (PARAM_VECT_MAX_PEELING_FOR_ALIGNMENT);
+ if (flag_vect_cost_model == VECT_COST_MODEL_CHEAP)
+ max_allowed_peel = 0;
if (max_allowed_peel != (unsigned)-1)
{
unsigned max_peel = npeel;
@@ -2168,15 +2170,16 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
/* (2) Versioning to force alignment. */
/* Try versioning if:
- 1) optimize loop for speed
+ 1) optimize loop for speed and the cost-model is not cheap
2) there is at least one unsupported misaligned data ref with an unknown
misalignment, and
3) all misaligned data refs with a known misalignment are supported, and
4) the number of runtime alignment checks is within reason. */
- do_versioning =
- optimize_loop_nest_for_speed_p (loop)
- && (!loop->inner); /* FORNOW */
+ do_versioning
+ = (optimize_loop_nest_for_speed_p (loop)
+ && !loop->inner /* FORNOW */
+ && flag_vect_cost_model > VECT_COST_MODEL_CHEAP);
if (do_versioning)
{
@@ -3641,13 +3644,15 @@ vect_prune_runtime_alias_test_list (loop_vec_info loop_vinfo)
dump_printf_loc (MSG_NOTE, vect_location,
"improved number of alias checks from %d to %d\n",
may_alias_ddrs.length (), count);
- if ((int) count > PARAM_VALUE (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS))
+ unsigned limit = PARAM_VALUE (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS);
+ if (flag_simd_cost_model == VECT_COST_MODEL_CHEAP)
+ limit = default_param_value
+ (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS) * 6 / 10;
+ if (count > limit)
return opt_result::failure_at
(vect_location,
- "number of versioning for alias "
- "run-time tests exceeds %d "
- "(--param vect-max-version-for-alias-checks)\n",
- PARAM_VALUE (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS));
+ "number of versioning for alias run-time tests exceeds %d "
+ "(--param vect-max-version-for-alias-checks)\n", limit);
return opt_result::success ();
}