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