On Thu, Feb 06, 2014 at 06:25:16PM +0100, Jan Hubicka wrote: > > The expr.[ch]/function.h/tree-tailcall.c bits are ok. > > I see your changes clash with my PR60077 fix, does your patch make them > > obsolete and you take care of using proper alignment info? > > If so, at least the two tests from that PR's patch should be added, > > but I can do that as a follow-up. > > Yes, this patch was made to fix gcc.target/i386/pr35767-5.c > by obtaining correct alignment (and also alias) info on the store. > Sorry for making you to duplicate the effort - seems I should have pinged it > earlier.
I've committed the two testcases I had in my patch now. 2014-02-08 Jakub Jelinek <ja...@redhat.com> PR target/60077 * gcc.target/i386/pr60077-1.c: New test. * gcc.target/i386/pr60077-2.c: New test. --- gcc/testsuite/gcc.target/i386/pr60077-1.c.jj 2014-02-06 11:46:56.772700220 +0100 +++ gcc/testsuite/gcc.target/i386/pr60077-1.c 2014-02-06 11:44:52.000000000 +0100 @@ -0,0 +1,18 @@ +/* Test that we generate aligned load when memory is aligned. */ +/* { dg-do compile } */ +/* { dg-options "-O -mavx -mtune=generic" } */ +/* { dg-final { scan-assembler-not "movups" } } */ +/* { dg-final { scan-assembler "movaps" } } */ + +typedef float v8sf __attribute__ ((__vector_size__ (32))); + +extern void foo (v8sf, v8sf, v8sf, v8sf, v8sf, v8sf, v8sf, v8sf, v8sf); + +int +test (void) +{ + v8sf x = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 }; + + foo (x, x, x, x, x, x, x, x, x); + return 0; +} --- gcc/testsuite/gcc.target/i386/pr60077-2.c.jj 2014-02-06 11:46:59.986683676 +0100 +++ gcc/testsuite/gcc.target/i386/pr60077-2.c 2014-02-06 11:45:04.000000000 +0100 @@ -0,0 +1,18 @@ +/* Test that we generate aligned load when memory is aligned. */ +/* { dg-do compile } */ +/* { dg-options "-O -mavx -mtune=generic" } */ +/* { dg-final { scan-assembler-not "movups" } } */ +/* { dg-final { scan-assembler "movaps" } } */ + +typedef float v8sf __attribute__ ((__vector_size__ (32))); + +extern void foo (int, int, int, int, int, int, int, v8sf, v8sf, v8sf, v8sf, v8sf, v8sf, v8sf, v8sf, v8sf); + +int +test (void) +{ + v8sf x = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 }; + + foo (1, 2, 3, 4, 5, 6, 7, x, x, x, x, x, x, x, x, x); + return 0; +} Jakub