public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] rs6000: Add missing prototypes for vec_ld/vec_st
@ 2019-01-16 14:09 Kewen.Lin
  2019-01-16 17:08 ` Segher Boessenkool
  2019-01-18 22:15 ` Jakub Jelinek
  0 siblings, 2 replies; 6+ messages in thread
From: Kewen.Lin @ 2019-01-16 14:09 UTC (permalink / raw)
  To: gcc-patches; +Cc: segher, Bill Schmidt

Hi,

On target rs6000, for all types, use of vec_ld/vec_st historically permits the dereferenced pointer to be of a scalar type or the corresponding vector type. But for vector unsigned/signed long long and double, we have an omission in our table for vec_ld/vec_st. 

Ok for trunk, and eventual backport to GCC 7 and 8 aftersome burn-in time?

---
Changelog:

gcc/ChangeLog

2019-01-16  Kewen Lin  <linkw@gcc.gnu.org>

	* doc/extend.texi: Add four new prototypes for vec_ld and seven new
	prototypes for vec_st.
	* config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add entries
	for scalar address type variants of altivec_vec_ld/altivec_vec_st,
	mainly on signed/unsigned long long and double.

gcc/testsuite/ChangeLog

2019-01-16  Kewen Lin  <linkw@gcc.gnu.org>

	* gcc.target/powerpc/altivec_vld_vst_addr.c: New test.


Index: gcc/config/rs6000/rs6000-c.c
===================================================================
--- gcc/config/rs6000/rs6000-c.c        (revision 267912)
+++ gcc/config/rs6000/rs6000-c.c        (working copy)
@@ -1531,12 +1531,19 @@ const struct altivec_builtin_types altivec_overloa

   { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DF,
     RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
+  { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DF,
+    RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double, 0 },
   { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
     RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
+    RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_long_long, 0 },
+  { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
     RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
     ~RS6000_BTI_unsigned_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
+    ~RS6000_BTI_unsigned_long_long, 0 },
+  { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
     RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V4SF,
     RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF, 0 },
@@ -3737,14 +3744,27 @@ const struct altivec_builtin_types altivec_overloa

   { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DF,
     RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF },
+  { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DF,
+    RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double },
   { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
     RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI },
   { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
+    RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_long_long },
+  { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
     RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
     ~RS6000_BTI_unsigned_V2DI },
   { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
+    RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
+    ~RS6000_BTI_unsigned_long_long },
+  { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
     RS6000_BTI_void, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI,
     ~RS6000_BTI_bool_V2DI },
+  { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
+    RS6000_BTI_void, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI,
+    ~RS6000_BTI_long_long },
+  { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V2DI,
+    RS6000_BTI_void, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI,
+    ~RS6000_BTI_unsigned_long_long },
   { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SF,
     RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF },
   { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX_V4SF,
Index: gcc/doc/extend.texi
===================================================================
--- gcc/doc/extend.texi (revision 267912)
+++ gcc/doc/extend.texi (working copy)
@@ -18451,6 +18451,10 @@ vector double vec_div (vector double, vector doubl
 vector long vec_div (vector long, vector long);
 vector unsigned long vec_div (vector unsigned long, vector unsigned long);
 vector double vec_floor (vector double);
+vector signed long long vec_ld (int, const vector signed long long *);
+vector signed long long vec_ld (int, const signed long long *);
+vector unsigned long long vec_ld (int, const vector unsigned long long *);
+vector unsigned long long vec_ld (int, const unsigned long long *);
 vector __int128 vec_ld (int, const vector __int128 *);
 vector unsigned __int128 vec_ld (int, const vector unsigned __int128 *);
 vector __int128 vec_ld (int, const __int128 *);
@@ -18529,6 +18533,13 @@ vector signed long vec_splats (signed long);
 vector unsigned long vec_splats (unsigned long);
 vector float vec_sqrt (vector float);
 vector double vec_sqrt (vector double);
+void vec_st (vector signed long long, int, vector signed long long *);
+void vec_st (vector signed long long, int, signed long long *);
+void vec_st (vector unsigned long long, int, vector unsigned long long *);
+void vec_st (vector unsigned long long, int, unsigned long long *);
+void vec_st (vector bool long long, int, vector bool long long *);
+void vec_st (vector bool long long, int, signed long long *);
+void vec_st (vector bool long long, int, unsigned long long *);
 void vec_st (vector double, int, vector double *);
 void vec_st (vector double, int, double *);
 vector double vec_sub (vector double, vector double);
Index: gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c     (nonexistent)
+++ gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c     (working copy)
@@ -0,0 +1,257 @@
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec" } */
+
+/* Test vec_ld and vec_st can support both scalar and vector
+   type address points, the list is:
+     - address of vector unsigned char/short/int/long long
+     - address of vector signed char/short/int/long long
+     - address of vector double/float
+     - address of unsigned char/short/int/long long
+     - address of signed char/short/int/long long
+     - address of double/float */
+#include <altivec.h>
+
+/* Test vec_ld can allow scalar and vector type address. */
+vector unsigned char
+test_vld_scalar_uc (const unsigned char *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned short
+test_vld_scalar_us (const unsigned short *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned int
+test_vld_scalar_ui (const unsigned int *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned long long
+test_vld_scalar_ul (const unsigned long long *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed char
+test_vld_scalar_sc (const signed char *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed short
+test_vld_scalar_ss (const signed short *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed int
+test_vld_scalar_si (const signed int *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed long long
+test_vld_scalar_sl (const signed long long *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned char
+test_vld_vector_uc (const vector unsigned char *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned short
+test_vld_vector_us (const vector unsigned short *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned int
+test_vld_vector_ui (const vector unsigned int *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned long long
+test_vld_vector_ul (const vector unsigned long long *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed char
+test_vld_vector_sc (const vector signed char *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed short
+test_vld_vector_ss (const vector signed short *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed int
+test_vld_vector_si (const vector signed int *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed long long
+test_vld_vector_sl (const vector signed long long *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector float
+test_vld_scalar_f (const float *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector double
+test_vld_scalar_d (const double *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector float
+test_vld_vector_f (const vector float *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector double
+test_vld_vector_d (const vector double *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+/* Test vec_st can allow scalar and vector type address. */
+
+void
+test_vst_scalar_uc (vector unsigned char v, unsigned char *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_us (vector unsigned short v, unsigned short *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_ui (vector unsigned int v, unsigned int *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_ul (vector unsigned long long v, unsigned long long *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_sc (vector signed char v, signed char *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_ss (vector signed short v, signed short *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_si (vector signed int v, signed int *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_sl (vector signed long long v, signed long long *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_uc (vector unsigned char v, vector unsigned char *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_us (vector unsigned short v, vector unsigned short *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_ui (vector unsigned int v, vector unsigned int *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_ul (vector unsigned long long v,
+                   vector unsigned long long *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_sc (vector signed char v, vector signed char *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_ss (vector signed short v, vector signed short *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_si (vector signed int v, vector signed int *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_sl (vector signed long long v, vector signed long long *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_f (vector float v, float *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_f (vector float v, vector float *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_d (vector double v, double *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_d (vector double v, vector double *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+

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

* Re: [PATCH] rs6000: Add missing prototypes for vec_ld/vec_st
  2019-01-16 14:09 [PATCH] rs6000: Add missing prototypes for vec_ld/vec_st Kewen.Lin
@ 2019-01-16 17:08 ` Segher Boessenkool
  2019-01-18 22:15 ` Jakub Jelinek
  1 sibling, 0 replies; 6+ messages in thread
From: Segher Boessenkool @ 2019-01-16 17:08 UTC (permalink / raw)
  To: Kewen.Lin; +Cc: gcc-patches, Bill Schmidt

Hi Kewen,

On Wed, Jan 16, 2019 at 10:08:46PM +0800, Kewen.Lin wrote:
> On target rs6000, for all types, use of vec_ld/vec_st historically permits the dereferenced pointer to be of a scalar type or the corresponding vector type. But for vector unsigned/signed long long and double, we have an omission in our table for vec_ld/vec_st. 
> 
> Ok for trunk, and eventual backport to GCC 7 and 8 aftersome burn-in time?

This looks fine, thanks!  Okay for trunk.  Also okay for 8 and 7 (do the
backports in that order please) after a week or so.


Segher


> 2019-01-16  Kewen Lin  <linkw@gcc.gnu.org>
> 
> 	* doc/extend.texi: Add four new prototypes for vec_ld and seven new
> 	prototypes for vec_st.
> 	* config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add entries
> 	for scalar address type variants of altivec_vec_ld/altivec_vec_st,
> 	mainly on signed/unsigned long long and double.
> 
> gcc/testsuite/ChangeLog
> 
> 2019-01-16  Kewen Lin  <linkw@gcc.gnu.org>
> 
> 	* gcc.target/powerpc/altivec_vld_vst_addr.c: New test.

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

* Re: [PATCH] rs6000: Add missing prototypes for vec_ld/vec_st
  2019-01-16 14:09 [PATCH] rs6000: Add missing prototypes for vec_ld/vec_st Kewen.Lin
  2019-01-16 17:08 ` Segher Boessenkool
@ 2019-01-18 22:15 ` Jakub Jelinek
  2019-01-19  1:05   ` Segher Boessenkool
  1 sibling, 1 reply; 6+ messages in thread
From: Jakub Jelinek @ 2019-01-18 22:15 UTC (permalink / raw)
  To: Kewen.Lin; +Cc: gcc-patches, segher, Bill Schmidt

On Wed, Jan 16, 2019 at 10:08:46PM +0800, Kewen.Lin wrote:
> 	* gcc.target/powerpc/altivec_vld_vst_addr.c: New test.

This test fails on powerpc64-linux, both with -m32 and -m64:

/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:35:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:59:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:83:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:107:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:117:7: error: expected ';' before 'double'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:120:10: error: incompatible types when returning type '__vector double' {aka '__vector(2) double'} but 'double' was expected
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:129:7: error: expected ';' before 'double'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:130:26: warning: type defaults to 'int' in declaration of 'vector' [-Wimplicit-int]
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:130:33: error: expected ';', ',' or ')' before 'double'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:156:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:180:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:204:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:205:7: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:229:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:229:1: error: use of 'long long' in AltiVec types is invalid without '-mvsx'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:247:20: error: unknown type name 'vector'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:253:20: error: unknown type name 'vector'
/.../gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c:253:37: error: unknown type name 'vector'

	Jakub

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

* Re: [PATCH] rs6000: Add missing prototypes for vec_ld/vec_st
  2019-01-18 22:15 ` Jakub Jelinek
@ 2019-01-19  1:05   ` Segher Boessenkool
  2019-01-19 13:27     ` [PATCH v2] " Kewen.Lin
  0 siblings, 1 reply; 6+ messages in thread
From: Segher Boessenkool @ 2019-01-19  1:05 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Kewen.Lin, gcc-patches, Bill Schmidt

On Fri, Jan 18, 2019 at 11:15:12PM +0100, Jakub Jelinek wrote:
> On Wed, Jan 16, 2019 at 10:08:46PM +0800, Kewen.Lin wrote:
> > 	* gcc.target/powerpc/altivec_vld_vst_addr.c: New test.
> 
> This test fails on powerpc64-linux, both with -m32 and -m64:

I missed that.  Thanks Jakub.

Kewen, please split the "vector long long" tests to a separate testcase,
and use -mvsx and powerpc_vsx_ok there (instead of -maltivec and
powerpc_altivec_ok).


Segher

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

* [PATCH v2] rs6000: Add missing prototypes for vec_ld/vec_st
  2019-01-19  1:05   ` Segher Boessenkool
@ 2019-01-19 13:27     ` Kewen.Lin
  2019-01-19 22:23       ` Segher Boessenkool
  0 siblings, 1 reply; 6+ messages in thread
From: Kewen.Lin @ 2019-01-19 13:27 UTC (permalink / raw)
  To: Segher Boessenkool, Jakub Jelinek; +Cc: gcc-patches, Bill Schmidt

Hi Jakub,

Thanks for catching!

Hi Segher,

Thanks for your suggestion, I just had a testing on BE machine and found the vector double related codes also need to be separated to vsx case. The case has been updated as below, is it OK for trunk? 

Thanks for your time in advance!


gcc/testsuite/ChangeLog:

2019-01-19  Kewen Lin  <linkw@gcc.gnu.org>

	* gcc.target/powerpc/altivec_vld_vst_addr.c: Remove.
	* gcc.target/powerpc/altivec_vld_vst_addr-1.c: New test.
	* gcc.target/powerpc/altivec_vld_vst_addr-2.c: Ditto.

---
 .../gcc.target/powerpc/altivec_vld_vst_addr-1.c    | 184 +++++++++++++++
 .../gcc.target/powerpc/altivec_vld_vst_addr-2.c    |  92 ++++++++
 .../gcc.target/powerpc/altivec_vld_vst_addr.c      | 257 ---------------------
 3 files changed, 276 insertions(+), 257 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr-1.c
 create mode 100644 gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr-2.c
 delete mode 100644 gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c

diff --git a/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr-1.c b/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr-1.c
new file mode 100644
index 0000000..eb6d1eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr-1.c
@@ -0,0 +1,184 @@
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec" } */
+
+/* Test vec_ld and vec_st can support both scalar and vector
+   type address points, the list is:
+     - address of unsigned char/short/int
+     - address of signed char/short/int
+     - address of float
+     - address of vector unsigned char/short/int
+     - address of vector signed char/short/int
+     - address of vector float */
+#include <altivec.h>
+
+/* Test vec_ld can allow scalar and vector type address. */
+vector unsigned char
+test_vld_scalar_uc (const unsigned char *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned short
+test_vld_scalar_us (const unsigned short *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned int
+test_vld_scalar_ui (const unsigned int *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed char
+test_vld_scalar_sc (const signed char *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed short
+test_vld_scalar_ss (const signed short *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed int
+test_vld_scalar_si (const signed int *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector float
+test_vld_scalar_f (const float *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned char
+test_vld_vector_uc (const vector unsigned char *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned short
+test_vld_vector_us (const vector unsigned short *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned int
+test_vld_vector_ui (const vector unsigned int *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed char
+test_vld_vector_sc (const vector signed char *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed short
+test_vld_vector_ss (const vector signed short *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed int
+test_vld_vector_si (const vector signed int *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector float
+test_vld_vector_f (const vector float *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+/* Test vec_st can allow scalar and vector type address. */
+
+void
+test_vst_scalar_uc (vector unsigned char v, unsigned char *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_us (vector unsigned short v, unsigned short *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_ui (vector unsigned int v, unsigned int *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_sc (vector signed char v, signed char *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_ss (vector signed short v, signed short *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_si (vector signed int v, signed int *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_f (vector float v, float *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_uc (vector unsigned char v, vector unsigned char *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_us (vector unsigned short v, vector unsigned short *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_ui (vector unsigned int v, vector unsigned int *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_sc (vector signed char v, vector signed char *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_ss (vector signed short v, vector signed short *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_si (vector signed int v, vector signed int *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_f (vector float v, vector float *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr-2.c b/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr-2.c
new file mode 100644
index 0000000..aecccd0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr-2.c
@@ -0,0 +1,92 @@
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mvsx" } */
+
+/* Note that vector long long and vector double type require vsx support. */
+
+/* Test vec_ld and vec_st can support both scalar and vector
+   type address points, the list is:
+     - address of unsigned long long
+     - address of signed long long
+     - address of double
+     - address of vector unsigned long long
+     - address of vector signed long long
+     - address of vector double */
+#include <altivec.h>
+
+/* Test vec_ld can allow scalar and vector type address. */
+
+vector unsigned long long
+test_vld_scalar_ul (const unsigned long long *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed long long
+test_vld_scalar_sl (const signed long long *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector double
+test_vld_scalar_d (const double *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector unsigned long long
+test_vld_vector_ul (const vector unsigned long long *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector signed long long
+test_vld_vector_sl (const vector signed long long *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+vector double
+test_vld_vector_d (const vector double *address)
+{
+  return __builtin_vec_ld (0, address);
+}
+
+/* Test vec_st can allow scalar and vector type address. */
+
+void
+test_vst_scalar_ul (vector unsigned long long v, unsigned long long *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_sl (vector signed long long v, signed long long *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_scalar_d (vector double v, double *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_ul (vector unsigned long long v,
+		    vector unsigned long long *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_sl (vector signed long long v, vector signed long long *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
+void
+test_vst_vector_d (vector double v, vector double *address)
+{
+  __builtin_vec_st (v, 0, address);
+}
+
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c b/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c
deleted file mode 100644
index bd24864..0000000
--- a/gcc/testsuite/gcc.target/powerpc/altivec_vld_vst_addr.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/* { dg-require-effective-target powerpc_altivec_ok } */
-/* { dg-options "-maltivec" } */
-
-/* Test vec_ld and vec_st can support both scalar and vector
-   type address points, the list is:
-     - address of vector unsigned char/short/int/long long
-     - address of vector signed char/short/int/long long
-     - address of vector double/float
-     - address of unsigned char/short/int/long long
-     - address of signed char/short/int/long long
-     - address of double/float */
-#include <altivec.h>
-
-/* Test vec_ld can allow scalar and vector type address. */
-vector unsigned char
-test_vld_scalar_uc (const unsigned char *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector unsigned short
-test_vld_scalar_us (const unsigned short *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector unsigned int
-test_vld_scalar_ui (const unsigned int *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector unsigned long long
-test_vld_scalar_ul (const unsigned long long *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector signed char
-test_vld_scalar_sc (const signed char *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector signed short
-test_vld_scalar_ss (const signed short *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector signed int
-test_vld_scalar_si (const signed int *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector signed long long
-test_vld_scalar_sl (const signed long long *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector unsigned char
-test_vld_vector_uc (const vector unsigned char *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector unsigned short
-test_vld_vector_us (const vector unsigned short *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector unsigned int
-test_vld_vector_ui (const vector unsigned int *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector unsigned long long
-test_vld_vector_ul (const vector unsigned long long *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector signed char
-test_vld_vector_sc (const vector signed char *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector signed short
-test_vld_vector_ss (const vector signed short *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector signed int
-test_vld_vector_si (const vector signed int *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector signed long long
-test_vld_vector_sl (const vector signed long long *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector float
-test_vld_scalar_f (const float *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector double
-test_vld_scalar_d (const double *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector float
-test_vld_vector_f (const vector float *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-vector double
-test_vld_vector_d (const vector double *address)
-{
-  return __builtin_vec_ld (0, address);
-}
-
-/* Test vec_st can allow scalar and vector type address. */
-
-void
-test_vst_scalar_uc (vector unsigned char v, unsigned char *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_us (vector unsigned short v, unsigned short *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_ui (vector unsigned int v, unsigned int *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_ul (vector unsigned long long v, unsigned long long *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_sc (vector signed char v, signed char *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_ss (vector signed short v, signed short *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_si (vector signed int v, signed int *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_sl (vector signed long long v, signed long long *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_uc (vector unsigned char v, vector unsigned char *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_us (vector unsigned short v, vector unsigned short *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_ui (vector unsigned int v, vector unsigned int *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_ul (vector unsigned long long v,
-		    vector unsigned long long *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_sc (vector signed char v, vector signed char *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_ss (vector signed short v, vector signed short *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_si (vector signed int v, vector signed int *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_sl (vector signed long long v, vector signed long long *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_f (vector float v, float *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_f (vector float v, vector float *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_scalar_d (vector double v, double *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-void
-test_vst_vector_d (vector double v, vector double *address)
-{
-  __builtin_vec_st (v, 0, address);
-}
-
-- 
2.7.4


on 2019/1/19 脡脧脦莽9:04, Segher Boessenkool wrote:
> On Fri, Jan 18, 2019 at 11:15:12PM +0100, Jakub Jelinek wrote:
>> On Wed, Jan 16, 2019 at 10:08:46PM +0800, Kewen.Lin wrote:
>>> 	* gcc.target/powerpc/altivec_vld_vst_addr.c: New test.
>>
>> This test fails on powerpc64-linux, both with -m32 and -m64:
> 
> I missed that.  Thanks Jakub.
> 
> Kewen, please split the "vector long long" tests to a separate testcase,
> and use -mvsx and powerpc_vsx_ok there (instead of -maltivec and
> powerpc_altivec_ok).
> 
> 
> Segher
> 

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

* Re: [PATCH v2] rs6000: Add missing prototypes for vec_ld/vec_st
  2019-01-19 13:27     ` [PATCH v2] " Kewen.Lin
@ 2019-01-19 22:23       ` Segher Boessenkool
  0 siblings, 0 replies; 6+ messages in thread
From: Segher Boessenkool @ 2019-01-19 22:23 UTC (permalink / raw)
  To: Kewen.Lin; +Cc: Jakub Jelinek, gcc-patches, Bill Schmidt

Hi Kewen,

On Sat, Jan 19, 2019 at 09:27:38PM +0800, Kewen.Lin wrote:
> Thanks for your suggestion, I just had a testing on BE machine and found the vector double related codes also need to be separated to vsx case. The case has been updated as below, is it OK for trunk? 

Yes, this is fine.  Thanks!

A changelog suggestion:

> 2019-01-19  Kewen Lin  <linkw@gcc.gnu.org>
> 
> 	* gcc.target/powerpc/altivec_vld_vst_addr.c: Remove.
> 	* gcc.target/powerpc/altivec_vld_vst_addr-1.c: New test.
> 	* gcc.target/powerpc/altivec_vld_vst_addr-2.c: Ditto.

Maybe you can say this like

	* gcc.target/powerpc/altivec_vld_vst_addr.c: Delete, split into ...
	* gcc.target/powerpc/altivec_vld_vst_addr-1.c: ... this, new test ...
	* gcc.target/powerpc/altivec_vld_vst_addr-2.c: ... and this.  New test.

It's fine with or without that.


Segher

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

end of thread, other threads:[~2019-01-19 22:23 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-16 14:09 [PATCH] rs6000: Add missing prototypes for vec_ld/vec_st Kewen.Lin
2019-01-16 17:08 ` Segher Boessenkool
2019-01-18 22:15 ` Jakub Jelinek
2019-01-19  1:05   ` Segher Boessenkool
2019-01-19 13:27     ` [PATCH v2] " Kewen.Lin
2019-01-19 22:23       ` 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).