On Thu, Jul 27, 2017 at 1:43 PM, James Greenhalgh
<[email protected]> wrote:
>
> Hi,
>
> While answering a user question on the equivalence of
> -ftree-loop-vectorize + -ftree-slp-vectorize and -ftree-vectorize I
> spotted one case which broke the equivalence. pass_ch::process_loop_p
> was guarded on flag_tree_vectorize, meaning you would get it for
> -ftree-vectorize, but not for -ftree-loop-vectorize/-ftree-slp-vectorize.
>
> This patch fixes that, getting rid of the only use of flag_tree_vectorize
> in the code base.
>
> This was preapproved on IRC:
>
> <jgreenhalgh> binche01: Should the first check in
> gcc/tree-ssa-loop-ch.c :: pass_ch_vect::process_loop_p really be on
> !flag_tree_vectorize ? That seems to go against the documentation that
> -ftree-vectorize is equivalent to -ftree-loop-vectorize
> -ftree-slp-vectorize
> <binche01> never noticed the condition. any trouble caused?
> <jgreenhalgh> None that I know of, I was trying to answer a user
> question of whether the flags were really equivalent, and spotted
> that while grepping to confirm it
> <binche01> don't know if header copy can enables slp with
> -fno-tree-loop-vectorize. richi may have the answer. maybe you
> can change it to flag_tree_loop_* see if there is breakage.
> <richi> jgreenhalgh: we should remove flag_tree_vectorize
> <richi> jgreenhalgh: patch pre-approved and change the CH flag check
> to flag_tree_loop_vectorize
>
> Committed as r250619 after a successful bootstrap and test run on
> aarch64-none-linux-gnu.
>
> I'm not sure what was meant by "remove flag_tree_vectorize" - the command line
> option seems a bit too popular to deprecate it, and the options framework
> doesn't like the idea of one option as an Alias of two others. So I've
> left it in place pending further instructions.
I thought of
Index: gcc/common.opt
===================================================================
--- gcc/common.opt (revision 250619)
+++ gcc/common.opt (working copy)
ftree-vectorize
-Common Report Var(flag_tree_vectorize) Optimization
+Common Report Optimization
Enable vectorization on trees.
ftree-vectorizer-verbose=
which shows a few other uses of flag_tree_vectorize:
int
omp_max_vf (void)
{
if (!optimize
|| optimize_debug
|| !flag_tree_loop_optimize
|| (!flag_tree_loop_vectorize
&& (global_options_set.x_flag_tree_loop_vectorize
|| global_options_set.x_flag_tree_vectorize)))
return 1;
not sure what that was supposed to test. Jakub? Similar
use in expand_omp_simd.
I suppose it wants to check whether _any_ function has
loop vectorization enabled (for some reason)? And this is
an approximation only (doesn't work for one function
with attribute(optimize("tree-loop-vectorize")).
Thanks,
Richard.
> Thanks,
> James
>
> ---
> 2017-07-27 James Greenhalgh <[email protected]>
>
> * tree-ssa-loop-ch.c (pass_ch::process_loop_p): Guard on
> flag_tree_loop_vectorize rather than flag_tree_vectorize.
>