public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Tamar Christina <tnfchris@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-4715] AArch64: Rewrite simd move immediate patterns to new syntax Date: Wed, 18 Oct 2023 08:54:55 +0000 (GMT) [thread overview] Message-ID: <20231018085455.D46D93858428@sourceware.org> (raw) https://gcc.gnu.org/g:04227acbe9e6c60d1e314a6b4f2d949c07f30baa commit r14-4715-g04227acbe9e6c60d1e314a6b4f2d949c07f30baa Author: Tamar Christina <tamar.christina@arm.com> Date: Wed Oct 18 09:34:01 2023 +0100 AArch64: Rewrite simd move immediate patterns to new syntax This rewrites the simd MOV patterns to use the new compact syntax. No change in semantics is expected. This will be needed in follow on patches. This also merges the splits into the define_insn which will also be needed soon. gcc/ChangeLog: PR tree-optimization/109154 * config/aarch64/aarch64-simd.md (*aarch64_simd_mov<VDMOV:mode>): Rewrite to new syntax. (*aarch64_simd_mov<VQMOV:mode): Rewrite to new syntax and merge in splits. Diff: --- gcc/config/aarch64/aarch64-simd.md | 116 +++++++++++++++---------------------- 1 file changed, 47 insertions(+), 69 deletions(-) diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index f487b570b0c9..81ff5bad03d5 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -143,54 +143,59 @@ ) (define_insn "*aarch64_simd_mov<VDMOV:mode>" - [(set (match_operand:VDMOV 0 "nonimmediate_operand" - "=w, r, m, m, m, w, ?r, ?w, ?r, w, w") - (match_operand:VDMOV 1 "general_operand" - "m, m, Dz, w, r, w, w, r, r, Dn, Dz"))] + [(set (match_operand:VDMOV 0 "nonimmediate_operand") + (match_operand:VDMOV 1 "general_operand"))] "TARGET_FLOAT && (register_operand (operands[0], <MODE>mode) || aarch64_simd_reg_or_zero (operands[1], <MODE>mode))" - "@ - ldr\t%d0, %1 - ldr\t%x0, %1 - str\txzr, %0 - str\t%d1, %0 - str\t%x1, %0 - * return TARGET_SIMD ? \"mov\t%0.<Vbtype>, %1.<Vbtype>\" : \"fmov\t%d0, %d1\"; - * return TARGET_SIMD ? \"umov\t%0, %1.d[0]\" : \"fmov\t%x0, %d1\"; - fmov\t%d0, %1 - mov\t%0, %1 - * return aarch64_output_simd_mov_immediate (operands[1], 64); - fmov\t%d0, xzr" - [(set_attr "type" "neon_load1_1reg<q>, load_8, store_8, neon_store1_1reg<q>,\ - store_8, neon_logic<q>, neon_to_gp<q>, f_mcr,\ - mov_reg, neon_move<q>, f_mcr") - (set_attr "arch" "*,*,*,*,*,*,*,*,*,simd,*")] -) - -(define_insn "*aarch64_simd_mov<VQMOV:mode>" - [(set (match_operand:VQMOV 0 "nonimmediate_operand" - "=w, Umn, m, w, ?r, ?w, ?r, w, w") - (match_operand:VQMOV 1 "general_operand" - "m, Dz, w, w, w, r, r, Dn, Dz"))] + {@ [cons: =0, 1; attrs: type, arch] + [w , m ; neon_load1_1reg<q> , * ] ldr\t%d0, %1 + [r , m ; load_8 , * ] ldr\t%x0, %1 + [m , Dz; store_8 , * ] str\txzr, %0 + [m , w ; neon_store1_1reg<q>, * ] str\t%d1, %0 + [m , r ; store_8 , * ] str\t%x1, %0 + [w , w ; neon_logic<q> , simd] mov\t%0.<Vbtype>, %1.<Vbtype> + [w , w ; neon_logic<q> , * ] fmov\t%d0, %d1 + [?r, w ; neon_to_gp<q> , simd] umov\t%0, %1.d[0] + [?r, w ; neon_to_gp<q> , * ] fmov\t%x0, %d1 + [?w, r ; f_mcr , * ] fmov\t%d0, %1 + [?r, r ; mov_reg , * ] mov\t%0, %1 + [w , Dn; neon_move<q> , simd] << aarch64_output_simd_mov_immediate (operands[1], 64); + [w , Dz; f_mcr , * ] fmov\t%d0, xzr + } +) + +(define_insn_and_split "*aarch64_simd_mov<VQMOV:mode>" + [(set (match_operand:VQMOV 0 "nonimmediate_operand") + (match_operand:VQMOV 1 "general_operand"))] "TARGET_FLOAT && (register_operand (operands[0], <MODE>mode) || aarch64_simd_reg_or_zero (operands[1], <MODE>mode))" - "@ - ldr\t%q0, %1 - stp\txzr, xzr, %0 - str\t%q1, %0 - mov\t%0.<Vbtype>, %1.<Vbtype> - # - # - # - * return aarch64_output_simd_mov_immediate (operands[1], 128); - fmov\t%d0, xzr" - [(set_attr "type" "neon_load1_1reg<q>, store_16, neon_store1_1reg<q>,\ - neon_logic<q>, multiple, multiple,\ - multiple, neon_move<q>, fmov") - (set_attr "length" "4,4,4,4,8,8,8,4,4") - (set_attr "arch" "*,*,*,simd,*,*,*,simd,*")] + {@ [cons: =0, 1; attrs: type, arch, length] + [w , m ; neon_load1_1reg<q> , * , 4] ldr\t%q0, %1 + [Umn, Dz; store_16 , * , 4] stp\txzr, xzr, %0 + [m , w ; neon_store1_1reg<q>, * , 4] str\t%q1, %0 + [w , w ; neon_logic<q> , simd, 4] mov\t%0.<Vbtype>, %1.<Vbtype> + [?r , w ; multiple , * , 8] # + [?w , r ; multiple , * , 8] # + [?r , r ; multiple , * , 8] # + [w , Dn; neon_move<q> , simd, 4] << aarch64_output_simd_mov_immediate (operands[1], 128); + [w , Dz; fmov , * , 4] fmov\t%d0, xzr + } + "&& reload_completed + && (REG_P (operands[0]) + && REG_P (operands[1]) + && !(FP_REGNUM_P (REGNO (operands[0])) + && FP_REGNUM_P (REGNO (operands[1]))))" + [(const_int 0)] + { + if (GP_REGNUM_P (REGNO (operands[0])) + && GP_REGNUM_P (REGNO (operands[1]))) + aarch64_simd_emit_reg_reg_move (operands, DImode, 2); + else + aarch64_split_simd_move (operands[0], operands[1]); + DONE; + } ) ;; When storing lane zero we can use the normal STR and its more permissive @@ -276,33 +281,6 @@ [(set_attr "type" "neon_stp_q")] ) - -(define_split - [(set (match_operand:VQMOV 0 "register_operand" "") - (match_operand:VQMOV 1 "register_operand" ""))] - "TARGET_FLOAT - && reload_completed - && GP_REGNUM_P (REGNO (operands[0])) - && GP_REGNUM_P (REGNO (operands[1]))" - [(const_int 0)] -{ - aarch64_simd_emit_reg_reg_move (operands, DImode, 2); - DONE; -}) - -(define_split - [(set (match_operand:VQMOV 0 "register_operand" "") - (match_operand:VQMOV 1 "register_operand" ""))] - "TARGET_FLOAT - && reload_completed - && ((FP_REGNUM_P (REGNO (operands[0])) && GP_REGNUM_P (REGNO (operands[1]))) - || (GP_REGNUM_P (REGNO (operands[0])) && FP_REGNUM_P (REGNO (operands[1]))))" - [(const_int 0)] -{ - aarch64_split_simd_move (operands[0], operands[1]); - DONE; -}) - (define_expand "@aarch64_split_simd_mov<mode>" [(set (match_operand:VQMOV 0) (match_operand:VQMOV 1))]
reply other threads:[~2023-10-18 8:54 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=20231018085455.D46D93858428@sourceware.org \ --to=tnfchris@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).