public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Peter Bergner <bergner@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r10-10398] rs6000: Add unspec wrapper to vsx_assemble_pair Date: Sat, 15 Jan 2022 06:00:39 +0000 (GMT) [thread overview] Message-ID: <20220115060039.91A6A3858033@sourceware.org> (raw) https://gcc.gnu.org/g:1221c37e515e69c6426994a4a77cb2651747c172 commit r10-10398-g1221c37e515e69c6426994a4a77cb2651747c172 Author: Peter Bergner <bergner@linux.ibm.com> Date: Fri Jan 14 21:41:03 2022 -0600 rs6000: Add unspec wrapper to vsx_assemble_pair This backports the trunk handling of vsx_assemble_pair with a unspec wrapper and splits it late (split2). 2022-01-14 Peter Bergner <bergner@linux.ibm.com> gcc/ * config/rs6000/mma.md (UNSPEC_VSX_ASSEMBLE): New unspec. (vsx_assemble_pair): Use mma_assemble_input_operand. Expand into UNSPEC_VSX_ASSEMBLE wrapper. (*vsx_assemble_pair): New define_insn_and_split. * config/rs6000/rs6000.c (rs6000_split_multireg_move): Handle UNSPEC_VSX_ASSEMBLE. Diff: --- gcc/config/rs6000/mma.md | 35 ++++++++++++++++++++++++----------- gcc/config/rs6000/rs6000.c | 14 ++++++++++---- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/gcc/config/rs6000/mma.md b/gcc/config/rs6000/mma.md index f39a5c8ba99..c267a4c82e2 100644 --- a/gcc/config/rs6000/mma.md +++ b/gcc/config/rs6000/mma.md @@ -36,7 +36,8 @@ ;; Constants for creating unspecs (define_c_enum "unspec" - [UNSPEC_MMA_ASSEMBLE_ACC + [UNSPEC_VSX_ASSEMBLE + UNSPEC_MMA_ASSEMBLE_ACC UNSPEC_MMA_PMXVBF16GER2 UNSPEC_MMA_PMXVBF16GER2NN UNSPEC_MMA_PMXVBF16GER2NP @@ -350,19 +351,31 @@ (define_expand "vsx_assemble_pair" [(match_operand:POI 0 "vsx_register_operand") - (match_operand:V16QI 1 "input_operand") - (match_operand:V16QI 2 "input_operand")] + (match_operand:V16QI 1 "mma_assemble_input_operand") + (match_operand:V16QI 2 "mma_assemble_input_operand")] "TARGET_MMA" { - rtx dst; - - /* Let the compiler know the code below fully defines our output value. */ - emit_clobber (operands[0]); + rtx src = gen_rtx_UNSPEC (POImode, + gen_rtvec (2, operands[1], operands[2]), + UNSPEC_VSX_ASSEMBLE); + emit_move_insn (operands[0], src); + DONE; +}) - dst = simplify_gen_subreg (V16QImode, operands[0], POImode, 0); - emit_move_insn (dst, operands[1]); - dst = simplify_gen_subreg (V16QImode, operands[0], POImode, 16); - emit_move_insn (dst, operands[2]); +(define_insn_and_split "*vsx_assemble_pair" + [(set (match_operand:POI 0 "vsx_register_operand" "=wa") + (unspec:POI [(match_operand:V16QI 1 "mma_assemble_input_operand" "mwa") + (match_operand:V16QI 2 "mma_assemble_input_operand" "mwa")] + UNSPEC_VSX_ASSEMBLE))] + "TARGET_MMA" + "#" + "&& reload_completed" + [(const_int 0)] +{ + rtx src = gen_rtx_UNSPEC (POImode, + gen_rtvec (2, operands[1], operands[2]), + UNSPEC_VSX_ASSEMBLE); + rs6000_split_multireg_move (operands[0], src); DONE; }) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index a9d1769350e..4b473e00be3 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -16018,9 +16018,13 @@ rs6000_split_multireg_move (rtx dst, rtx src) if (GET_CODE (src) == UNSPEC) { - gcc_assert (REG_P (dst) - && FP_REGNO_P (REGNO (dst)) - && XINT (src, 1) == UNSPEC_MMA_ASSEMBLE_ACC); + gcc_assert (XINT (src, 1) == UNSPEC_VSX_ASSEMBLE + || XINT (src, 1) == UNSPEC_MMA_ASSEMBLE_ACC); + gcc_assert (REG_P (dst)); + if (GET_MODE (src) == PXImode) + gcc_assert (FP_REGNO_P (REGNO (dst))); + if (GET_MODE (src) == POImode) + gcc_assert (VSX_REGNO_P (REGNO (dst))); reg_mode = GET_MODE (XVECEXP (src, 0, 0)); int nvecs = XVECLEN (src, 0); @@ -16033,7 +16037,9 @@ rs6000_split_multireg_move (rtx dst, rtx src) /* We are writing an accumulator register, so we have to prime it after we've written it. */ - emit_insn (gen_mma_xxmtacc (dst, dst)); + if (TARGET_MMA + && GET_MODE (dst) == PXImode && FP_REGNO_P (REGNO (dst))) + emit_insn (gen_mma_xxmtacc (dst, dst)); return; }
reply other threads:[~2022-01-15 6:00 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220115060039.91A6A3858033@sourceware.org \ --to=bergner@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).