From: Pan Li <[email protected]>
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