Richard Biener <rguent...@suse.de> writes:
> The following moves vector lowering to before vectorization - in fact
> to before DCE/forwprop and CSE.  This gets us the chance to re-vectorize
> the lowered form eventually.  Note that when the vectorizer learns to
> handle vector code vector lowering should be likely integrated with
> vectorization itself.
>
> The main goal is to not have the gap between vectorization and
> vector lowering where optimize_vectors_before_lowering_p is
> still false.  Because that has the chance to mess up vector code
> emitted by the vectorizer into a form that requires lowering
> which can be quite inefficient.
>
> Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
>
> Any comments on this part?

Nothing constructive, just: thanks for doing this.  It was also on my
long-term wish list (but with no realistic prospect of ever being done,
if it had been up to me).

Richard

> Note canonicalize_math_after_vectorization_p
> says "Return true if math operations that are beneficial only after
> vectorization should be canonicalized." but is keyed on vector lowering
> having run.  That might need adjustment now, possibly adding another
> property?
>
> Thanks,
> Richard.
>
>       * passes.def (pass_lower_vector_ssa): Move from after loop
>       optimizations to after the initial reassoc.
> ---
>  gcc/passes.def | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/passes.def b/gcc/passes.def
> index 3b251052e53..886023e57a0 100644
> --- a/gcc/passes.def
> +++ b/gcc/passes.def
> @@ -254,6 +254,7 @@ along with GCC; see the file COPYING3.  If not see
>        program and isolate those paths.  */
>        NEXT_PASS (pass_isolate_erroneous_paths);
>        NEXT_PASS (pass_reassoc, true /* early_p */);
> +      NEXT_PASS (pass_lower_vector_ssa);
>        NEXT_PASS (pass_dce);
>        NEXT_PASS (pass_forwprop, /*last=*/false);
>        NEXT_PASS (pass_phiopt, false /* early_p */);
> @@ -334,7 +335,6 @@ along with GCC; see the file COPYING3.  If not see
>         NEXT_PASS (pass_slp_vectorize);
>        POP_INSERT_PASSES ()
>        NEXT_PASS (pass_simduid_cleanup);
> -      NEXT_PASS (pass_lower_vector_ssa);
>        NEXT_PASS (pass_lower_switch);
>        NEXT_PASS (pass_cse_sincos);
>        NEXT_PASS (pass_cse_reciprocals);

Reply via email to