Hi, Some of the recently introduced Altivec tests pass for -mcpu=power8, but fail to compile for older processor models. This is because the vec_all_eq interface, when used with vector double arguments, maps to a built-in that is only available on Power8 and later hardware. This patch modifies the tests to avoid using vec_all_eq for vector double arguments.
Bootstrapped and tested on powerpc64-unknown-linux-gnu with -mcpu=power7, and on powerpc64le-unknown-linux-gnu with -mcpu=power8, with no regressions. Is this ok for trunk? David, this should clear up the recent failures on AIX. Thanks, Bill gcc/testsuite: 2014-02-24 Bill Schmidt <wschm...@linux.vnet.ibm.com> * gcc.dg/vmx/ld-vsx.c: Don't use vec_all_eq. * gcc.dg/vmx/ld-vsx-be-order.c: Likewise. * gcc.dg/vmx/ldl-vsx.c: Likewise. * gcc.dg/vmx/ldl-vsx-be-order.c: Likewise. * gcc.dg/vmx/merge-vsx.c: Likewise. * gcc.dg/vmx/merge-vsx-be-order.c: Likewise. Index: gcc/testsuite/gcc.dg/vmx/ldl-vsx-be-order.c =================================================================== --- gcc/testsuite/gcc.dg/vmx/ldl-vsx-be-order.c (revision 208097) +++ gcc/testsuite/gcc.dg/vmx/ldl-vsx-be-order.c (working copy) @@ -29,12 +29,16 @@ static void test () vector unsigned long vul; vector double vd; + unsigned i; init (); vul = vec_ldl (0, (vector unsigned long *)svul); vd = vec_ldl (0, (vector double *)svd); - check (vec_all_eq (vul, evul), "vul"); - check (vec_all_eq (vd, evd ), "vd" ); + for (i = 0; i < 2; ++i) + { + check (vul[i] == evul[i], "vul"); + check (vd[i] == evd[i], "vd" ); + } } Index: gcc/testsuite/gcc.dg/vmx/ld-vsx-be-order.c =================================================================== --- gcc/testsuite/gcc.dg/vmx/ld-vsx-be-order.c (revision 208097) +++ gcc/testsuite/gcc.dg/vmx/ld-vsx-be-order.c (working copy) @@ -29,12 +29,16 @@ static void test () vector unsigned long vul; vector double vd; + unsigned i; init (); vul = vec_ld (0, (vector unsigned long *)svul); vd = vec_ld (0, (vector double *)svd); - check (vec_all_eq (vul, evul), "vul"); - check (vec_all_eq (vd, evd ), "vd" ); + for (i = 0; i < 2; ++i) + { + check (vul[i] == evul[i], "vul"); + check (vd[i] == evd[i], "vd" ); + } } Index: gcc/testsuite/gcc.dg/vmx/ld-vsx.c =================================================================== --- gcc/testsuite/gcc.dg/vmx/ld-vsx.c (revision 208097) +++ gcc/testsuite/gcc.dg/vmx/ld-vsx.c (working copy) @@ -24,12 +24,16 @@ static void test () vector unsigned long vul; vector double vd; + unsigned i; init (); vul = vec_ld (0, (vector unsigned long *)svul); vd = vec_ld (0, (vector double *)svd); - check (vec_all_eq (vul, evul), "vul"); - check (vec_all_eq (vd, evd ), "vd" ); + for (i = 0; i < 2; ++i) + { + check (vul[i] == evul[i], "vul"); + check (vd[i] == evd[i], "vd" ); + } } Index: gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c =================================================================== --- gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c (revision 208097) +++ gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c (working copy) @@ -9,6 +9,11 @@ static int vec_long_eq (vector long x, vector long return (x[0] == y[0] && x[1] == y[1]); } +static int vec_double_eq (vector double x, vector double y) +{ + return (x[0] == y[0] && x[1] == y[1]); +} + static void test() { /* Input vectors. */ @@ -41,6 +46,6 @@ static void test() check (vec_long_eq (vlh, vlrh), "vlh"); check (vec_long_eq (vll, vlrl), "vll"); - check (vec_all_eq (vdh, vdrh), "vdh" ); - check (vec_all_eq (vdl, vdrl), "vdl" ); + check (vec_double_eq (vdh, vdrh), "vdh" ); + check (vec_double_eq (vdl, vdrl), "vdl" ); } Index: gcc/testsuite/gcc.dg/vmx/ldl-vsx.c =================================================================== --- gcc/testsuite/gcc.dg/vmx/ldl-vsx.c (revision 208097) +++ gcc/testsuite/gcc.dg/vmx/ldl-vsx.c (working copy) @@ -24,12 +24,16 @@ static void test () vector unsigned long vul; vector double vd; + unsigned i; init (); vul = vec_ldl (0, (vector unsigned long *)svul); vd = vec_ldl (0, (vector double *)svd); - check (vec_all_eq (vul, evul), "vul"); - check (vec_all_eq (vd, evd ), "vd" ); + for (i = 0; i < 2; ++i) + { + check (vul[i] == evul[i], "vul"); + check (vd[i] == evd[i], "vd" ); + } } Index: gcc/testsuite/gcc.dg/vmx/merge-vsx.c =================================================================== --- gcc/testsuite/gcc.dg/vmx/merge-vsx.c (revision 208097) +++ gcc/testsuite/gcc.dg/vmx/merge-vsx.c (working copy) @@ -9,6 +9,11 @@ static int vec_long_eq (vector long x, vector long return (x[0] == y[0] && x[1] == y[1]); } +static int vec_double_eq (vector double x, vector double y) +{ + return (x[0] == y[0] && x[1] == y[1]); +} + static void test() { /* Input vectors. */ @@ -34,6 +39,6 @@ static void test() check (vec_long_eq (vlh, vlrh), "vlh"); check (vec_long_eq (vll, vlrl), "vll"); - check (vec_all_eq (vdh, vdrh), "vdh" ); - check (vec_all_eq (vdl, vdrl), "vdl" ); + check (vec_double_eq (vdh, vdrh), "vdh" ); + check (vec_double_eq (vdl, vdrl), "vdl" ); }