On Fri, Oct 23, 2020 at 01:22:31PM -0500, Segher Boessenkool wrote:
> On Fri, Oct 23, 2020 at 04:45:29PM +1030, Alan Modra wrote:
> > Revised patch, removing changes to
> > gcc.target/powerpc/fold-vec-st-double.c,
> > gcc.target/powerpc/fold-vec-st-longlong.c,
> > gcc.target/powerpc/fold-vec-st-pixel.c. Fixing fails on those three
> > tests will be the subject of another patch.
>
> Okido.
>
> > Most of these changes are fairly obvious. Duplicated setbcr in
> > +/* { dg-final { scan-assembler-times {\maddic\M|\msetbcr\M} 4 } } */
> > +/* { dg-final { scan-assembler-times {\msubfe\M|\msetbcr\M} 1 } } */
> > is due to addic;subfe being replaced in one function with setbcr.
>
> But that won't really work. If there is more than one addic replaced by
> setbcr, that second scan fails (because it matches at least two times
> then).
Sure it works. I did test the patch! If future code gen changes, the
test will need updating at that point. scan-assembler tests require
maintenance..
> > * gcc.dg/pr56727-2.c,
> ...
> > * gcc.target/powerpc/ppc-eq0-1.c,
> > * gcc.target/powerpc/ppc-ne0-1.c,
> > * gcc.target/powerpc/pr86731-fwrapv-longlong.c: Match power10 insns.
>
> This should all be behind only one "*" (so delete it on all but the
> first line here).
Huh, ok.
> > --- a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c
> > +++ b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c
> > @@ -25,6 +25,6 @@ main1 (void)
> > with no word loads (lw, lwu, lwz, lwzu, or their indexed forms)
> > or word stores (stw, stwu, stwx, stwux, or their indexed forms). */
> >
> > -/* { dg-final { scan-assembler "\t(lvx|lxv|lvsr|stxv)" } } */
> > +/* { dg-final { scan-assembler "\t(lvx|lxv|lvsr|stxv|plxv|pstxv)" } } */
>
> /* { dg-final { scan-assembler "\t(lvx|p?lxv|lvsr|p?stxv)" } } */
> might be more readable/maintainable/extensible?
OK.
> > --- a/gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-char.c
> > +++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-char.c
> > @@ -36,4 +36,4 @@ BUILD_VAR_TEST( test10, vector unsigned char, signed long
> > long, vector unsigned
> > BUILD_VAR_TEST( test11, vector unsigned char, signed int, vector unsigned
> > char);
> > BUILD_CST_TEST( test12, vector unsigned char, 8, vector unsigned char);
> >
> > -/* { dg-final { scan-assembler-times
> > {\mlxvw4x\M|\mlxvd2x\M|\mlxvx\M|\mlvx\M} 12 } } */
> > +/* { dg-final { scan-assembler-times
> > {\mlxvw4x\M|\mlxvd2x\M|\mlxvx\M|\mlvx\M|\mplxv\M} 12 } } */
>
> Here, it did not allow lxv before. Should it?
>
> (in many files)
We don't generate lxv due to the insn only supporting DQ offsets. For
example, on power9 test3_cst from this test is
li 9,2
lxvx 34,3,9
blr
On power10
plxv 34,2(3)
blr
> Have you verified the p10 code generation actually makes sense?
Yes, I did.
> > --- a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
> > +++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
> > @@ -25,7 +25,7 @@ vector signed long long test_sll () { const vector signed
> > long long y = {34, 45}
> > vector unsigned long long test_ull () { const vector unsigned long long y
> > = {56, 67}; return vec_splat (y, 0b00010); }
> >
> > /* Assorted load instructions for the initialization with known constants.
> > */
> > -/* { dg-final { scan-assembler-times {\mlvx\M|\mlxvd2x\M|\mlxv\M} 3 } } */
> > +/* { dg-final { scan-assembler-times
> > {\mlvx\M|\mlxvd2x\M|\mlxv\M|\mplxv\M|\mplxv\M} 3 } } */
>
> You have plxv twice here.
Oops.
> > --- a/gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-char.c
> > +++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-char.c
> > @@ -36,4 +36,4 @@ BUILD_VAR_TEST( test10, vector unsigned char, signed
> > long long, vector unsigned
> > BUILD_VAR_TEST( test11, vector unsigned char, signed int, vector unsigned
> > char );
> > BUILD_CST_TEST( test12, vector unsigned char, 12, vector unsigned char );
> >
> > -/* { dg-final { scan-assembler-times
> > {\mstxvw4x\M|\mstxvd2x\M|\mstxvx\M|\mstvx\M} 12 } } */
> > +/* { dg-final { scan-assembler-times
> > {\mstxvw4x\M|\mstxvd2x\M|\mstxvx\M|\mstvx\M|\mpstxv\M} 12 } } */
>
> Similarly, should it have plain stxv as well?
No. Same reason as to why lxv isn't generated.
> > --- a/gcc/testsuite/gcc.target/powerpc/lvsl-lvsr.c
> > +++ b/gcc/testsuite/gcc.target/powerpc/lvsl-lvsr.c
> > @@ -1,12 +1,10 @@
> > -/* Test expected code generation for lvsl and lvsr on little endian.
> > - Note that lvsl and lvsr are each produced once, but the filename
> > - causes them to appear twice in the file. */
> > +/* Test expected code generation for lvsl and lvsr on little endian. */
> >
> > /* { dg-do compile { target { powerpc64le-*-* } } } */
> > /* { dg-options "-O0 -Wno-deprecated" } */
> > -/* { dg-final { scan-assembler-times "lvsl" 2 } } */
> > -/* { dg-final { scan-assembler-times "lvsr" 2 } } */
> > -/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mlxv\M} 2 } } */
> > +/* { dg-final { scan-assembler-times {\slvsl\s} 1 } } */
> > +/* { dg-final { scan-assembler-times {\slvsr\s} 1 } } */
>
> This could use a comment (we normally use \m \M).
Seriously? That's about as useful as "i++; /* increment i */"
> Better is to just rename the file, of course :-)
I thought of that, but I'm not doing it.
> > +/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mlxv\M|\mplxv\M} 2 } } */
>
> \mp?lxv\M
Yeah, I'll change all of those.
> > --- a/gcc/testsuite/gcc.target/powerpc/ppc-ne0-1.c
> > +++ b/gcc/testsuite/gcc.target/powerpc/ppc-ne0-1.c
> > @@ -2,9 +2,9 @@
> > /* { dg-do compile } */
> > /* { dg-options "-O2 -mno-isel" } */
> >
> > -/* { dg-final { scan-assembler-times "addic" 4 } } */
> > -/* { dg-final { scan-assembler-times "subfe" 1 } } */
> > -/* { dg-final { scan-assembler-times "addze" 3 } } */
> > +/* { dg-final { scan-assembler-times {\maddic\M|\msetbcr\M} 4 } } */
> > +/* { dg-final { scan-assembler-times {\msubfe\M|\msetbcr\M} 1 } } */
> > +/* { dg-final { scan-assembler-times {\maddze\M} 3 } } */
>
> So this one won't work like this.
But it does.
--
Alan Modra
Australia Development Lab, IBM