Hi,
on 2024/2/21 01:58, Carl Love wrote:
> GCC maintainers:
>
> The patch changes the vec-cmpne.c from a compile only test to a runnable
> test. The macros to create the functions needed to test the built-ins and
> verify the restults are all there in the include file. The .c file just
> needed to have the macro definitions inserted and change the header from
> compile to run. The test can now do functional verification of the results
> in addition to verifying the expected instructions are generated.
>
> The patch has been tested on Power 10 with no regressions.
>
> Please let me know if this patch is acceptable for mainline. Thanks.
>
> Carl
> ------------------------------------------------------------
> rs6000, make test vec-cmpne.c a runnable test
>
> The macros in vec-cmpne.h define test functions. They also setup
> test value functions, verification functions and execute test functions.
> The test is setup as a compile only test so none of the verification and
> execute functions are being used.
But there is a test gcc/testsuite/gcc.target/powerpc/vec-cmpne-runnable.c
which aims to do the runtime verification.
BR,
Kewen
>
> The patch adds the macro definitions to create the intialization,
> verfiy and execute functions to a main program so not only can the
> test verify the correct instructions are generated but also run the
> tests and verify the results. The test is then changed from a compile
> to a run test.
>
> gcc/testsuite/ChangeLog:
> * gcc.target/powerpc/vec-cmple.c (main): Add main function with
> macro calls to define the test functions, create the verify
> functions and execute functions.
> Update scan-assembler-times (vcmpequ): Updated count to include
> instructions used to generate expected test results.
> * gcc.target/powerpc/vec-cmple.h (vector_tests_##NAME): Remove
> line continuation after closing bracket. Remove extra blank line.
> ---
> gcc/testsuite/gcc.target/powerpc/vec-cmpne.c | 41 +++++++++++++++-----
> gcc/testsuite/gcc.target/powerpc/vec-cmpne.h | 3 +-
> 2 files changed, 32 insertions(+), 12 deletions(-)
>
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-cmpne.c
> b/gcc/testsuite/gcc.target/powerpc/vec-cmpne.c
> index b57e0ac8638..2c369976a44 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-cmpne.c
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-cmpne.c
> @@ -1,20 +1,41 @@
> -/* { dg-do compile } */
> +/* { dg-do run } */
> /* { dg-require-effective-target powerpc_altivec_ok } */
> -/* { dg-options "-maltivec -O2" } */
> +/* { dg-options "-maltivec -O2 -save-temps" } */
>
> /* Test that the vec_cmpne builtin generates the expected Altivec
> instructions. */
>
> #include "vec-cmpne.h"
>
> -define_test_functions (int, signed int, signed int, si);
> -define_test_functions (int, unsigned int, unsigned int, ui);
> -define_test_functions (short, signed short, signed short, ss);
> -define_test_functions (short, unsigned short, unsigned short, us);
> -define_test_functions (char, signed char, signed char, sc);
> -define_test_functions (char, unsigned char, unsigned char, uc);
> -define_test_functions (int, signed int, float, ff);
> +int main ()
> +{
> + define_test_functions (int, signed int, signed int, si);
> + define_test_functions (int, unsigned int, unsigned int, ui);
> + define_test_functions (short, signed short, signed short, ss);
> + define_test_functions (short, unsigned short, unsigned short, us);
> + define_test_functions (char, signed char, signed char, sc);
> + define_test_functions (char, unsigned char, unsigned char, uc);
> + define_test_functions (int, signed int, float, ff);
> +
> + define_init_verify_functions (int, signed int, signed int, si);
> + define_init_verify_functions (int, unsigned int, unsigned int, ui);
> + define_init_verify_functions (short, signed short, signed short, ss);
> + define_init_verify_functions (short, unsigned short, unsigned short, us);
> + define_init_verify_functions (char, signed char, signed char, sc);
> + define_init_verify_functions (char, unsigned char, unsigned char, uc);
> + define_init_verify_functions (int, signed int, float, ff);
> +
> + execute_test_functions (int, signed int, signed int, si);
> + execute_test_functions (int, unsigned int, unsigned int, ui);
> + execute_test_functions (short, signed short, signed short, ss);
> + execute_test_functions (short, unsigned short, unsigned short, us);
> + execute_test_functions (char, signed char, signed char, sc);
> + execute_test_functions (char, unsigned char, unsigned char, uc);
> + execute_test_functions (int, signed int, float, ff);
> +
> + return 0;
> +}
>
> /* { dg-final { scan-assembler-times {\mvcmpequb\M} 2 } } */
> /* { dg-final { scan-assembler-times {\mvcmpequh\M} 2 } } */
> -/* { dg-final { scan-assembler-times {\mvcmpequw\M} 2 } } */
> +/* { dg-final { scan-assembler-times {\mvcmpequw\M} 32 } } */
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-cmpne.h
> b/gcc/testsuite/gcc.target/powerpc/vec-cmpne.h
> index a304de01d86..374cca360b3 100644
> --- a/gcc/testsuite/gcc.target/powerpc/vec-cmpne.h
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-cmpne.h
> @@ -33,7 +33,7 @@ __attribute__((noinline)) void vector_tests_##NAME () \
> tmp_##NAME = vec_cmpne (v1_##NAME, v2_##NAME); \
> vec_vsx_st (tmp_##NAME, 0, &result_ne_##NAME[i]); \
> } \
> -} \
> +}
>
> #define define_init_verify_functions(VBTYPE, RTYPE, STYPE, NAME) \
> __attribute__((noinline)) void init_##NAME () \
> @@ -80,7 +80,6 @@ __attribute__((noinline)) void verify_results_##NAME () \
> } \
> }
>
> -
> #define execute_test_functions(VBTYPE, RTYPE, STYPE, NAME) \
> { \
> init_##NAME (); \