From: xuli <xu...@eswincomputing.com> This patch adds testcase for form1, as shown below:
void __attribute__((noinline)) \ vec_sat_s_add_imm_##T##_fmt_1##_##INDEX (T *out, T *op_1, unsigned limit) \ { \ unsigned i; \ for (i = 0; i < limit; i++) \ { \ T x = op_1[i]; \ T sum = (UT)x + (UT)IMM; \ out[i] = (x ^ IMM) < 0 \ ? sum \ : (sum ^ x) >= 0 \ ? sum \ : x < 0 ? MIN : MAX; \ } \ } Passed the rv64gcv regression test. Signed-off-by: Li Xu <xu...@eswincomputing.com> gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h: add signed vec SAT_ADD IMM form1. * gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h: add sat_s_add_imm data. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c: New test. * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c: New test. --- .../riscv/rvv/autovec/sat/vec_sat_arith.h | 25 ++ .../riscv/rvv/autovec/sat/vec_sat_data.h | 240 ++++++++++++++++++ .../rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c | 10 + .../rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c | 10 + .../rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c | 10 + .../rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c | 10 + .../autovec/sat/vec_sat_s_add_imm-run-1-i16.c | 28 ++ .../autovec/sat/vec_sat_s_add_imm-run-1-i32.c | 28 ++ .../autovec/sat/vec_sat_s_add_imm-run-1-i64.c | 28 ++ .../autovec/sat/vec_sat_s_add_imm-run-1-i8.c | 28 ++ .../sat/vec_sat_s_add_imm_type_check-1-i16.c | 9 + .../sat/vec_sat_s_add_imm_type_check-1-i32.c | 9 + .../sat/vec_sat_s_add_imm_type_check-1-i8.c | 10 + 13 files changed, 445 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h index 7db892cc2e9..ffdccd79b7a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h @@ -314,6 +314,31 @@ vec_sat_s_add_##T##_fmt_4 (T *out, T *op_1, T *op_2, unsigned limit) \ #define RUN_VEC_SAT_S_ADD_FMT_4_WRAP(T, out, op_1, op_2, N) \ RUN_VEC_SAT_S_ADD_FMT_4(T, out, op_1, op_2, N) +#define DEF_VEC_SAT_S_ADD_IMM_FMT_1(INDEX, T, UT, IMM, MIN, MAX) \ +void __attribute__((noinline)) \ +vec_sat_s_add_imm_##T##_fmt_1##_##INDEX (T *out, T *op_1, unsigned limit) \ +{ \ + unsigned i; \ + for (i = 0; i < limit; i++) \ + { \ + T x = op_1[i]; \ + T sum = (UT)x + (UT)IMM; \ + out[i] = (x ^ IMM) < 0 \ + ? sum \ + : (sum ^ x) >= 0 \ + ? sum \ + : x < 0 ? MIN : MAX; \ + } \ +} +#define DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(INDEX, T, UT, IMM, MIN, MAX) \ + DEF_VEC_SAT_S_ADD_IMM_FMT_1(INDEX, T, UT, IMM, MIN, MAX) + +#define RUN_VEC_SAT_S_ADD_IMM_FMT_1(INDEX, T, out, in, expect, IMM, N) \ + vec_sat_s_add_imm_##T##_fmt_1##_##INDEX (out, in, N); \ + VALIDATE_RESULT (out, expect, N) +#define RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(INDEX, T, out, in, expect, IMM, N) \ + RUN_VEC_SAT_S_ADD_IMM_FMT_1(INDEX, T, out, in, expect, IMM, N) + /******************************************************************************/ /* Saturation Sub (Unsigned and Signed) */ /******************************************************************************/ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h index ec4d64cc100..9f05c0c9291 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h @@ -744,6 +744,246 @@ uint64_t TEST_UNARY_DATA(uint64_t, sat_u_sub_imm)[][2][N] = }, }; +int8_t TEST_UNARY_DATA(int8_t, sat_s_add_imm)[][2][N] = +{ + { /* For add imm -128 */ + { + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + }, + { + -128, -128, -28, -1, + -128, -128, -28, -1, + -128, -128, -28, -1, + -128, -128, -28, -1, + }, + }, + { /* For add imm 0 */ + { + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + }, + { + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + }, + }, + { /* For add imm 1 */ + { + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + }, + { + -127, 1, 101, 127, + -127, 1, 101, 127, + -127, 1, 101, 127, + -127, 1, 101, 127, + }, + }, + { /* For add imm 127 */ + { + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + -128, 0, 100, 127, + }, + { + -1, 127, 127, 127, + -1, 127, 127, 127, + -1, 127, 127, 127, + -1, 127, 127, 127, + }, + }, +}; + +int16_t TEST_UNARY_DATA(int16_t, sat_s_add_imm)[][2][N] = +{ + { /* For add imm -32768 */ + { + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + }, + { + -32768, -32768, -32668, -1, + -32768, -32768, -32668, -1, + -32768, -32768, -32668, -1, + -32768, -32768, -32668, -1, + }, + }, + { /* For add imm 0 */ + { + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + }, + { + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + }, + }, + { /* For add imm 1 */ + { + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + }, + { + -32767, 1, 101, 32767, + -32767, 1, 101, 32767, + -32767, 1, 101, 32767, + -32767, 1, 101, 32767, + }, + }, + { /* For add imm 32767 */ + { + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + -32768, 0, 100, 32767, + }, + { + -1, 32767, 32767, 32767, + -1, 32767, 32767, 32767, + -1, 32767, 32767, 32767, + -1, 32767, 32767, 32767, + }, + }, +}; + +int32_t TEST_UNARY_DATA(int32_t, sat_s_add_imm)[][2][N] = +{ + { /* For add imm -2147483648 */ + { + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + }, + { + -2147483648, -2147483648, -2147483548, -1, + -2147483648, -2147483648, -2147483548, -1, + -2147483648, -2147483648, -2147483548, -1, + -2147483648, -2147483648, -2147483548, -1, + }, + }, + { /* For add imm 0 */ + { + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + }, + { + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + }, + }, + { /* For add imm 1 */ + { + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + }, + { + -2147483647, 1, 101, 2147483647, + -2147483647, 1, 101, 2147483647, + -2147483647, 1, 101, 2147483647, + -2147483647, 1, 101, 2147483647, + }, + }, + { /* For add imm 2147483647 */ + { + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + -2147483648, 0, 100, 2147483647, + }, + { + -1, 2147483647, 2147483647, 2147483647, + -1, 2147483647, 2147483647, 2147483647, + -1, 2147483647, 2147483647, 2147483647, + -1, 2147483647, 2147483647, 2147483647, + }, + }, +}; + +int64_t TEST_UNARY_DATA(int64_t, sat_s_add_imm)[][2][N] = +{ + { /* For add imm -9223372036854775808ll */ + { + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + }, + { + INT64_MIN, INT64_MIN, -9223372036854775708ll, -1, + INT64_MIN, INT64_MIN, -9223372036854775708ll, -1, + INT64_MIN, INT64_MIN, -9223372036854775708ll, -1, + INT64_MIN, INT64_MIN, -9223372036854775708ll, -1, + }, + }, + { /* For add imm 0 */ + { + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + }, + { + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + }, + }, + { /* For add imm 1 */ + { + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + }, + { + -INT64_MAX, 1, 101, INT64_MAX, + -INT64_MAX, 1, 101, INT64_MAX, + -INT64_MAX, 1, 101, INT64_MAX, + -INT64_MAX, 1, 101, INT64_MAX, + }, + }, + { /* For add imm 9223372036854775807ll */ + { + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + INT64_MIN, 0, 100, INT64_MAX, + }, + { + -1, INT64_MAX, INT64_MAX, INT64_MAX, + -1, INT64_MAX, INT64_MAX, INT64_MAX, + -1, INT64_MAX, INT64_MAX, INT64_MAX, + -1, INT64_MAX, INT64_MAX, INT64_MAX, + }, + }, +}; + #define TEST_BINARY_DATA_NAME(T1, T2, NAME) test_bin_##T1##_##T2##_##NAME##_data #define TEST_BINARY_DATA_NAME_WRAP(T1, T2, NAME) \ TEST_BINARY_DATA_NAME(T1, T2, NAME) diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c new file mode 100644 index 00000000000..396c741d321 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */ + +#include "vec_sat_arith.h" + +DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, 9, INT16_MIN, INT16_MAX) + +/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" { target { no-opts "-O2" } } } } */ +/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" { target { no-opts "-O3" } } } } */ +/* { dg-final { scan-assembler-times {vsadd\.vi} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c new file mode 100644 index 00000000000..da9e53879d1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */ + +#include "vec_sat_arith.h" + +DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, 9, INT32_MIN, INT32_MAX) + +/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" { target { no-opts "-O2" } } } } */ +/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" { target { no-opts "-O3" } } } } */ +/* { dg-final { scan-assembler-times {vsadd\.vi} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c new file mode 100644 index 00000000000..e9af1a159df --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */ + +#include "vec_sat_arith.h" + +DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int64_t, uint64_t, 9, INT64_MIN, INT64_MAX) + +/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" { target { no-opts "-O2" } } } } */ +/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" { target { no-opts "-O3" } } } } */ +/* { dg-final { scan-assembler-times {vsadd\.vi} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c new file mode 100644 index 00000000000..66b9d7f4a2d --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */ + +#include "vec_sat_arith.h" + +DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, 9, INT8_MIN, INT8_MAX) + +/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" { target { no-opts "-O2" } } } } */ +/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" { target { no-opts "-O3" } } } } */ +/* { dg-final { scan-assembler-times {vsadd\.vi} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c new file mode 100644 index 00000000000..fbfa4e23bff --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c @@ -0,0 +1,28 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "vec_sat_arith.h" +#include "vec_sat_data.h" + +#define T int16_t +#define RUN(INDEX, T, out, in, expect, IMM, N) \ + RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP (INDEX, T, out, in, expect, IMM, N) + +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(0, int16_t, uint16_t, -32768, INT16_MIN, INT16_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(1, int16_t, uint16_t, 0, INT16_MIN, INT16_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(2, int16_t, uint16_t, 1, INT16_MIN, INT16_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(3, int16_t, uint16_t, 32767, INT16_MIN, INT16_MAX) + +int +main () +{ + T out[N]; + T (*d)[2][N] = TEST_UNARY_DATA_WRAP (T, sat_s_add_imm); + + RUN (0, T, out, d[0][0], d[0][1], -32768, N); + RUN (1, T, out, d[1][0], d[1][1], 0, N); + RUN (2, T, out, d[2][0], d[2][1], 1, N); + RUN (3, T, out, d[3][0], d[3][1], 32767, N); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c new file mode 100644 index 00000000000..5f1763cb060 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c @@ -0,0 +1,28 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "vec_sat_arith.h" +#include "vec_sat_data.h" + +#define T int32_t +#define RUN(INDEX, T, out, in, expect, IMM, N) \ + RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP (INDEX, T, out, in, expect, IMM, N) + +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(0, int32_t, uint32_t, -2147483648, INT32_MIN, INT32_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(1, int32_t, uint32_t, 0, INT32_MIN, INT32_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(2, int32_t, uint32_t, 1, INT32_MIN, INT32_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(3, int32_t, uint32_t, 2147483647, INT32_MIN, INT32_MAX) + +int +main () +{ + T out[N]; + T (*d)[2][N] = TEST_UNARY_DATA_WRAP (T, sat_s_add_imm); + + RUN (0, T, out, d[0][0], d[0][1], -2147483648, N); + RUN (1, T, out, d[1][0], d[1][1], 0, N); + RUN (2, T, out, d[2][0], d[2][1], 1, N); + RUN (3, T, out, d[3][0], d[3][1], 2147483647, N); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c new file mode 100644 index 00000000000..435eb1bcdc4 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c @@ -0,0 +1,28 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "vec_sat_arith.h" +#include "vec_sat_data.h" + +#define T int64_t +#define RUN(INDEX, T, out, in, expect, IMM, N) \ + RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP (INDEX, T, out, in, expect, IMM, N) + +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(0, int64_t, uint64_t, INT64_MIN, INT64_MIN, INT64_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(1, int64_t, uint64_t, 0, INT64_MIN, INT64_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(2, int64_t, uint64_t, 1, INT64_MIN, INT64_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(3, int64_t, uint64_t, INT64_MAX, INT64_MIN, INT64_MAX) + +int +main () +{ + T out[N]; + T (*d)[2][N] = TEST_UNARY_DATA_WRAP (T, sat_s_add_imm); + + RUN (0, T, out, d[0][0], d[0][1], INT64_MIN, N); + RUN (1, T, out, d[1][0], d[1][1], 0, N); + RUN (2, T, out, d[2][0], d[2][1], 1, N); + RUN (3, T, out, d[3][0], d[3][1], INT64_MAX, N); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c new file mode 100644 index 00000000000..535e873fe9a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c @@ -0,0 +1,28 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "vec_sat_arith.h" +#include "vec_sat_data.h" + +#define T int8_t +#define RUN(INDEX, T, out, in, expect, IMM, N) \ + RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP (INDEX, T, out, in, expect, IMM, N) + +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(0, int8_t, uint8_t, -128, INT8_MIN, INT8_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(1, int8_t, uint8_t, 0, INT8_MIN, INT8_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(2, int8_t, uint8_t, 1, INT8_MIN, INT8_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(3, int8_t, uint8_t, 127, INT8_MIN, INT8_MAX) + +int +main () +{ + T out[N]; + T (*d)[2][N] = TEST_UNARY_DATA_WRAP (T, sat_s_add_imm); + + RUN (0, T, out, d[0][0], d[0][1], -128, N); + RUN (1, T, out, d[1][0], d[1][1], 0, N); + RUN (2, T, out, d[2][0], d[2][1], 1, N); + RUN (3, T, out, d[3][0], d[3][1], 127, N); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c new file mode 100644 index 00000000000..26e96fc18f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "vec_sat_arith.h" + +DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, -32769, INT16_MIN, INT16_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1(1, int16_t, uint16_t, 32768, INT16_MIN, INT16_MAX) + +/* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c new file mode 100644 index 00000000000..519e72c7b8c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "vec_sat_arith.h" + +DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, -2147483649, INT32_MIN, INT32_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, 2147483648, INT32_MIN, INT32_MAX) + +/* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c new file mode 100644 index 00000000000..2b0af52ee07 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */ + +#include "vec_sat_arith.h" + +DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, 200, INT8_MIN, INT8_MAX) +DEF_VEC_SAT_S_ADD_IMM_FMT_1(1, int8_t, uint8_t, -300, INT8_MIN, INT8_MAX) + +/* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */ + -- 2.17.1