mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
RISC-V: Add test for vec_duplicate + vwsubu.vv signed combine with GR2VR cost 0, 1 and 15
Add asm dump check and run test for vec_duplicate + vwsubu.vv combine to vwsubu.vx, with the GR2VR cost is 0, 2 and 15. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check for vwsubu.vx. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h: Add test data for run test. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vwsubu-run-1-u64.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com>
This commit is contained in:
@@ -30,3 +30,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-times {vmadd.vx} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */
|
||||
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
|
||||
|
||||
@@ -30,3 +30,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-times {vmadd.vx} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */
|
||||
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
|
||||
|
||||
@@ -33,3 +33,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-times {vmadd.vx} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {vwaddu.vx} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {vwsubu.vx} 1 } } */
|
||||
|
||||
@@ -30,3 +30,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-not {vmadd.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vnmsub.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
|
||||
|
||||
@@ -30,3 +30,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-not {vmadd.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vnmsub.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
|
||||
|
||||
@@ -30,3 +30,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-not {vmadd.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vnmsub.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
|
||||
|
||||
@@ -30,3 +30,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-not {vmadd.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vnmsub.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
|
||||
|
||||
@@ -30,3 +30,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-not {vmadd.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vnmsub.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
|
||||
|
||||
@@ -30,3 +30,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
|
||||
/* { dg-final { scan-assembler-not {vmadd.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vnmsub.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
|
||||
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
/* { dg-do run { target { riscv_v } } } */
|
||||
/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
|
||||
|
||||
#include "vx_widen.h"
|
||||
#include "vx_widen_data.h"
|
||||
|
||||
#define WT uint64_t
|
||||
#define NT uint32_t
|
||||
#define NAME sub
|
||||
#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME)
|
||||
#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME)
|
||||
|
||||
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, NAME)
|
||||
|
||||
#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \
|
||||
RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, N)
|
||||
|
||||
#include "vx_widen_vx_run.h"
|
||||
@@ -28,7 +28,8 @@ test_vx_widen_binary_##NAME##_##WT##_##NT##_case_0 (WT * restrict vd, \
|
||||
#define RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \
|
||||
RUN_VX_WIDEN_BINARY_CASE_0(WT, NT, NAME, vd, vs2, rs1, n)
|
||||
|
||||
#define TEST_WIDEN_BINARY_VX_UNSIGNED(WT, NT) \
|
||||
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, +, add)
|
||||
#define TEST_WIDEN_BINARY_VX_UNSIGNED(WT, NT) \
|
||||
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, +, add) \
|
||||
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, sub)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
DEF_BINARY_WIDEN_STRUCT_0(WT, NT, NAME)
|
||||
|
||||
DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, add)
|
||||
DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, sub)
|
||||
|
||||
DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, add)[] = {
|
||||
{
|
||||
@@ -76,4 +77,43 @@ DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, add)[] = {
|
||||
},
|
||||
};
|
||||
|
||||
DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, sub)[] = {
|
||||
{
|
||||
/* vs2 */
|
||||
{
|
||||
2147483648, 2147483648, 2147483648, 2147483648,
|
||||
2147483647, 2147483647, 2147483647, 2147483647,
|
||||
4294967294, 4294967294, 4294967294, 4294967294,
|
||||
4294967295, 4294967295, 4294967295, 4294967295,
|
||||
},
|
||||
/* rs1 */
|
||||
2147483647,
|
||||
/* expect */
|
||||
{
|
||||
1, 1, 1, 1,
|
||||
0, 0, 0, 0,
|
||||
2147483647, 2147483647, 2147483647, 2147483647,
|
||||
2147483648, 2147483648, 2147483648, 2147483648,
|
||||
},
|
||||
},
|
||||
{
|
||||
/* vs2 */
|
||||
{
|
||||
4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull,
|
||||
4294967294ull, 4294967294ull, 4294967294ull, 4294967294ull,
|
||||
1, 1, 1, 1,
|
||||
0, 0, 0, 0,
|
||||
},
|
||||
/* rs1 */
|
||||
4294967295,
|
||||
/* expect */
|
||||
{
|
||||
0, 0, 0, 0,
|
||||
18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull,
|
||||
18446744069414584322ull, 18446744069414584322ull, 18446744069414584322ull, 18446744069414584322ull,
|
||||
18446744069414584321ull, 18446744069414584321ull, 18446744069414584321ull, 18446744069414584321ull,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user