From: Pan Li <pan2...@intel.com>

This patch serices would like to support form 7 of the unsigned integer
SAT_ADD.  Different to another forms of SAT_ADD, the form 7 will
leverage a wider type to tell overflow or not, aka:

  #define DEF_SAT_U_ADD_FMT_7(WT, T)     \
  T __attribute__((noinline))            \
  sat_u_add_##WT##_##T##_fmt_7(T x, T y) \
  {                                      \
    T max = -1;                          \
    WT val = (WT)x + (WT)y;              \
    return val > max ? max : (T)val;     \
  }

WT is a wider type than T, and there is no additional change from
the middle-end besides match.pd.

The below test suites are passed for this patch.
* The rv64gcv fully regression test.
* The x86 bootstrap test.
* The x86 fully regression test.

Pan Li (3):
  Match: Support form 7 for unsigned integer SAT_ADD
  RISC-V: Add testcases for scalar unsigned integer SAT_ADD form 7
  RISC-V: Add testcases for vector unsigned integer SAT_ADD form 7

 gcc/match.pd                                  | 16 +++-
 .../riscv/rvv/autovec/sat/vec_sat_arith.h     | 31 ++++++++
 .../sat/vec_sat_u_add-9-u16-from-u32.c        |  9 +++
 .../sat/vec_sat_u_add-9-u16-from-u64.c        |  9 +++
 .../sat/vec_sat_u_add-9-u32-from-u64.c        |  9 +++
 .../autovec/sat/vec_sat_u_add-9-u8-from-u16.c |  9 +++
 .../autovec/sat/vec_sat_u_add-9-u8-from-u32.c |  9 +++
 .../autovec/sat/vec_sat_u_add-9-u8-from-u64.c |  9 +++
 .../sat/vec_sat_u_add-run-9-u16-from-u32.c    | 76 +++++++++++++++++++
 .../sat/vec_sat_u_add-run-9-u16-from-u64.c    | 76 +++++++++++++++++++
 .../sat/vec_sat_u_add-run-9-u32-from-u64.c    | 76 +++++++++++++++++++
 .../sat/vec_sat_u_add-run-9-u8-from-u16.c     | 76 +++++++++++++++++++
 .../sat/vec_sat_u_add-run-9-u8-from-u32.c     | 76 +++++++++++++++++++
 .../sat/vec_sat_u_add-run-9-u8-from-u64.c     | 76 +++++++++++++++++++
 .../gcc.target/riscv/sat/sat_arith.h          | 22 ++++++
 .../riscv/sat/sat_u_add-7-u16-from-u32.c      | 21 +++++
 .../riscv/sat/sat_u_add-7-u16-from-u64.c      | 21 +++++
 .../riscv/sat/sat_u_add-7-u32-from-u64.c      | 22 ++++++
 .../riscv/sat/sat_u_add-7-u8-from-u16.c       | 19 +++++
 .../riscv/sat/sat_u_add-7-u8-from-u32.c       | 19 +++++
 .../riscv/sat/sat_u_add-7-u8-from-u64.c       | 19 +++++
 .../riscv/sat/sat_u_add-run-7-u16-from-u32.c  | 26 +++++++
 .../riscv/sat/sat_u_add-run-7-u16-from-u64.c  | 26 +++++++
 .../riscv/sat/sat_u_add-run-7-u32-from-u64.c  | 26 +++++++
 .../riscv/sat/sat_u_add-run-7-u8-from-u16.c   | 26 +++++++
 .../riscv/sat/sat_u_add-run-7-u8-from-u32.c   | 26 +++++++
 .../riscv/sat/sat_u_add-run-7-u8-from-u64.c   | 26 +++++++
 27 files changed, 855 insertions(+), 1 deletion(-)
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u32-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u16.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u32-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u16.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u32-from-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u16.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u64.c

-- 
2.43.0

Reply via email to