[PATCH][RFC] Add x86 subadd SLP pattern

Richard Biener rguenther@suse.de
Fri Jun 25 06:48:21 GMT 2021


On Thu, 24 Jun 2021, Uros Bizjak wrote:

> On Thu, Jun 24, 2021 at 1:07 PM Richard Biener <rguenther@suse.de> wrote:
> 
> > This addds SLP pattern recognition for the SSE3/AVX [v]addsubp{ds} v0, v1
> > instructions which compute { v0[0] - v1[0], v0[1], + v1[1], ... }
> > thus subtract, add alternating on lanes, starting with subtract.
> >
> > It adds a corresponding optab and direct internal function,
> > vec_addsub$a3 and renames the existing i386 backend patterns to
> > the new canonical name.
> >
> > The SLP pattern matches the exact alternating lane sequence rather
> > than trying to be clever and anticipating incoming permutes - we
> > could permute the two input vectors to the needed lane alternation,
> > do the addsub and then permute the result vector back but that's
> > only profitable in case the two input or the output permute will
> > vanish - something Tamars refactoring of SLP pattern recog should
> > make possible.
> 
> Using the attached patch, I was also able to generate addsub for the
> following testcase:
> 
> float x[2], y[2], z[2];
> 
> void foo ()
> {
>   x[0] = y[0] - z[0];
>   x[1] = y[1] + z[1];
> }
> 
>        vmovq   y(%rip), %xmm0
>        vmovq   z(%rip), %xmm1
>        vaddsubps       %xmm1, %xmm0, %xmm0
>        vmovlps %xmm0, x(%rip)
>        ret

Nice.  But I suppose it can be merged with the other now single
pattern?

Richard.


More information about the Gcc-patches mailing list