This patch is the same as: https://gcc.gnu.org/ml/gcc-patches/2019-12/msg01504.html
This patch adds some tests to validate the work in patches V12 #1-4 generate the correct code with vec_extract is used with a vector with a PC-relative address and -mcpu=future is used. Can I check this into the trunk? 2020-01-09 Michael Meissner <meiss...@linux.ibm.com> * gcc.target/powerpc/vec-extract-pcrel-si.c: New test for vec_extract from a PC-relative address. * gcc.target/powerpc/vec-extract-pcrel-di.c: New test for vec_extract from a PC-relative address. * gcc.target/powerpc/vec-extract-pcrel-sf.c: New test for vec_extract from a PC-relative address. * gcc.target/powerpc/vec-extract-pcrel-df.c: New test for vec_extract from a PC-relative address. Index: gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-df.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-df.c (revision 280090) +++ gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-df.c (working copy) @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_pcrel } */ +/* { dg-options "-O2 -mdejagnu-cpu=future" } */ + +/* Test if we can support vec_extract on V2DF vectors with a PC-relative + address. */ + +#include <altivec.h> + +#ifndef TYPE +#define TYPE double +#endif + +static vector TYPE v; +vector TYPE *p = &v; + +TYPE +get0 (void) +{ + return vec_extract (v, 0); +} + +TYPE +get1 (void) +{ + return vec_extract (v, 1); +} + +TYPE +getn (unsigned long n) +{ + return vec_extract (v, n); +} + +/* { dg-final { scan-assembler-times {[@]pcrel} 3 } } */ +/* { dg-final { scan-assembler-times {\mplfd\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mpla\M} 1 } } */ Index: gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-di.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-di.c (revision 280090) +++ gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-di.c (working copy) @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_pcrel } */ +/* { dg-options "-O2 -mdejagnu-cpu=future" } */ + +/* Test if we can support vec_extract on V2DI vectors with a PC-relative + address. */ + +#include <altivec.h> + +#ifndef TYPE +#define TYPE unsigned long +#endif + +static vector TYPE v; +vector TYPE *p = &v; + +TYPE +get0 (void) +{ + return vec_extract (v, 0); +} + +TYPE +get1 (void) +{ + return vec_extract (v, 1); +} + +TYPE +getn (unsigned long n) +{ + return vec_extract (v, n); +} + +/* { dg-final { scan-assembler-times {[@]pcrel} 3 } } */ +/* { dg-final { scan-assembler-times {\mpld\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mpla\M} 1 } } */ Index: gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-sf.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-sf.c (revision 280090) +++ gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-sf.c (working copy) @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_pcrel } */ +/* { dg-options "-O2 -mdejagnu-cpu=future" } */ + +/* Test if we can support vec_extract on V4SF vectors with a PC-relative + address. */ + +#include <altivec.h> + +#ifndef TYPE +#define TYPE float +#endif + +static vector TYPE v; +vector TYPE *p = &v; + +TYPE +get0 (void) +{ + return vec_extract (v, 0); +} + +TYPE +get1 (void) +{ + return vec_extract (v, 1); +} + +TYPE +getn (unsigned long n) +{ + return vec_extract (v, n); +} + +/* { dg-final { scan-assembler-times {[@]pcrel} 3 } } */ +/* { dg-final { scan-assembler-times {\mplfs\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mpla\M} 1 } } */ Index: gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-si.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-si.c (revision 280090) +++ gcc/testsuite/gcc.target/powerpc/vec-extract-pcrel-si.c (working copy) @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_pcrel } */ +/* { dg-options "-O2 -mdejagnu-cpu=future" } */ + +/* Test if we can support vec_extract on V4SI vectors with a PC-relative + address. */ + +#include <altivec.h> + +#ifndef TYPE +#define TYPE unsigned int +#endif + +static vector TYPE v; +vector TYPE *p = &v; + +TYPE +get0 (void) +{ + return vec_extract (v, 0); +} + +TYPE +get1 (void) +{ + return vec_extract (v, 1); +} + +TYPE +getn (unsigned long n) +{ + return vec_extract (v, n); +} + +/* { dg-final { scan-assembler-times {[@]pcrel} 3 } } */ +/* { dg-final { scan-assembler-times {\mplwz\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mpla\M} 1 } } */ -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797