On 9/4/19 2:53 PM, Richard Earnshaw (lists) wrote: > On 15/08/2019 20:47, Bernd Edlinger wrote: >> On 8/15/19 6:29 PM, Richard Biener wrote: >>>>> >>>>> Please split it into the parts for the PR and parts making the >>>>> asserts not trigger. >>>>> >>>> >>>> Yes, will do. >>>> >> >> Okay, here is the rest of the PR 89544 fix, >> actually just an optimization, making the larger stack alignment >> known to the middle-end, and the test cases. >> >> >> Boot-strapped and reg-tested on x86_64-pc-linux-gnu and arm-linux-gnueabihf. >> Is it OK for trunk? >> >> >> Thanks >> Bernd. >> > > Index: gcc/testsuite/gcc.target/arm/unaligned-argument-2.c > =================================================================== > --- gcc/testsuite/gcc.target/arm/unaligned-argument-2.c (Revision 0) > +++ gcc/testsuite/gcc.target/arm/unaligned-argument-2.c (Arbeitskopie) > @@ -0,0 +1,19 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target arm_arm_ok } */ > +/* { dg-require-effective-target arm_ldrd_strd_ok } */ > +/* { dg-options "-marm -mno-unaligned-access -O3" } */ > + > +struct s { > + int a, b; > +} __attribute__((aligned(8))); > + > +struct s f0; > + > +void f(int a, int b, int c, int d, int e, struct s f) > +{ > + f0 = f; > +} > + > +/* { dg-final { scan-assembler-times "ldrd" 0 } } */ > +/* { dg-final { scan-assembler-times "strd" 0 } } */ > +/* { dg-final { scan-assembler-times "stm" 1 } } */ > > I don't think this test is right. While we can't use an LDRD to load the > argument off the stack, there's nothing wrong with using an STRD to then > store the value to f0 (as that is 8-byte aligned). So the second and third > scan-assembler tests are meaningless. >
Ah, that is very similar to the unaligned-memcpy-2/3.c, see https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00157.html initially that is a movdi, then in subreg1 it is split in two movsi which is then re-assembled as ldm Not sure if that is intended in that way. Bernd.