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" );
 }


Reply via email to