This is an update of : https://gcc.gnu.org/pipermail/gcc-patches/2023-July/624770.html
Changes since last version: - Revert vabsd/xvabsd RTL templates to unspec impl, because arithmetic RTL expression cannot cover the edge case of the instruction output. v2 impl of vabsd/xvabsd template cause the failure of gcc.dg/sabd_1.c when running regression test with RUNTESTFLAGS="--target_board=unix/-mlsx". - Resolve warning in gcc/config/loongarch/loongarch.cc when bootstrapping with BOOT_CFLAGS="-O2 -ftree-vectorize -fno-vect-cost-model -mlasx". - Remove redundant definitions in lasxintrin.h. - Refine commit info. Lulu Cheng (8): LoongArch: Add Loongson SX vector directive compilation framework. LoongArch: Add Loongson SX base instruction support. LoongArch: Add Loongson SX directive builtin function support. LoongArch: Add Loongson ASX vector directive compilation framework. LoongArch: Add Loongson ASX base instruction support. LoongArch: Add Loongson ASX directive builtin function support. LoongArch: Add Loongson SX directive test cases. LoongArch: Add Loongson ASX directive test cases. gcc/config.gcc | 2 +- gcc/config/loongarch/constraints.md | 131 +- .../loongarch/genopts/loongarch-strings | 4 + gcc/config/loongarch/genopts/loongarch.opt.in | 12 +- gcc/config/loongarch/lasx.md | 5122 +++ gcc/config/loongarch/lasxintrin.h | 5338 +++ gcc/config/loongarch/loongarch-builtins.cc | 2686 +- gcc/config/loongarch/loongarch-c.cc | 18 + gcc/config/loongarch/loongarch-def.c | 6 + gcc/config/loongarch/loongarch-def.h | 9 +- gcc/config/loongarch/loongarch-driver.cc | 10 + gcc/config/loongarch/loongarch-driver.h | 2 + gcc/config/loongarch/loongarch-ftypes.def | 666 +- gcc/config/loongarch/loongarch-modes.def | 39 + gcc/config/loongarch/loongarch-opts.cc | 89 +- gcc/config/loongarch/loongarch-opts.h | 3 + gcc/config/loongarch/loongarch-protos.h | 35 + gcc/config/loongarch/loongarch-str.h | 3 + gcc/config/loongarch/loongarch.cc | 4669 +- gcc/config/loongarch/loongarch.h | 117 +- gcc/config/loongarch/loongarch.md | 56 +- gcc/config/loongarch/loongarch.opt | 12 +- gcc/config/loongarch/lsx.md | 4481 ++ gcc/config/loongarch/lsxintrin.h | 5181 +++ gcc/config/loongarch/predicates.md | 333 +- gcc/doc/md.texi | 11 + .../gcc.target/loongarch/strict-align.c | 13 + .../vector/lasx/lasx-bit-manipulate.c | 27813 +++++++++++ .../loongarch/vector/lasx/lasx-builtin.c | 1509 + .../loongarch/vector/lasx/lasx-cmp.c | 5361 +++ .../loongarch/vector/lasx/lasx-fp-arith.c | 6259 +++ .../loongarch/vector/lasx/lasx-fp-cvt.c | 7315 +++ .../loongarch/vector/lasx/lasx-int-arith.c | 38361 ++++++++++++++++ .../loongarch/vector/lasx/lasx-mem.c | 147 + .../loongarch/vector/lasx/lasx-perm.c | 7730 ++++ .../vector/lasx/lasx-str-manipulate.c | 712 + .../loongarch/vector/lasx/lasx-xvldrepl.c | 13 + .../loongarch/vector/lasx/lasx-xvstelm.c | 12 + .../loongarch/vector/loongarch-vector.exp | 42 + .../loongarch/vector/lsx/lsx-bit-manipulate.c | 15586 +++++++ .../loongarch/vector/lsx/lsx-builtin.c | 1461 + .../gcc.target/loongarch/vector/lsx/lsx-cmp.c | 3354 ++ .../loongarch/vector/lsx/lsx-fp-arith.c | 3713 ++ .../loongarch/vector/lsx/lsx-fp-cvt.c | 4114 ++ .../loongarch/vector/lsx/lsx-int-arith.c | 22424 +++++++++ .../gcc.target/loongarch/vector/lsx/lsx-mem.c | 537 + .../loongarch/vector/lsx/lsx-perm.c | 5555 +++ .../loongarch/vector/lsx/lsx-str-manipulate.c | 408 + .../loongarch/vector/simd_correctness_check.h | 39 + 49 files changed, 181229 insertions(+), 284 deletions(-) create mode 100644 gcc/config/loongarch/lasx.md create mode 100644 gcc/config/loongarch/lasxintrin.h create mode 100644 gcc/config/loongarch/lsx.md create mode 100644 gcc/config/loongarch/lsxintrin.h create mode 100644 gcc/testsuite/gcc.target/loongarch/strict-align.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-bit-manipulate.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-cmp.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-fp-arith.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-fp-cvt.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-int-arith.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-mem.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-perm.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-str-manipulate.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvldrepl.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvstelm.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-bit-manipulate.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-builtin.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-cmp.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-fp-arith.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-fp-cvt.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-int-arith.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-mem.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-perm.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-str-manipulate.c create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/simd_correctness_check.h -- 2.31.1