Vectorise multiply high with scaling operations (PR 89386)
authorYuliang Wang <yuliang.wang@arm.com>
Thu, 12 Sep 2019 09:59:58 +0000 (09:59 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 12 Sep 2019 09:59:58 +0000 (09:59 +0000)
commit58cc98767aa1d8136d36467b892dc4adaf427acc
tree6b0b99d529e0034fbf28907e2a8dcc95ba22df37
parent8c58d9d837098d692d313a7116ed7d4a9e271287
Vectorise multiply high with scaling operations (PR 89386)

2019-09-12  Yuliang Wang  <yuliang.wang@arm.com>

gcc/
PR tree-optimization/89386
* config/aarch64/aarch64-sve2.md (<su>mull<bt><Vwide>)
(<r>shrnb<mode>, <r>shrnt<mode>): New SVE2 patterns.
(<su>mulh<r>s<mode>3): New pattern for MULHRS.
* config/aarch64/iterators.md (UNSPEC_SMULLB, UNSPEC_SMULLT)
(UNSPEC_UMULLB, UNSPEC_UMULLT, UNSPEC_SHRNB, UNSPEC_SHRNT)
(UNSPEC_RSHRNB, UNSPEC_RSHRNT, UNSPEC_SMULHS, UNSPEC_SMULHRS)
UNSPEC_UMULHS, UNSPEC_UMULHRS): New unspecs.
(MULLBT, SHRNB, SHRNT, MULHRS): New int iterators.
(su, r): Handle the unspecs above.
(bt): New int attribute.
* internal-fn.def (IFN_MULHS, IFN_MULHRS): New internal functions.
* internal-fn.c (first_commutative_argument): Commutativity info for
above.
* optabs.def (smulhs_optab, smulhrs_optab, umulhs_optab)
(umulhrs_optab): New optabs.
* doc/md.texi (smulhs$var{m3}, umulhs$var{m3})
(smulhrs$var{m3}, umulhrs$var{m3}): Documentation for the above.
* tree-vect-patterns.c (vect_recog_mulhs_pattern): New pattern
function.
(vect_vect_recog_func_ptrs): Add it.
* testsuite/gcc.target/aarch64/sve2/mulhrs_1.c: New test.
* testsuite/gcc.dg/vect/vect-mulhrs-1.c: As above.
* testsuite/gcc.dg/vect/vect-mulhrs-2.c: As above.
* testsuite/gcc.dg/vect/vect-mulhrs-3.c: As above.
* testsuite/gcc.dg/vect/vect-mulhrs-4.c: As above.
* doc/sourcebuild.texi (vect_mulhrs_hi): Document new target selector.
* testsuite/lib/target-supports.exp
(check_effective_target_vect_mulhrs_hi): Return true for AArch64
with SVE2.

From-SVN: r275682
15 files changed:
gcc/ChangeLog
gcc/config/aarch64/aarch64-sve2.md
gcc/config/aarch64/iterators.md
gcc/doc/md.texi
gcc/doc/sourcebuild.texi
gcc/internal-fn.c
gcc/internal-fn.def
gcc/optabs.def
gcc/testsuite/gcc.dg/vect/vect-mulhrs-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-mulhrs-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-mulhrs-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-mulhrs-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve2/mulhrs_1.c [new file with mode: 0644]
gcc/testsuite/lib/target-supports.exp
gcc/tree-vect-patterns.c