On Tue, May 12, 2015 at 4:48 AM, Richard Biener <rguent...@suse.de> wrote:
>
> The following makes it possible to vectorize complex multiplication
> without unrolling by allowing mixed operations in a SLP node
> (plus/minus for now).  We vectorize that by computing both plus
> and minus and then merge the result.
>
> Something needs to be done in the backends to fully leverage this
> as for x86_64 for example the addsub patterns match vec_merge but
> the permutes only use vec_merge for V4SF not for V2DF.  We have too
> many ways to express this kind of permutation (vec_perm, vec_merge
> and also vec_select (vec_concat ())).
>
> This is not a full enablement to vectorize the loop in PR37021,
> some pieces are still missing (I'm working step-by-step here, resurrecting
> old patches).
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
>
> Richard.
>
> 2015-05-12  Richard Biener  <rguent...@suse.de>
>
>         PR tree-optimization/37021
>         * tree-vectorizer.h (struct _slp_tree): Add two_operators flag.
>         (SLP_TREE_TWO_OPERATORS): New define.
>         * tree-vect-slp.c (vect_create_new_slp_node): Initialize
>         SLP_TREE_TWO_OPERATORS.
>         (vect_build_slp_tree_1): Allow two mixing plus/minus in an
>         SLP node.
>         (vect_build_slp_tree): Adjust.
>         (vect_analyze_slp_cost_1): Likewise.
>         (vect_schedule_slp_instance): Vectorize mixing plus/minus by
>         emitting two vector stmts and mixing the results.
>

This caused:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66129

-- 
H.J.

Reply via email to