+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.
+
2019-10-10 Jan Hubicka <hubicka@ucw.cz>
PR middle-end/92037
&& !opts_set->x_flag_reorder_functions)
opts->x_flag_reorder_functions = 1;
- /* Tune vectorization related parametees according to cost model. */
- if (opts->x_flag_vect_cost_model == VECT_COST_MODEL_CHEAP)
- {
- maybe_set_param_value (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS,
- 6, opts->x_param_values, opts_set->x_param_values);
- maybe_set_param_value (PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS,
- 0, opts->x_param_values, opts_set->x_param_values);
- maybe_set_param_value (PARAM_VECT_MAX_PEELING_FOR_ALIGNMENT,
- 0, opts->x_param_values, opts_set->x_param_values);
- }
-
- /* Set PARAM_MAX_STORES_TO_SINK to 0 if either vectorization or if-conversion
- is disabled. */
- if ((!opts->x_flag_tree_loop_vectorize && !opts->x_flag_tree_slp_vectorize)
- || !opts->x_flag_tree_loop_if_convert)
- maybe_set_param_value (PARAM_MAX_STORES_TO_SINK, 0,
- opts->x_param_values, opts_set->x_param_values);
-
/* The -gsplit-dwarf option requires -ggnu-pubnames. */
if (opts->x_dwarf_split_debug_info)
opts->x_debug_generate_pub_sections = 2;
then_assign, else_assign);
}
- if (MAX_STORES_TO_SINK == 0)
+ /* If either vectorization or if-conversion is disabled then do
+ not sink any stores. */
+ if (MAX_STORES_TO_SINK == 0
+ || (!flag_tree_loop_vectorize && !flag_tree_slp_vectorize)
+ || !flag_tree_loop_if_convert)
return false;
/* Find data references. */
{
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;
/* (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)
{
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 ();
}