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.