This series is intended to fix some test failures on vect-reduc-chain-*.c by adding the [su]dot_prod* expand for LSX and LASX vector modes. But the code base of the related instructions was not readable, so clean it up first (using the approach learnt from AArch64) before adding the expands.
Bootstrapped and regtested on loongarch64-linux-gnu. Ok for trunk? Xi Ruoyao (8): LoongArch: Try harder using vrepli instructions to materialize const vectors LoongArch: Allow moving TImode vectors LoongArch: Simplify {lsx_,lasx_x}v{add,sub,mul}l{ev,od} description LoongArch: Simplify {lsx_,lasx_x}hv{add,sub}w description LoongArch: Simplify {lsx_,lasx_x}maddw description LoongArch: Simplify {lsx,lasx_x}vpick description LoongArch: Implement vec_widen_mult_{even,odd}_* for LSX and LASX modes LoongArch: Implement [su]dot_prod* for LSX and LASX modes gcc/config/loongarch/constraints.md | 2 +- gcc/config/loongarch/lasx.md | 1222 +---------------- gcc/config/loongarch/loongarch-builtins.cc | 60 + gcc/config/loongarch/loongarch-modes.def | 2 + gcc/config/loongarch/loongarch-protos.h | 3 + gcc/config/loongarch/loongarch.cc | 50 +- gcc/config/loongarch/loongarch.md | 2 +- gcc/config/loongarch/lsx.md | 984 +------------ gcc/config/loongarch/predicates.md | 43 + gcc/config/loongarch/simd.md | 408 +++++- gcc/testsuite/gcc.target/loongarch/vrepli.c | 15 + .../gcc.target/loongarch/wide-mul-reduc-1.c | 18 + .../gcc.target/loongarch/wide-mul-reduc-2.c | 18 + 13 files changed, 619 insertions(+), 2208 deletions(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/vrepli.c create mode 100644 gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-1.c create mode 100644 gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-2.c -- 2.48.1