On Tue, 2021-05-18 at 16:49 -0400, Michael Meissner wrote: > [PATCH] Fix vec-splati-runnable.c test. >
hi, > 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 as in undefined-behavior..? > + a volatile variable so the XXSPLTIDP instruction gets generated and the > + warning message printed. */ > + vresult_d_undefined = vec_splatid (6.6E-42f); This does not look like it adds an abort() call as I would have expected per the patch description. So this looks like it still calls vec_splatid(), but instead assigns result to a variable name vresult_d_undefined. Also removes some DEBUG code, which is fine. So just the vec_all_eq() call is removed? I'm not certain I see how that will change the results, just the -O2 optimization makes the difference? I may be missing something... Thanks, -Will > > /* Vector splat immediate */ > vsrc_a_int = (vector int) { 2, 3, 4, 5 }; > -- > 2.31.1 >