]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V:Add testcases for signed .SAT_ADD IMM form 1 with IMM = -1.
authorxuli <xuli1@eswincomputing.com>
Fri, 27 Dec 2024 07:59:31 +0000 (07:59 +0000)
committerxuli <xuli1@eswincomputing.com>
Tue, 27 May 2025 02:35:41 +0000 (02:35 +0000)
This patch adds testcase for form1, as shown below:

T __attribute__((noinline))                  \
sat_s_add_imm_##T##_fmt_1##_##INDEX (T x)             \
{                                            \
  T sum = (UT)x + (UT)IMM;                     \
  return (x ^ IMM) < 0                         \
    ? sum                                    \
    : (sum ^ x) >= 0                         \
      ? sum                                  \
      : x < 0 ? MIN : MAX;                   \
}

Passed the rv64gcv regression test.

Signed-off-by: Li Xu <xuli1@eswincomputing.com>
gcc/testsuite/ChangeLog:

* gcc.target/riscv/sat/sat_s_add_imm-2.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm-1-i16.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-3.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm-1-i32.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-4.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm-1-i64.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-1.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm-1-i8.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-run-2.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-run-3.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-run-4.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-run-1.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm-run-1-i8.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-2-1.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i16.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-3-1.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i32.c: ...here.
* gcc.target/riscv/sat/sat_s_add_imm-1-1.c: Move to...
* gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i8.c: ...here.

gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2.c with 53% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3.c with 53% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-4.c with 55% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1.c with 57% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2.c with 84% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-3.c with 84% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-4.c with 84% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i8.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1.c with 84% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i16.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-1.c with 100% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i32.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3-1.c with 100% similarity]
gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i8.c [moved from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-1.c with 100% similarity]

similarity index 53%
rename from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c
index 3878286d207be0b5479590d0f7189f6d00d43db8..2e23af5d86b76a42fd9e9649eb5cc47d213a22bd 100644 (file)
 */
 DEF_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, -7, INT16_MIN, INT16_MAX)
 
-/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+/*
+** sat_s_add_imm_int16_t_fmt_1_1:
+**     addi\s+[atx][0-9]+,\s*a0,\s*-1
+**     not\s+[atx][0-9]+,\s*a0
+**     xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+**     srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
+**     srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
+**     xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+**     and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+**     srai\s+a0,\s*a0,\s*63
+**     li\s+[atx][0-9]+,\s*32768
+**     addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+**     xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+**     neg\s+a0,\s*[atx][0-9]+
+**     and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+**     addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+**     and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     or\s+a0,\s*a0,\s*[atx][0-9]+
+**     slliw\s+a0,\s*a0,\s*16
+**     sraiw\s+a0,\s*a0,\s*16
+**     ret
+*/
+DEF_SAT_S_ADD_IMM_FMT_1(1, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
similarity index 53%
rename from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c
index c9fbc665562a78b42421963711f97b2ebba9a45f..e63211ffc1d3ce47e996e5dedc084030ab45f729 100644 (file)
 */
 DEF_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, 10, INT32_MIN, INT32_MAX)
 
-/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+/*
+** sat_s_add_imm_int32_t_fmt_1_1:
+**     addi\s+[atx][0-9]+,\s*a0,\s*-1
+**     not\s+[atx][0-9]+,\s*a0
+**     xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+**     srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
+**     srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
+**     xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+**     and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+**     srai\s+a0,\s*a0,\s*63
+**     li\s+[atx][0-9]+,\s*-2147483648
+**     xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+**     xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+**     neg\s+a0,\s*[atx][0-9]+
+**     and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+**     addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+**     and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     or\s+a0,\s*a0,\s*[atx][0-9]+
+**     sext.w\s+a0,\s*a0
+**     ret
+*/
+DEF_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
similarity index 55%
rename from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-4.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c
index 2aa954585e7673ee2e55563693b170208a555edf..3843b711da8543284f153d370653eb87f6f0f450 100644 (file)
 */
 DEF_SAT_S_ADD_IMM_FMT_1(0, int64_t, uint64_t, 10, INT64_MIN, INT64_MAX)
 
-/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+/*
+** sat_s_add_imm_int64_t_fmt_1_1:
+**     addi\s+[atx][0-9]+,\s*a0,\s*-1
+**     xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+**     srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
+**     slti\s+[atx][0-9]+,\s*a0,\s*0
+**     and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     srai\s+[atx][0-9]+,\s*a0,\s*63
+**     li\s+[atx][0-9]+,\s*-1
+**     srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+**     xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     neg\s+[atx][0-9]+,\s*[atx][0-9]+
+**     and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+**     and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     or\s+a0,\s*a0,\s*[atx][0-9]+
+**     ret
+*/
+DEF_SAT_S_ADD_IMM_FMT_1(1, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
similarity index 57%
rename from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c
index b6f1731352c981852cbecc4e425decba61c66e53..ceae1ea2f36422d6fef7f59039c2e17ffcc22b6f 100644 (file)
 */
 DEF_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" } } */
+/*
+** sat_s_add_imm_int8_t_fmt_1_1:
+**     addi\s+[atx][0-9]+,\s*a0,\s*-1
+**     xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+**     and\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+**     slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*56
+**     srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
+**     srai\s+a0,\s*a0,\s*63
+**     xori\s+[atx][0-9]+,\s*a0,\s*127
+**     neg\s+a0,\s*a5
+**     and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+**     addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+**     and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+**     or\s+a0,\s*a0,\s*[atx][0-9]+
+**     slliw\s+a0,\s*a0,\s*24
+**     sraiw\s+a0,\s*a0,\s*24
+**     ret
+*/
+DEF_SAT_S_ADD_IMM_FMT_1(1, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
similarity index 84%
rename from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c
index 187a098de3328e56e6d973aea426cb96d925478e..ae2c306fd1e0f250ae310de218c4151a2b1f5d49 100644 (file)
@@ -7,6 +7,7 @@ DEF_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, -32768, INT16_MIN, INT16_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(1, int16_t, uint16_t, 32767, INT16_MIN, INT16_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(2, int16_t, uint16_t, 100, INT16_MIN, INT16_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(3, int16_t, uint16_t, -100, INT16_MIN, INT16_MAX)
+DEF_SAT_S_ADD_IMM_FMT_1(4, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
 
 #define T                       int16_t
 #define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect)
@@ -21,6 +22,8 @@ T d[][2] = {
   { -32768,     -32668, },
   { -32768,     -32768, },
   {      0,       -100, },
+  { -32768,     -32768, },
+  {      0,         -1, },
 };
 
 int
@@ -38,5 +41,8 @@ main ()
   RUN (3, T, d[6][0], d[6][1]);
   RUN (3, T, d[7][0], d[7][1]);
 
+  RUN (4, T, d[8][0], d[8][1]);
+  RUN (4, T, d[9][0], d[9][1]);
+
   return 0;
 }
similarity index 84%
rename from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-3.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c
index 899fda89665189a92688964f8706811598481216..02a947f3f7f8755885ea2047b0e800979f9c7dee 100644 (file)
@@ -7,6 +7,7 @@ DEF_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, -2147483648, INT32_MIN, INT32_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, 2147483647, INT32_MIN, INT32_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(2, int32_t, uint32_t, 100, INT32_MIN, INT32_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(3, int32_t, uint32_t, -100, INT32_MIN, INT32_MAX)
+DEF_SAT_S_ADD_IMM_FMT_1(4, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
 
 #define T                       int32_t
 #define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect)
@@ -21,6 +22,8 @@ T d[][2] = {
   {   -300,            -200, },
   {    100,               0, },
   {      0,            -100, },
+  {    100,              99, },
+  {      0,              -1, },
 };
 
 int
@@ -38,5 +41,8 @@ main ()
   RUN (3, T, d[6][0], d[6][1]);
   RUN (3, T, d[7][0], d[7][1]);
 
+  RUN (4, T, d[8][0], d[8][1]);
+  RUN (4, T, d[9][0], d[9][1]);
+
   return 0;
 }
similarity index 84%
rename from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-4.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c
index 3dc4f72e6078d7c348d5d4e2ee095b379ab42534..40270ec64c01a957dd175766d993de94ab221f8a 100644 (file)
@@ -7,6 +7,7 @@ DEF_SAT_S_ADD_IMM_FMT_1(0, int64_t, uint64_t, (-9223372036854775807ll - 1), INT6
 DEF_SAT_S_ADD_IMM_FMT_1(1, int64_t, uint64_t, 9223372036854775807ll, INT64_MIN, INT64_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(2, int64_t, uint64_t, 100, INT64_MIN, INT64_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(3, int64_t, uint64_t, -100, INT64_MIN, INT64_MAX)
+DEF_SAT_S_ADD_IMM_FMT_1(4, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
 
 #define T                       int64_t
 #define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect)
@@ -21,6 +22,8 @@ T d[][2] = {
   {     -1,                               99, },
   {      0,                             -100, },
   {    100,                                0, },
+  {      0,                               -1, },
+  {    100,                               99, },
 };
 
 int
@@ -38,5 +41,8 @@ main ()
   RUN (3, T, d[6][0], d[6][1]);
   RUN (3, T, d[7][0], d[7][1]);
 
+  RUN (4, T, d[8][0], d[8][1]);
+  RUN (4, T, d[9][0], d[9][1]);
+
   return 0;
 }
similarity index 84%
rename from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i8.c
index c71b71754cf09108be4a2be9e0c59df7c28d29f0..9efb743b76b515f69df06012599a01dcb9a9dc0f 100644 (file)
@@ -7,6 +7,7 @@ DEF_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, -128, INT8_MIN, INT8_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(1, int8_t, uint8_t, 127, INT8_MIN, INT8_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(2, int8_t, uint8_t, 6, INT8_MIN, INT8_MAX)
 DEF_SAT_S_ADD_IMM_FMT_1(3, int8_t, uint8_t, -6, INT8_MIN, INT8_MAX)
+DEF_SAT_S_ADD_IMM_FMT_1(4, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
 
 #define T                       int8_t
 #define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect)
@@ -21,6 +22,8 @@ T d[][2] = {
   {    -10,       -4, },
   {   -128,     -128, },
   {    127,      121, },
+  {   -128,     -128, },
+  {    1,          0, },
 };
 
 int
@@ -38,5 +41,8 @@ main ()
   RUN (3, T, d[6][0], d[6][1]);
   RUN (3, T, d[7][0], d[7][1]);
 
+  RUN (4, T, d[8][0], d[8][1]);
+  RUN (4, T, d[9][0], d[9][1]);
+
   return 0;
 }