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 (); \