[gcc(refs/users/meissner/heads/work041)] Add VEC_DUPLICATE insn/split.

Michael Meissner meissner@gcc.gnu.org
Thu Mar 18 10:30:46 GMT 2021


https://gcc.gnu.org/g:5e63f888776e3fc3fb2a7c8aa8a95f7c6a2aaf51

commit 5e63f888776e3fc3fb2a7c8aa8a95f7c6a2aaf51
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Thu Mar 18 06:30:28 2021 -0400

    Add VEC_DUPLICATE insn/split.
    
    gcc/
    2021-03-17  Michael Meissner  <meissner@linux.ibm.com>
    
            * config/rs6000/rs6000.md (xxspltidpv2df_dup): New insn and
            split.

Diff:
---
 gcc/config/rs6000/rs6000.md | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index bcfcf4c308c..9106c9ae2ee 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -7564,6 +7564,21 @@
   operands[2] = GEN_INT (value);
 })
 
+(define_insn_and_split "*xxspltidpv2df_dup"
+  [(set (match_operand:V2DF 0 "vsx_register_operand" "=wa")
+	(vec_duplicate:V2DF (match_operand:DF 1 "xxspltidp_operand" "eF")))]
+  "TARGET_POWER10"
+  "#"
+  "&& 1"
+  [(set (match_dup 0)
+	(unspec:V2DF [(match_dup 2)] UNSPEC_XXSPLTIDP))]
+{
+  long value;
+  const struct real_value *rv = CONST_DOUBLE_REAL_VALUE (operands[1]);
+  REAL_VALUE_TO_TARGET_SINGLE (*rv, value);
+  operands[2] = GEN_INT (value);
+})
+
 (define_insn "*xxspltidp<mode>"
   [(set (match_operand:SF_DF_V2DF 0 "vsx_register_operand" "=wa")
 	(unspec:SF_DF_V2DF [(match_operand 1 "const_int_operand" "n")]


More information about the Gcc-cvs mailing list