-
- Downloads
Add x86 addsub SLP pattern
This addds SLP pattern recognition for the SSE3/AVX [v]addsubp{ds} v0, v1 instructions which compute { v0[0] - v1[0], v0[1], + v1[1], ... } thus subtract, add alternating on lanes, starting with subtract. It adds a corresponding optab and direct internal function, vec_addsub$a3 and renames the existing i386 backend patterns to the new canonical name. The SLP pattern matches the exact alternating lane sequence rather than trying to be clever and anticipating incoming permutes - we could permute the two input vectors to the needed lane alternation, do the addsub and then permute the result vector back but that's only profitable in case the two input or the output permute will vanish - something Tamars refactoring of SLP pattern recog should make possible. 2021-06-17 Richard Biener <rguenther@suse.de> * config/i386/sse.md (avx_addsubv4df3): Rename to vec_addsubv4df3. (avx_addsubv8sf3): Rename to vec_addsubv8sf3. (sse3_addsubv2df3): Rename to vec_addsubv2df3. (sse3_addsubv4sf3): Rename to vec_addsubv4sf3. * config/i386/i386-builtin.def: Adjust. * internal-fn.def (VEC_ADDSUB): New internal optab fn. * optabs.def (vec_addsub_optab): New optab. * tree-vect-slp-patterns.c (class addsub_pattern): New. (slp_patterns): Add addsub_pattern. * tree-vect-slp.c (vect_optimize_slp): Disable propagation across CFN_VEC_ADDSUB. * tree-vectorizer.h (vect_pattern::vect_pattern): Make m_ops optional. * doc/md.texi (vec_addsub<mode>3): Document. * gcc.target/i386/vect-addsubv2df.c: New testcase. * gcc.target/i386/vect-addsubv4sf.c: Likewise. * gcc.target/i386/vect-addsubv4df.c: Likewise. * gcc.target/i386/vect-addsubv8sf.c: Likewise. * gcc.target/i386/vect-addsub-2.c: Likewise. * gcc.target/i386/vect-addsub-3.c: Likewise.
Showing
- gcc/config/i386/i386-builtin.def 4 additions, 4 deletionsgcc/config/i386/i386-builtin.def
- gcc/config/i386/sse.md 4 additions, 4 deletionsgcc/config/i386/sse.md
- gcc/doc/md.texi 8 additions, 0 deletionsgcc/doc/md.texi
- gcc/internal-fn.def 1 addition, 0 deletionsgcc/internal-fn.def
- gcc/optabs.def 1 addition, 0 deletionsgcc/optabs.def
- gcc/testsuite/gcc.target/i386/vect-addsub-2.c 21 additions, 0 deletionsgcc/testsuite/gcc.target/i386/vect-addsub-2.c
- gcc/testsuite/gcc.target/i386/vect-addsub-3.c 38 additions, 0 deletionsgcc/testsuite/gcc.target/i386/vect-addsub-3.c
- gcc/testsuite/gcc.target/i386/vect-addsubv2df.c 42 additions, 0 deletionsgcc/testsuite/gcc.target/i386/vect-addsubv2df.c
- gcc/testsuite/gcc.target/i386/vect-addsubv4df.c 36 additions, 0 deletionsgcc/testsuite/gcc.target/i386/vect-addsubv4df.c
- gcc/testsuite/gcc.target/i386/vect-addsubv4sf.c 46 additions, 0 deletionsgcc/testsuite/gcc.target/i386/vect-addsubv4sf.c
- gcc/testsuite/gcc.target/i386/vect-addsubv8sf.c 46 additions, 0 deletionsgcc/testsuite/gcc.target/i386/vect-addsubv8sf.c
- gcc/tree-vect-slp-patterns.c 100 additions, 0 deletionsgcc/tree-vect-slp-patterns.c
- gcc/tree-vect-slp.c 1 addition, 0 deletionsgcc/tree-vect-slp.c
- gcc/tree-vectorizer.h 2 additions, 1 deletiongcc/tree-vectorizer.h
Loading
Please register or sign in to comment