public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH, rs6000] testcase coverage for vec_perm built-ins
@ 2017-08-17 14:40 Will Schmidt
  2017-08-18 23:28 ` Segher Boessenkool
  2017-08-22 20:44 ` [PATCH, rs6000] (v2) Testcase " Will Schmidt
  0 siblings, 2 replies; 4+ messages in thread
From: Will Schmidt @ 2017-08-17 14:40 UTC (permalink / raw)
  To: GCC Patches
  Cc: Segher Boessenkool, Carl E. Love, Bill Schmidt, David Edelsohn

Hi, 
[Patch, rs6000] testcase coverage for vec_perm built-ins

Add some Testcase coverage for the vector permute intrinsics.

Tested across power platforms.  OK for trunk?

Thanks,
-Will

[gcc/testsuite]

2017-08-17  Will Schmidt  <will_schmidt@vnet.ibm.com>

	* gcc.target/powerpc/fold-vec-perm-char.c: New.
	* gcc.target/powerpc/fold-vec-perm-double.c: New.
	* gcc.target/powerpc/fold-vec-perm-float.c: New.
	* gcc.target/powerpc/fold-vec-perm-int.c: New.
	* gcc.target/powerpc/fold-vec-perm-longlong.c: New.
	* gcc.target/powerpc/fold-vec-perm-pixel.c: New.
	* gcc.target/powerpc/fold-vec-perm-short.c: New.

diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-char.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-char.c
new file mode 100644
index 0000000..6ea5c2e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-char.c
@@ -0,0 +1,31 @@
+/* Verify that overloaded built-ins for vec_perm with char
+   inputs produce the right results.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector bool char
+testbc (vector bool char vbc2, vector bool char vbc3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vbc2, vbc3, vuc);
+}
+
+vector signed char
+testsc (vector signed char vsc2, vector signed char vsc3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vsc2, vsc3, vuc);
+}
+
+vector unsigned char
+testuc (vector unsigned char vuc2, vector unsigned char vuc3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vuc2, vuc3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-double.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-double.c
new file mode 100644
index 0000000..1d6f811
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-double.c
@@ -0,0 +1,16 @@
+/* Verify that overloaded built-ins for vec_perm with 
+   double inputs produce the right results.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mvsx -O2" } */
+
+#include <altivec.h>
+
+vector double
+testd (vector double vd2, vector double vd3, vector unsigned char vuc)
+{
+  return vec_perm (vd2, vd3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-float.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-float.c
new file mode 100644
index 0000000..05b555c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-float.c
@@ -0,0 +1,16 @@
+/* Verify that overloaded built-ins for vec_perm with float
+   inputs produce the right results.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector float
+testf (vector float vf2, vector float vf3, vector unsigned char vuc)
+{
+  return vec_perm (vf2, vf3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-int.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-int.c
new file mode 100644
index 0000000..b72bf8f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-int.c
@@ -0,0 +1,31 @@
+/* Verify that overloaded built-ins for vec_perm with int
+   inputs produce the right results.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector bool int
+testbi (vector bool int vbi2, vector bool int vbi3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vbi2, vbi3, vuc);
+}
+
+vector signed int
+testsi (vector signed int vsi2, vector signed int vsi3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vsi2, vsi3, vuc);
+}
+
+vector unsigned int
+testui (vector unsigned int vui2, vector unsigned int vui3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vui2, vui3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-longlong.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-longlong.c
new file mode 100644
index 0000000..cc191b6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-longlong.c
@@ -0,0 +1,31 @@
+/* Verify that overloaded built-ins for vec_perm with long long
+   inputs produce the right results.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-options "-mvsx -O2" } */
+
+#include <altivec.h>
+
+vector bool long long
+testbl (vector bool long long vbl2, vector bool long long vbl3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vbl2, vbl3, vuc);
+}
+
+vector signed long long
+testsl (vector signed long vsl2, vector signed long vsl3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vsl2, vsl3, vuc);
+}
+
+vector unsigned long long
+testul (vector unsigned long long vul2, vector unsigned long long vul3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vul2, vul3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-pixel.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-pixel.c
new file mode 100644
index 0000000..9f5c786
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-pixel.c
@@ -0,0 +1,16 @@
+/* Verify that overloaded built-ins for vec_perm with pixel
+   inputs produce the right results.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mvsx -O2" } */
+
+#include <altivec.h>
+
+vector pixel
+testpx (vector pixel px2, vector pixel px3, vector unsigned char vuc)
+{
+  return vec_perm (px2, px3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-short.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-short.c
new file mode 100644
index 0000000..d517c4e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-short.c
@@ -0,0 +1,29 @@
+/* Verify that overloaded built-ins for vec_perm with short
+   inputs produce the right results.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector bool short
+testbs (vector bool short vbs2, vector bool short vbs3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vbs2, vbs3, vuc);
+}
+
+vector signed short
+testss (vector signed short vss2, vector signed short vss3, vector unsigned char vuc)
+{
+  return vec_perm (vss2, vss3, vuc);
+}
+
+vector unsigned short
+testus (vector unsigned short vus2, vector unsigned short vus3, vector unsigned char vuc)
+{
+  return vec_perm (vus2, vus3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 3 } } */


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH, rs6000] testcase coverage for vec_perm built-ins
  2017-08-17 14:40 [PATCH, rs6000] testcase coverage for vec_perm built-ins Will Schmidt
@ 2017-08-18 23:28 ` Segher Boessenkool
  2017-08-22 20:44 ` [PATCH, rs6000] (v2) Testcase " Will Schmidt
  1 sibling, 0 replies; 4+ messages in thread
From: Segher Boessenkool @ 2017-08-18 23:28 UTC (permalink / raw)
  To: Will Schmidt; +Cc: GCC Patches, Carl E. Love, Bill Schmidt, David Edelsohn

Hi Will,

On Thu, Aug 17, 2017 at 09:19:23AM -0500, Will Schmidt wrote:
> Add some Testcase coverage for the vector permute intrinsics.
> 
> Tested across power platforms.  OK for trunk?

> 	* gcc.target/powerpc/fold-vec-perm-char.c: New.
> 	* gcc.target/powerpc/fold-vec-perm-double.c: New.
> 	* gcc.target/powerpc/fold-vec-perm-float.c: New.
> 	* gcc.target/powerpc/fold-vec-perm-int.c: New.
> 	* gcc.target/powerpc/fold-vec-perm-longlong.c: New.
> 	* gcc.target/powerpc/fold-vec-perm-pixel.c: New.
> 	* gcc.target/powerpc/fold-vec-perm-short.c: New.

> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-double.c
> @@ -0,0 +1,16 @@
> +/* Verify that overloaded built-ins for vec_perm with 
> +   double inputs produce the right results.  */

That suggests it is a run test, but it's not.  s/results/code/ maybe?
(Same in other tests).

> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-float.c
> @@ -0,0 +1,16 @@
> +/* Verify that overloaded built-ins for vec_perm with float
> +   inputs produce the right results.  */
> +
> +/* { dg-do compile } */
> +/* { dg-require-effective-target powerpc_vsx_ok } */
> +/* { dg-options "-maltivec -O2" } */

vsx vs. altivec again.  You probably just need to add a comment what this
is about, or you can use -mvsx instead.

> new file mode 100644
> index 0000000..9f5c786
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-pixel.c
> @@ -0,0 +1,16 @@
> +/* Verify that overloaded built-ins for vec_perm with pixel
> +   inputs produce the right results.  */
> +
> +/* { dg-do compile } */
> +/* { dg-require-effective-target powerpc_vsx_ok } */
> +/* { dg-options "-mvsx -O2" } */

Why vsx for pixel?  It's an altivec thing.


Segher

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH, rs6000] (v2)  Testcase coverage for vec_perm built-ins
  2017-08-17 14:40 [PATCH, rs6000] testcase coverage for vec_perm built-ins Will Schmidt
  2017-08-18 23:28 ` Segher Boessenkool
@ 2017-08-22 20:44 ` Will Schmidt
  2017-08-22 22:44   ` Segher Boessenkool
  1 sibling, 1 reply; 4+ messages in thread
From: Will Schmidt @ 2017-08-22 20:44 UTC (permalink / raw)
  To: GCC Patches
  Cc: Segher Boessenkool, Carl E. Love, Bill Schmidt, David Edelsohn

Hi, 
[PATCH, rs6000] (v2)  Testcase coverage for vec_perm built-ins

Add some Testcase coverage for the vector permute intrinsics.

(v2) Revisited and reworked all of the requires statements
throughout this batch.  Everything specifies -maltivec except
the double and long long tests, which require vsx.

(re-) Tested across power platforms.   OK for trunk?

Thanks,
-Will

   
    [gcc/testsuite]
    
    2017-08-17  Will Schmidt  <will_schmidt@vnet.ibm.com>
    
    	* gcc.target/powerpc/fold-vec-perm-char.c: New.
    	* gcc.target/powerpc/fold-vec-perm-double.c: New.
    	* gcc.target/powerpc/fold-vec-perm-float.c: New.
    	* gcc.target/powerpc/fold-vec-perm-int.c: New.
    	* gcc.target/powerpc/fold-vec-perm-longlong.c: New.
    	* gcc.target/powerpc/fold-vec-perm-pixel.c: New.
    	* gcc.target/powerpc/fold-vec-perm-short.c: New.

diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-char.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-char.c
new file mode 100644
index 0000000..d907eae
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-char.c
@@ -0,0 +1,31 @@
+/* Verify that overloaded built-ins for vec_perm with char
+   inputs produce the right code.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector bool char
+testbc (vector bool char vbc2, vector bool char vbc3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vbc2, vbc3, vuc);
+}
+
+vector signed char
+testsc (vector signed char vsc2, vector signed char vsc3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vsc2, vsc3, vuc);
+}
+
+vector unsigned char
+testuc (vector unsigned char vuc2, vector unsigned char vuc3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vuc2, vuc3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-double.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-double.c
new file mode 100644
index 0000000..7ceca9e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-double.c
@@ -0,0 +1,17 @@
+/* Verify that overloaded built-ins for vec_perm with double
+   inputs produce the right code.  */
+
+/* { dg-do compile } */
+// vector double needs -mvsx.
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mvsx -O2" } */
+
+#include <altivec.h>
+
+vector double
+testd (vector double vd2, vector double vd3, vector unsigned char vuc)
+{
+  return vec_perm (vd2, vd3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-float.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-float.c
new file mode 100644
index 0000000..c9cfb0d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-float.c
@@ -0,0 +1,16 @@
+/* Verify that overloaded built-ins for vec_perm with float
+   inputs produce the right code.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector float
+testf (vector float vf2, vector float vf3, vector unsigned char vuc)
+{
+  return vec_perm (vf2, vf3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-int.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-int.c
new file mode 100644
index 0000000..a2fdc26
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-int.c
@@ -0,0 +1,31 @@
+/* Verify that overloaded built-ins for vec_perm with int
+   inputs produce the right code.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector bool int
+testbi (vector bool int vbi2, vector bool int vbi3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vbi2, vbi3, vuc);
+}
+
+vector signed int
+testsi (vector signed int vsi2, vector signed int vsi3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vsi2, vsi3, vuc);
+}
+
+vector unsigned int
+testui (vector unsigned int vui2, vector unsigned int vui3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vui2, vui3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-longlong.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-longlong.c
new file mode 100644
index 0000000..7f3e574
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-longlong.c
@@ -0,0 +1,32 @@
+/* Verify that overloaded built-ins for vec_perm with long long
+   inputs produce the right code.  */
+
+/* { dg-do compile {target lp64} } */
+// 'long long' in Altivec types is invalid without -mvsx.
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mvsx -O2" } */
+
+#include <altivec.h>
+
+vector bool long long
+testbl (vector bool long long vbl2, vector bool long long vbl3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vbl2, vbl3, vuc);
+}
+
+vector signed long long
+testsl (vector signed long vsl2, vector signed long vsl3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vsl2, vsl3, vuc);
+}
+
+vector unsigned long long
+testul (vector unsigned long long vul2, vector unsigned long long vul3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vul2, vul3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 3 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-pixel.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-pixel.c
new file mode 100644
index 0000000..0d3cb0a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-pixel.c
@@ -0,0 +1,16 @@
+/* Verify that overloaded built-ins for vec_perm with pixel
+   inputs produce the right code.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector pixel
+testpx (vector pixel px2, vector pixel px3, vector unsigned char vuc)
+{
+  return vec_perm (px2, px3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-short.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-short.c
new file mode 100644
index 0000000..de5303a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-perm-short.c
@@ -0,0 +1,29 @@
+/* Verify that overloaded built-ins for vec_perm with short
+   inputs produce the right code.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -O2" } */
+
+#include <altivec.h>
+
+vector bool short
+testbs (vector bool short vbs2, vector bool short vbs3,
+	vector unsigned char vuc)
+{
+  return vec_perm (vbs2, vbs3, vuc);
+}
+
+vector signed short
+testss (vector signed short vss2, vector signed short vss3, vector unsigned char vuc)
+{
+  return vec_perm (vss2, vss3, vuc);
+}
+
+vector unsigned short
+testus (vector unsigned short vus2, vector unsigned short vus3, vector unsigned char vuc)
+{
+  return vec_perm (vus2, vus3, vuc);
+}
+
+/* { dg-final { scan-assembler-times "vperm" 3 } } */


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH, rs6000] (v2)  Testcase coverage for vec_perm built-ins
  2017-08-22 20:44 ` [PATCH, rs6000] (v2) Testcase " Will Schmidt
@ 2017-08-22 22:44   ` Segher Boessenkool
  0 siblings, 0 replies; 4+ messages in thread
From: Segher Boessenkool @ 2017-08-22 22:44 UTC (permalink / raw)
  To: Will Schmidt; +Cc: GCC Patches, Carl E. Love, Bill Schmidt, David Edelsohn

Hi!

On Tue, Aug 22, 2017 at 02:03:03PM -0500, Will Schmidt wrote:
> (v2) Revisited and reworked all of the requires statements
> throughout this batch.  Everything specifies -maltivec except
> the double and long long tests, which require vsx.
> 
> (re-) Tested across power platforms.   OK for trunk?

Looks fine now, thanks!  Okay for trunk.


Segher


>     	* gcc.target/powerpc/fold-vec-perm-char.c: New.
>     	* gcc.target/powerpc/fold-vec-perm-double.c: New.
>     	* gcc.target/powerpc/fold-vec-perm-float.c: New.
>     	* gcc.target/powerpc/fold-vec-perm-int.c: New.
>     	* gcc.target/powerpc/fold-vec-perm-longlong.c: New.
>     	* gcc.target/powerpc/fold-vec-perm-pixel.c: New.
>     	* gcc.target/powerpc/fold-vec-perm-short.c: New.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-08-22 21:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-17 14:40 [PATCH, rs6000] testcase coverage for vec_perm built-ins Will Schmidt
2017-08-18 23:28 ` Segher Boessenkool
2017-08-22 20:44 ` [PATCH, rs6000] (v2) Testcase " Will Schmidt
2017-08-22 22:44   ` Segher Boessenkool

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).