Message ID | dbf067d7-b7c6-4495-999e-e3adfd184de8@linux.ibm.com |
---|---|
State | New |
Headers | show |
Series | PATCH 11/11] rs6000, make test vec-cmpne.c a runnable test | expand |
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 (); \
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 (); \