]> git.ipfire.org Git - thirdparty/gcc.git/commit
vect: Use sdot for a fallback implementation of usdot
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 5 Jul 2022 07:53:10 +0000 (08:53 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Tue, 5 Jul 2022 07:53:10 +0000 (08:53 +0100)
commit76c3041b856cb0495d8f71110cd76f6fe64a0038
tree36d0189235a320b99eb52b915b227402f1b0b283
parentb55284f4a1235fccd8254f539ddc6b869580462b
vect: Use sdot for a fallback implementation of usdot

Following a suggestion from Tamar, this patch adds a fallback
implementation of usdot using sdot.  Specifically, for 8-bit
input types:

   acc_2 = DOT_PROD_EXPR <a_unsigned, b_signed, acc_1>;

becomes:

   tmp_1 = DOT_PROD_EXPR <64, b_signed, acc_1>;
   tmp_2 = DOT_PROD_EXPR <64, b_signed, tmp_1>;
   acc_2 = DOT_PROD_EXPR <a_unsigned - 128, b_signed, tmp_2>;

on the basis that (x-128)*y + 64*y + 64*y.  Doing the two 64*y
operations first should give more time for x to be calculated,
on the off chance that that's useful.

gcc/
* tree-vect-patterns.cc (vect_convert_input): Expect the input
type to be signed for optab_vector_mixed_sign.  Update the vectype
at the same time as type.
(vect_recog_dot_prod_pattern): Update accordingly.  If usdot isn't
available, try sdot instead.
* tree-vect-loop.cc (vect_is_emulated_mixed_dot_prod): New function.
(vect_model_reduction_cost): Model the cost of implementing usdot
using sdot.
(vectorizable_reduction): Likewise.  Skip target support test
for lane reductions.
(vect_emulate_mixed_dot_prod): New function.
(vect_transform_reduction): Use it to emulate usdot via sdot.

gcc/testsuite/
* gcc.dg/vect/vect-reduc-dot-9.c: Reduce target requirements
from i8mm to dotprod.
* gcc.dg/vect/vect-reduc-dot-10.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-11.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-12.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-13.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-14.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-15.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-16.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-17.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-18.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-19.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-20.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-21.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-22.c: Likewise.
16 files changed:
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-10.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-11.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-12.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-13.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-14.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-15.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-16.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-17.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-18.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-19.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-20.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-21.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-22.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-9.c
gcc/tree-vect-loop.cc
gcc/tree-vect-patterns.cc