Hi, these patchs support combining convert_op + vcond_mask to convert_op with mask operand. The method is to keep the vector convert pattern simple (by changing define_expand to define_insn_and_split) until the combine pass and introduce the corresponding pattern to match the pattern after the combine.
Best, Lehua Lehua Ding (4): RISC-V: Adjust expand_cond_len_{unary,binop,op} api RISC-V: Add conditional autovec convert(INT<->INT) patterns RISC-V: Add conditional autovec convert(FP<->FP) patterns RISC-V: Add conditional autovec convert(INT<->FP) patterns gcc/config/riscv/autovec-opt.md | 236 ++++++++++++++++++ gcc/config/riscv/autovec.md | 110 ++++---- gcc/config/riscv/riscv-protos.h | 4 +- gcc/config/riscv/riscv-v.cc | 39 +-- .../riscv/rvv/autovec/binop/narrow-3.c | 2 +- .../autovec/cond/cond_convert_float2float-1.h | 29 +++ .../autovec/cond/cond_convert_float2float-2.h | 28 +++ .../cond/cond_convert_float2float-rv32-1.c | 9 + .../cond/cond_convert_float2float-rv32-2.c | 9 + .../cond/cond_convert_float2float-rv64-1.c | 9 + .../cond/cond_convert_float2float-rv64-2.c | 9 + .../cond/cond_convert_float2float_run-1.c | 31 +++ .../cond/cond_convert_float2float_run-2.c | 30 +++ .../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 +++ .../rvv/autovec/cond/cond_convert_int2int-1.h | 47 ++++ .../rvv/autovec/cond/cond_convert_int2int-2.h | 46 ++++ .../cond/cond_convert_int2int-rv32-1.c | 17 ++ .../cond/cond_convert_int2int-rv32-2.c | 16 ++ .../cond/cond_convert_int2int-rv64-1.c | 16 ++ .../cond/cond_convert_int2int-rv64-2.c | 16 ++ .../autovec/cond/cond_convert_int2int_run-1.c | 31 +++ .../autovec/cond/cond_convert_int2int_run-2.c | 30 +++ 37 files changed, 1124 insertions(+), 68 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2float-1.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2float-2.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2float-rv32-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2float-rv32-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2float-rv64-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2float-rv64-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2float_run-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_float2float_run-2.c 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 create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2int-1.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2int-2.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2int-rv32-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2int-rv32-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2int-rv64-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2int-rv64-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2int_run-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_convert_int2int_run-2.c -- 2.36.3