diff options
author | Yuliang Wang <yuliang.wang@arm.com> | 2019-09-12 09:59:58 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-09-12 09:59:58 +0000 |
commit | 58cc98767aa1d8136d36467b892dc4adaf427acc (patch) | |
tree | 6b0b99d529e0034fbf28907e2a8dcc95ba22df37 /gcc/doc | |
parent | 8c58d9d837098d692d313a7116ed7d4a9e271287 (diff) | |
download | gcc-58cc98767aa1d8136d36467b892dc4adaf427acc.zip gcc-58cc98767aa1d8136d36467b892dc4adaf427acc.tar.gz gcc-58cc98767aa1d8136d36467b892dc4adaf427acc.tar.bz2 |
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
Diffstat (limited to 'gcc/doc')
-rw-r--r-- | gcc/doc/md.texi | 27 | ||||
-rw-r--r-- | gcc/doc/sourcebuild.texi | 4 |
2 files changed, 31 insertions, 0 deletions
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index fa4ae14..f35fd2b 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -5387,6 +5387,33 @@ operand 1. Add operand 1 to operand 2 and place the widened result in operand 0. (This is used express accumulation of elements into an accumulator of a wider mode.) +@cindex @code{smulhs@var{m3}} instruction pattern +@item @samp{smulhs@var{m3}} +@cindex @code{umulhs@var{m3}} instruction pattern +@itemx @samp{umulhs@var{m3}} +Signed/unsigned multiply high with scale. This is equivalent to the C code: +@smallexample +narrow op0, op1, op2; +@dots{} +op0 = (narrow) (((wide) op1 * (wide) op2) >> (N / 2 - 1)); +@end smallexample +where the sign of @samp{narrow} determines whether this is a signed +or unsigned operation, and @var{N} is the size of @samp{wide} in bits. + +@cindex @code{smulhrs@var{m3}} instruction pattern +@item @samp{smulhrs@var{m3}} +@cindex @code{umulhrs@var{m3}} instruction pattern +@itemx @samp{umulhrs@var{m3}} +Signed/unsigned multiply high with round and scale. This is +equivalent to the C code: +@smallexample +narrow op0, op1, op2; +@dots{} +op0 = (narrow) (((((wide) op1 * (wide) op2) >> (N / 2 - 2)) + 1) >> 1); +@end smallexample +where the sign of @samp{narrow} determines whether this is a signed +or unsigned operation, and @var{N} is the size of @samp{wide} in bits. + @cindex @code{vec_shl_insert_@var{m}} instruction pattern @item @samp{vec_shl_insert_@var{m}} Shift the elements in vector input operand 1 left one element (i.e.@: diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index e4180cc..4ace224 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1442,6 +1442,10 @@ vector alignment. Target supports both signed and unsigned averaging operations on vectors of bytes. +@item vect_mulhrs_hi +Target supports both signed and unsigned multiply-high-with-round-and-scale +operations on vectors of half-words. + @item vect_condition Target supports vector conditional operations. |