public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/meissner/heads/work134-vsize)] Adjust vector pair split functions.
@ 2023-09-25 17:03 Michael Meissner
  0 siblings, 0 replies; only message in thread
From: Michael Meissner @ 2023-09-25 17:03 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:92cc5d27106c7389ba98a137a8699eef5a6382bb

commit 92cc5d27106c7389ba98a137a8699eef5a6382bb
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Mon Sep 25 13:03:36 2023 -0400

    Adjust vector pair split functions.
    
    2023-09-21  Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            * config/rs6000/rs6000.cc (split_unary_vector_pair): Add code to allow
            split to be done before register allocation time.
            (split_binary_vector_pair): Likewise.
            (split_fma_vector_pair): Likewise.

Diff:
---
 gcc/config/rs6000/rs6000.cc | 65 +++++++++++++++++++++++++--------------------
 1 file changed, 36 insertions(+), 29 deletions(-)

diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 33efbcee9af..37444f4eafc 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -27404,15 +27404,17 @@ split_unary_vector_pair (machine_mode mode,		/* vector mode.  */
 			 rtx operands[],		/* dest, src.  */
 			 rtx (*func)(rtx, rtx))		/* create insn.  */
 {
-  unsigned reg0 = reg_or_subregno (operands[0]);
-  unsigned reg1 = reg_or_subregno (operands[1]);
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  machine_mode orig_mode = GET_MODE (op0);
 
-  emit_insn (func (gen_rtx_REG (mode, reg0),
-		   gen_rtx_REG (mode, reg1)));
-
-  emit_insn (func (gen_rtx_REG (mode, reg0 + 1),
-		   gen_rtx_REG (mode, reg1 + 1)));
+  rtx reg0_vector0 = simplify_gen_subreg (mode, op0, orig_mode, 0);
+  rtx reg1_vector0 = simplify_gen_subreg (mode, op1, orig_mode, 0);
+  rtx reg0_vector1 = simplify_gen_subreg (mode, op0, orig_mode, 16);
+  rtx reg1_vector1 = simplify_gen_subreg (mode, op1, orig_mode, 16);
 
+  emit_insn (func (reg0_vector0, reg1_vector0));
+  emit_insn (func (reg0_vector1, reg1_vector1));
   return;
 }
 
@@ -27423,18 +27425,20 @@ split_binary_vector_pair (machine_mode mode,		/* vector mode.  */
 			 rtx operands[],		/* dest, src.  */
 			 rtx (*func)(rtx, rtx, rtx))	/* create insn.  */
 {
-  unsigned reg0 = reg_or_subregno (operands[0]);
-  unsigned reg1 = reg_or_subregno (operands[1]);
-  unsigned reg2 = reg_or_subregno (operands[2]);
-
-  emit_insn (func (gen_rtx_REG (mode, reg0),
-		   gen_rtx_REG (mode, reg1),
-		   gen_rtx_REG (mode, reg2)));
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  rtx op2 = operands[2];
+  machine_mode orig_mode = GET_MODE (op0);
 
-  emit_insn (func (gen_rtx_REG (mode, reg0 + 1),
-		   gen_rtx_REG (mode, reg1 + 1),
-		   gen_rtx_REG (mode, reg2 + 1)));
+  rtx reg0_vector0 = simplify_gen_subreg (mode, op0, orig_mode, 0);
+  rtx reg1_vector0 = simplify_gen_subreg (mode, op1, orig_mode, 0);
+  rtx reg2_vector0 = simplify_gen_subreg (mode, op2, orig_mode, 0);
+  rtx reg0_vector1 = simplify_gen_subreg (mode, op0, orig_mode, 16);
+  rtx reg1_vector1 = simplify_gen_subreg (mode, op1, orig_mode, 16);
+  rtx reg2_vector1 = simplify_gen_subreg (mode, op2, orig_mode, 16);
 
+  emit_insn (func (reg0_vector0, reg1_vector0, reg2_vector0));
+  emit_insn (func (reg0_vector1, reg1_vector1, reg2_vector1));
   return;
 }
 
@@ -27446,21 +27450,24 @@ split_fma_vector_pair (machine_mode mode,		/* vector mode.  */
 		       rtx operands[],			/* dest, src.  */
 		       rtx (*func)(rtx, rtx, rtx, rtx))	/* create insn.  */
 {
-  unsigned reg0 = reg_or_subregno (operands[0]);
-  unsigned reg1 = reg_or_subregno (operands[1]);
-  unsigned reg2 = reg_or_subregno (operands[2]);
-  unsigned reg3 = reg_or_subregno (operands[3]);
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  rtx op2 = operands[2];
+  rtx op3 = operands[3];
+  machine_mode orig_mode = GET_MODE (op0);
 
-  emit_insn (func (gen_rtx_REG (mode, reg0),
-		   gen_rtx_REG (mode, reg1),
-		   gen_rtx_REG (mode, reg2),
-		   gen_rtx_REG (mode, reg3)));
+  rtx reg0_vector0 = simplify_gen_subreg (mode, op0, orig_mode, 0);
+  rtx reg1_vector0 = simplify_gen_subreg (mode, op1, orig_mode, 0);
+  rtx reg2_vector0 = simplify_gen_subreg (mode, op2, orig_mode, 0);
+  rtx reg3_vector0 = simplify_gen_subreg (mode, op3, orig_mode, 0);
 
-  emit_insn (func (gen_rtx_REG (mode, reg0 + 1),
-		   gen_rtx_REG (mode, reg1 + 1),
-		   gen_rtx_REG (mode, reg2 + 1),
-		   gen_rtx_REG (mode, reg3 + 1)));
+  rtx reg0_vector1 = simplify_gen_subreg (mode, op0, orig_mode, 16);
+  rtx reg1_vector1 = simplify_gen_subreg (mode, op1, orig_mode, 16);
+  rtx reg2_vector1 = simplify_gen_subreg (mode, op2, orig_mode, 16);
+  rtx reg3_vector1 = simplify_gen_subreg (mode, op3, orig_mode, 16);
 
+  emit_insn (func (reg0_vector0, reg1_vector0, reg2_vector0, reg3_vector0));
+  emit_insn (func (reg0_vector1, reg1_vector1, reg2_vector1, reg3_vector1));
   return;
 }

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

only message in thread, other threads:[~2023-09-25 17:03 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-25 17:03 [gcc(refs/users/meissner/heads/work134-vsize)] Adjust vector pair split functions 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).