Hi, This patch is just add test cases, and tested on ppc64{,le}.
With previous patches on this serial passed, Bootstrap and regtest passed on ppc64{,le} and x86_64. Is this ok for trunk? BR, Jeff (Jiufu) PR target/65421 gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr65421-1.c: New test. * gcc.target/powerpc/pr65421.c: New test. --- gcc/testsuite/gcc.target/powerpc/pr65421-1.c | 25 ++++++++++++++++++++ gcc/testsuite/gcc.target/powerpc/pr65421.c | 22 +++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr65421-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/pr65421.c diff --git a/gcc/testsuite/gcc.target/powerpc/pr65421-1.c b/gcc/testsuite/gcc.target/powerpc/pr65421-1.c new file mode 100644 index 00000000000..a5ea675008e --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr65421-1.c @@ -0,0 +1,25 @@ +/* PR target/65421 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-require-effective-target powerpc_elfv2 } */ + +typedef struct SA +{ + double a[3]; + long l; +} A; + +/* 2 vec load, 2 vec store. */ +A ret_arg_pt (A *a){return *a;} + +/* 4 std */ +A ret_arg (A a) {return a;} + +/* 4 std */ +void st_arg (A a, A *p) {*p = a;} + +/* { dg-final { scan-assembler-times {\mlxvd2x\M|\mlxv\M|\mlvx\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mstxvd2x\M|\mstxv\M|\mstvx\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mstd\M} 8 } } */ + + diff --git a/gcc/testsuite/gcc.target/powerpc/pr65421.c b/gcc/testsuite/gcc.target/powerpc/pr65421.c new file mode 100644 index 00000000000..27f69e24e29 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr65421.c @@ -0,0 +1,22 @@ +/* PR target/65421 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-require-effective-target powerpc_elfv2 } */ + +typedef struct SA +{ + double a[3]; +} A; + +/* 3 lfd */ +A ret_arg_pt (A *a){return *a;} + +/* blr */ +A ret_arg (A a) {return a;} + +/* 3 stfd */ +void st_arg (A a, A *p) {*p = a;} + +/* { dg-final { scan-assembler-times {\mlfd\M} 3 } } */ +/* { dg-final { scan-assembler-times {\mstfd\M} 3 } } */ +/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 9 } } */ -- 2.17.1