Hi! On Wed, Jul 05, 2023 at 05:21:18PM +0530, P Jeevitha wrote: > The following patch has been bootstrapped and regtested on powerpc64le-linux. > > while generating vector pairs of load & store instruction, the src address > was treated as an altivec type and that type of address is invalid for > lxvp and stxvp insns. The solution for this is to avoid altivec type address > for OOmode and XOmode.
The mail message you send should be what will end up in the Git commit message. Your lines are too long for that (and the subject is much too long btw), and the content isn't right either. Maybe something like """ rs6000: Don't allow OOmode or XOmode in AltiVec addresses (PR110411) There are no instructions that do traditional AltiVec addresses (i.e. with the low four bits of the address masked off) for OOmode and XOmode objects. Don't allow those in rs6000_legitimate_address_p. """ > gcc/ > PR target/110411 > * config/rs6000/rs6000.cc (rs6000_legitimate_address_p): Avoid altivec > address for OOmode and XOmde. (XOmode, sp.) Not "avoid", disallow. If you avoid something you still allow it, you just prefer to see something else. > --- a/gcc/config/rs6000/rs6000.cc > +++ b/gcc/config/rs6000/rs6000.cc > @@ -9894,6 +9894,8 @@ rs6000_legitimate_address_p (machine_mode mode, rtx x, > bool reg_ok_strict) > > /* Handle unaligned altivec lvx/stvx type addresses. */ > if (VECTOR_MEM_ALTIVEC_OR_VSX_P (mode) > + && mode != OOmode > + && mode != XOmode > && GET_CODE (x) == AND > && CONST_INT_P (XEXP (x, 1)) > && INTVAL (XEXP (x, 1)) == -16) Why do we need this for OOmode and XOmode here, but not for the other modes that are equally not allowed? That makes no sense. Should you check for anything that is more than a register, for example? If so, do *that*? > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/pr110411.c > @@ -0,0 +1,21 @@ > +/* PR target/110411 */ > +/* { dg-options "-O2 -mdejagnu-cpu=power10 -S -mblock-ops-vector-pair" } */ -S in testcases is wrong. Why do you want this? It is *good* if this is hauled through the assembler as well! If you *really* want this you use "dg-do assemble", but you shouldn't. Segher