diff mbox

[rs6000] Don't use vec_all_eq for vector double in Altivec tests

Message ID 1393295445.20991.94.camel@gnopaine
State New
Headers show

Commit Message

Bill Schmidt Feb. 25, 2014, 2:30 a.m. UTC
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  <wschmidt@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.

Comments

David Edelsohn Feb. 25, 2014, 4:27 a.m. UTC | #1
On Mon, Feb 24, 2014 at 9:30 PM, Bill Schmidt
<wschmidt@linux.vnet.ibm.com> wrote:
> 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  <wschmidt@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.

Okay.

Thanks, David
diff mbox

Patch

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