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

Reply via email to