gcc/ChangeLog:
* config/riscv/autovec-opt.md (*cond_):
New combine pattern.
(*cond_): Ditto.
(*cond_): Ditto.
(*cond_): Ditto.
(*cond_): Ditto.
(*cond_2): Ditto.
* config/riscv/autovec.md (2): Adjust.
(2): Adjust.
(2): Adjust.
(2): Adjust.
(2): Adjust.
(2): Adjust.
* config/riscv/riscv-v.cc (needs_fp_rounding): Add INT->FP extend.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-1.h: New
test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-2.h: New
test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-1.c:
New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-2.c:
New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-1.c:
New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-2.c:
New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-1.c: New
test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-2.c: New
test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-1.h: New
test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-2.h: New
test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-rv32-1.c:
New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-rv32-2.c:
New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-rv64-1.c:
New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-rv64-2.c:
New test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-1.c: New
test.
* gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-2.c: New
test.
---
gcc/config/riscv/autovec-opt.md | 120 ++
gcc/config/riscv/autovec.md | 42 --
gcc/config/riscv/riscv-v.cc | 5 +-
.../autovec/cond/cond_convert_float2int-1.h | 51
.../autovec/cond/cond_convert_float2int-2.h | 50
.../cond/cond_convert_float2int-rv32-1.c | 15 +++
.../cond/cond_convert_float2int-rv32-2.c | 15 +++
.../cond/cond_convert_float2int-rv64-1.c | 15 +++
.../cond/cond_convert_float2int-rv64-2.c | 15 +++
.../cond/cond_convert_float2int_run-1.c | 32 +
.../cond/cond_convert_float2int_run-2.c | 31 +
.../autovec/cond/cond_convert_int2float-1.h | 45 +++
.../autovec/cond/cond_convert_int2float-2.h | 44 +++
.../cond/cond_convert_int2float-rv32-1.c | 13 ++
.../cond/cond_convert_int2float-rv32-2.c | 13 ++
.../cond/cond_convert_int2float-rv64-1.c | 13 ++
.../cond/cond_convert_int2float-rv64-2.c | 13 ++
.../cond/cond_convert_int2float_run-1.c | 32 +
.../cond/cond_convert_int2float_run-2.c | 31 +
19 files changed, 582 insertions(+), 13 deletions(-)
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-1.h
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-2.h
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-1.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv32-2.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-1.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int-rv64-2.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-1.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2int_run-2.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-1.h
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-2.h
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-rv32-1.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-rv32-2.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-rv64-1.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float-rv64-2.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-1.c
create mode 100644
gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2float_run-2.c
diff --git a/gcc/config/riscv/autovec-opt.md b/gcc/config/riscv/autovec-opt.md
index ef468bb9df7..1ca5ce97193 100644
--- a/gcc/config/riscv/autovec-opt.md
+++ b/gcc/config/riscv/autovec-opt.md
@@ -863,3 +863,123 @@
riscv_vector::expand_cond_len_unop (icode, ops);
DONE;
})
+
+;; Combine convert(FP->INT) + vcond_mask
+(define_insn_and_split "*cond_"
+ [(set (m