[PATCH] Fix vec-splati-runnable.c test. I noticed that the vec-splati-runnable.c did not have an abort after one of the tests. If the test was run with optimization, the optimizer could delete some of the tests and throw off the count.
I have bootstraped this on LE power9 and BE power8 systems. There were no regressions in the tests. Can I check this into the trunk? I do not expect to back port this to GCC 11 unless we will be back porting the future patches that add support for the XXSPLITW, XXSPLTIDP, and XXSPLTI32DX instructions. gcc/testsuite/ 2021-05-18 Michael Meissner <meiss...@linux.ibm.com> * gcc.target/powerpc/vec-splati-runnable.c: Run test with -O2 optimization. Do not check what XXSPLTIDP generates if the value is undefined. --- .../gcc.target/powerpc/vec-splati-runnable.c | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/gcc/testsuite/gcc.target/powerpc/vec-splati-runnable.c b/gcc/testsuite/gcc.target/powerpc/vec-splati-runnable.c index e84ce77a21d..a135279b1d7 100644 --- a/gcc/testsuite/gcc.target/powerpc/vec-splati-runnable.c +++ b/gcc/testsuite/gcc.target/powerpc/vec-splati-runnable.c @@ -1,7 +1,7 @@ /* { dg-do run { target { power10_hw } } } */ /* { dg-do link { target { ! power10_hw } } } */ /* { dg-require-effective-target power10_ok } */ -/* { dg-options "-mdejagnu-cpu=power10 -save-temps" } */ +/* { dg-options "-mdejagnu-cpu=power10 -save-temps -O2" } */ #include <altivec.h> #define DEBUG 0 @@ -12,6 +12,8 @@ extern void abort (void); +volatile vector double vresult_d_undefined; + int main (int argc, char *argv []) { @@ -85,25 +87,12 @@ main (int argc, char *argv []) #endif } - /* This test will generate a "note" to the user that the argument - is subnormal. It is not an error, but results are not defined. */ - vresult_d = (vector double) { 2.0, 3.0 }; - expected_vresult_d = (vector double) { 6.6E-42f, 6.6E-42f }; - - vresult_d = vec_splatid (6.6E-42f); - - /* Although the instruction says the results are not defined, it does seem - to work, at least on Mambo. But no guarentees! */ - if (!vec_all_eq (vresult_d, expected_vresult_d)) { -#if DEBUG - printf("ERROR, vec_splati (6.6E-42f)\n"); - for(i = 0; i < 2; i++) - printf(" vresult_d[%i] = %e, expected_vresult_d[%i] = %e\n", - i, vresult_d[i], i, expected_vresult_d[i]); -#else - ; -#endif - } + /* This test will generate a "note" to the user that the argument is + subnormal. It is not an error, but results are not defined. Because this + is undefined, we cannot check that any value is correct. Just store it in + a volatile variable so the XXSPLTIDP instruction gets generated and the + warning message printed. */ + vresult_d_undefined = vec_splatid (6.6E-42f); /* Vector splat immediate */ vsrc_a_int = (vector int) { 2, 3, 4, 5 }; -- 2.31.1 -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797