public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/meissner/heads/work130-vpair)] Add __builtin_vpair_*_assemble
@ 2023-08-10  0:23 Michael Meissner
  0 siblings, 0 replies; only message in thread
From: Michael Meissner @ 2023-08-10  0:23 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:57cb3f72b41262a686b03bf974b21ab1ad459ea1

commit 57cb3f72b41262a686b03bf974b21ab1ad459ea1
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Wed Aug 9 20:23:11 2023 -0400

    Add __builtin_vpair_*_assemble
    
    2023-08-09  Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            * config/rs6000/predicates.md (mma_assemble_input_operand); Allow all
            128-bit vector types.
            * config/rs6000/rs6000-builtins.def (__builtin_vpair_*_assemble): New
            built-ins.
            * config/rs6000/vector-pair.md (vpair_assemble_<vpair_type>): New insns.
            * doc/extend.texi (PowerPC built-in functions): Add
            __builtin_vpair_*_assemble.

Diff:
---
 gcc/config/rs6000/predicates.md       |  2 +-
 gcc/config/rs6000/rs6000-builtins.def | 30 ++++++++++++++++++++++++++++++
 gcc/config/rs6000/vector-pair.md      | 26 ++++++++++++++++++++++++++
 gcc/doc/extend.texi                   | 17 +++++++++++++++++
 4 files changed, 74 insertions(+), 1 deletion(-)

diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index 3552d908e9d1..a8dc5fb6efdb 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -1301,7 +1301,7 @@
 
 ;; Return 1 if this operand is valid for a MMA assemble accumulator insn.
 (define_special_predicate "mma_assemble_input_operand"
-  (match_test "(mode == V16QImode
+  (match_test "(VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16
 		&& (vsx_register_operand (op, mode)
 		    || (MEM_P (op)
 			&& (indexed_or_indirect_address (XEXP (op, 0), mode)
diff --git a/gcc/config/rs6000/rs6000-builtins.def b/gcc/config/rs6000/rs6000-builtins.def
index 25f4a9475774..6c92d2eeec55 100644
--- a/gcc/config/rs6000/rs6000-builtins.def
+++ b/gcc/config/rs6000/rs6000-builtins.def
@@ -4125,6 +4125,9 @@
   vf __builtin_vpair_f32_get_vector (v256, const int);
     VPAIR_F32_GET_VECTOR vpair_get_vector_v8sf {mma}
 
+  v256 __builtin_vpair_f32_assemble (vf, vf);
+    VPAIR_F32_ASSEMBLE vpair_assemble_v8sf {mma}
+
   v256 __builtin_vpair_f32_abs (v256);
     VPAIR_F32_ABS vpair_abs_v8sf2 {mma}
 
@@ -4155,6 +4158,9 @@
   vd __builtin_vpair_f64_get_vector (v256, const int);
     VPAIR_F64_GET_VECTOR vpair_get_vector_v4df {mma}
 
+  v256 __builtin_vpair_f64_assemble (vd, vd);
+    VPAIR_F64_ASSEMBLE vpair_assemble_v4df {mma}
+
   v256 __builtin_vpair_f64_abs (v256);
     VPAIR_F64_ABS vpair_abs_v4df2 {mma}
 
@@ -4185,9 +4191,15 @@
   vuc __builtin_vpair_i8u_get_vector (v256, const int);
     VPAIR_I8U_GET_VECTOR vpair_get_vector_v32qi {mma}
 
+  v256 __builtin_vpair_i8u_assemble (vuc, vuc);
+    VPAIR_I8U_ASSEMBLE vpair_assemble_v32qi {mma}
+
   vsc __builtin_vpair_i8_get_vector (v256, const int);
     VPAIR_I8_GET_VECTOR vpair_get_vector_v32qi {mma}
 
+  v256 __builtin_vpair_i8_assemble (vsc, vsc);
+    VPAIR_I8_ASSEMBLE vpair_assemble_v32qi {mma}
+
   v256 __builtin_vpair_i8_add (v256, v256);
     VPAIR_I8_ADD vpair_add_v32qi3 {mma}
 
@@ -4224,9 +4236,15 @@
   vus __builtin_vpair_i16u_get_vector (v256, const int);
     VPAIR_I16U_GET_VECTOR vpair_get_vector_v16hi {mma}
 
+  v256 __builtin_vpair_i16u_assemble (vus, vus);
+    VPAIR_I16U_ASSEMBLE vpair_assemble_v16hi {mma}
+
   vss __builtin_vpair_i16_get_vector (v256, const int);
     VPAIR_I16_GET_VECTOR vpair_get_vector_v16hi {mma}
 
+  v256 __builtin_vpair_i16_assemble (vss, vss);
+    VPAIR_I16_ASSEMBLE vpair_assemble_v16hi {mma}
+
   v256 __builtin_vpair_i16_add (v256, v256);
     VPAIR_I16_ADD vpair_add_v16hi3 {mma}
 
@@ -4263,9 +4281,15 @@
   vui __builtin_vpair_i32u_get_vector (v256, const int);
     VPAIR_I32U_GET_VECTOR vpair_get_vector_v8si {mma}
 
+  v256 __builtin_vpair_i32u_assemble (vui, vui);
+    VPAIR_I32U_ASSEMBLE vpair_assemble_v8si {mma}
+
   vsi __builtin_vpair_i32_get_vector (v256, const int);
     VPAIR_I32_GET_VECTOR vpair_get_vector_v8si {mma}
 
+  v256 __builtin_vpair_i32_assemble (vsi, vsi);
+    VPAIR_I32_ASSEMBLE vpair_assemble_v8si {mma}
+
   v256 __builtin_vpair_i32_add (v256, v256);
     VPAIR_I32_ADD vpair_add_v8si3 {mma}
 
@@ -4302,9 +4326,15 @@
   vull __builtin_vpair_i64u_get_vector (v256, const int);
     VPAIR_I64U_GET_VECTOR vpair_get_vector_v4di {mma}
 
+  v256 __builtin_vpair_i64u_assemble (vull, vull);
+    VPAIR_I64U_ASSEMBLE vpair_assemble_v4di {mma}
+
   vsll __builtin_vpair_i64_get_vector (v256, const int);
     VPAIR_I64_GET_VECTOR vpair_get_vector_v4di {mma}
 
+  v256 __builtin_vpair_i64_assemble (vsll, vsll);
+    VPAIR_I64_ASSEMBLE vpair_assemble_v4di {mma}
+
   v256 __builtin_vpair_i64_add (v256, v256);
     VPAIR_I64_ADD vpair_add_v4di3 {mma}
 
diff --git a/gcc/config/rs6000/vector-pair.md b/gcc/config/rs6000/vector-pair.md
index 0fdd1292966c..49f7166b5607 100644
--- a/gcc/config/rs6000/vector-pair.md
+++ b/gcc/config/rs6000/vector-pair.md
@@ -144,6 +144,32 @@
 }
   [(set_attr "length" "8")])
 
+;; Assemble a vector pair from two vectors.  Unlike
+;; __builtin_mma_assemble_pair, this function produces a vector pair output
+;; directly and it takes all of the vector types.
+;;
+;; We cannot update the two output registers atomically, so mark the output as
+;; an early clobber so we don't accidentally clobber the input operands.  */
+
+(define_insn_and_split "vpair_assemble_<vpair_type>"
+  [(set (match_operand:OO 0 "vsx_register_operand" "=&wa")
+	(unspec:OO
+	 [(match_operand:<VPAIR_VECTOR> 1 "mma_assemble_input_operand" "mwa")
+	  (match_operand:<VPAIR_VECTOR> 2 "mma_assemble_input_operand" "mwa")]
+	 VPAIR_ALL))]
+  "TARGET_MMA"
+  "#"
+  "&& reload_completed"
+  [(const_int 0)]
+{
+  rtx src = gen_rtx_UNSPEC (OOmode,
+			    gen_rtvec (2, operands[1], operands[2]),
+			    UNSPEC_VSX_ASSEMBLE);
+  rs6000_split_multireg_move (operands[0], src);
+  DONE;
+}
+  [(set_attr "length" "8")])
+
 ;; Extract one of the two 128-bitvectors from a vector pair.
 (define_insn_and_split "vpair_get_vector_<vpair_type>"
   [(set (match_operand:<VPAIR_VECTOR> 0 "vsx_register_operand" "=wa")
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 24de511fe462..124e78a97358 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -21127,6 +21127,7 @@ The following built-in functions operate on pairs of
 
 @smallexample
 vector float __builtin_vpair_f32_get_vector (__vector_pair, int);
+__vector_pair __builtin_vpair_f32_assemble (vector float, vector float);
 __vector_pair __builtin_vpair_f32_abs (__vector_pair);
 __vector_pair __builtin_vpair_f32_add (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_f32_fma (__vector_pair, __vector_pair, __vector_pair);
@@ -21143,6 +21144,7 @@ The following built-in functions operate on pairs of
 
 @smallexample
 vector double __builtin_vpair_f64_get_vector (__vector_pair, int);
+__vector_pair __builtin_vpair_f64_assemble (vector double, vector double);
 __vector_pair __builtin_vpair_f64_abs (__vector_pair);
 __vector_pair __builtin_vpair_f64_add (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_f64_fma (__vector_pair, __vector_pair, __vector_pair);
@@ -21160,6 +21162,10 @@ The following built-in functions operate on pairs of
 @smallexample
 vector long long __builtin_vpair_i64_get_vector (__vector_pair, int);
 vector unsigned long long __builtin_vpair_i64u_get_vector (__vector_pair, int);
+__vector_pair __builtin_vpair_i64_assemble (vector long long,
+                                            vector long long);
+__vector_pair __builtin_vpair_i64u_assemble (vector unsigned long long,
+                                             vector unsigned long long);
 __vector_pair __builtin_vpair_i64_add (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_i64_and (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_i64_ior (__vector_pair, __vector_pair);
@@ -21180,6 +21186,9 @@ The following built-in functions operate on pairs of
 @smallexample
 vector int __builtin_vpair_i32_get_vector (__vector_pair, int);
 vector unsigned int __builtin_vpair_i32u_get_vector (__vector_pair, int);
+__vector_pair __builtin_vpair_i32_assemble (vector int, vector int);
+__vector_pair __builtin_vpair_i32u_assemble (vector unsigned int,
+                                             vector unsigned int);
 __vector_pair __builtin_vpair_i32_add (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_i32_and (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_i32_ior (__vector_pair, __vector_pair);
@@ -21199,6 +21208,10 @@ The following built-in functions operate on pairs of
 @smallexample
 vector short __builtin_vpair_i16_get_vector (__vector_pair, int);
 vector unsigned short __builtin_vpair_i16u_get_vector (__vector_pair, int);
+__vector_pair __builtin_vpair_i16_assemble (vector short,
+                                            vector short);
+__vector_pair __builtin_vpair_i16u_assemble (vector unsigned short,
+                                             vector unsigned short);
 __vector_pair __builtin_vpair_i16_add (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_i16_and (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_i16_ior (__vector_pair, __vector_pair);
@@ -21218,6 +21231,10 @@ The following built-in functions operate on pairs of
 @smallexample
 vector signed char __builtin_vpair_i8_get_vector (__vector_pair, int);
 vector unsigned char __builtin_vpair_i8u_get_vector (__vector_pair, int);
+__vector_pair __builtin_vpair_i8_assemble (vector signed char,
+                                           vector signed char);
+__vector_pair __builtin_vpair_i8u_assemble (vector unsigned char,
+                                            vector unsigned char);
 __vector_pair __builtin_vpair_i8_add (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_i8_and (__vector_pair, __vector_pair);
 __vector_pair __builtin_vpair_i8_ior (__vector_pair, __vector_pair);

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-08-10  0:23 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-10  0:23 [gcc(refs/users/meissner/heads/work130-vpair)] Add __builtin_vpair_*_assemble Michael Meissner

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).