Re: [PATCH 1/4]AArch64: convert several predicate patterns to new compact syntax
Thanks for doing this a pre-patch. Minor request below: Tamar Christina writes: > ;; Perform a logical operation on operands 2 and 3, using operand 1 as > @@ -6676,38 +6690,42 @@ (define_insn "@aarch64_pred__z" > (define_insn "*3_cc" >[(set (reg:CC_NZC CC_REGNUM) > (unspec:CC_NZC > - [(match_operand:VNx16BI 1 "register_operand" "Upa") > + [(match_operand:VNx16BI 1 "register_operand") > (match_operand 4) > (match_operand:SI 5 "aarch64_sve_ptrue_flag") > (and:PRED_ALL >(LOGICAL:PRED_ALL > -(match_operand:PRED_ALL 2 "register_operand" "Upa") > -(match_operand:PRED_ALL 3 "register_operand" "Upa")) > +(match_operand:PRED_ALL 2 "register_operand") > +(match_operand:PRED_ALL 3 "register_operand")) >(match_dup 4))] > UNSPEC_PTEST)) > - (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") > + (set (match_operand:PRED_ALL 0 "register_operand") > (and:PRED_ALL (LOGICAL:PRED_ALL (match_dup 2) (match_dup 3)) > (match_dup 4)))] >"TARGET_SVE" > - "s\t%0.b, %1/z, %2.b, %3.b" > + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] > + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b > + } > ) Could we leave out these empty trailing constraints? They're quite common in SVE & SME patterns and are specifically not meant to influence instruction selection. E.g. we've done the same thing for *cnot (to pick a random example). Agree with Kyrill's ok otherwise. Richard
Re: [PATCH 1/4]AArch64: convert several predicate patterns to new compact syntax
Hi Tamar, On Wed, 15 May 2024 at 11:28, Tamar Christina wrote: > Hi All, > > This converts the single alternative patterns to the new compact syntax > such > that when I add the new alternatives it's clearer what's being changed. > > Note that this will spew out a bunch of warnings from geninsn as it'll > warn that > @ is useless for a single alternative pattern. These are not fatal so > won't > break the build and are only temporary. > > No change in functionality is expected with this patch. > > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. > > Ok for master? Ok. Thanks, Kyrill > > Thanks, > Tamar > > gcc/ChangeLog: > > * config/aarch64/aarch64-sve.md (and3, > @aarch64_pred__z, *3_cc, > *3_ptest, aarch64_pred__z, > *3_cc, *3_ptest, > aarch64_pred__z, *3_cc, > *3_ptest, *cmp_ptest, > @aarch64_pred_cmp_wide, > *aarch64_pred_cmp_wide_cc, > *aarch64_pred_cmp_wide_ptest, > *aarch64_brk_cc, > *aarch64_brk_ptest, @aarch64_brk, *aarch64_brkn_cc, > *aarch64_brkn_ptest, *aarch64_brk_cc, > *aarch64_brk_ptest, aarch64_rdffr_z, > *aarch64_rdffr_z_ptest, > *aarch64_rdffr_ptest, *aarch64_rdffr_z_cc, *aarch64_rdffr_cc): > Convert > to compact syntax. > * config/aarch64/aarch64-sve2.md > (@aarch64_pred_): Likewise. > > --- > diff --git a/gcc/config/aarch64/aarch64-sve.md > b/gcc/config/aarch64/aarch64-sve.md > index > 0434358122d2fde71bd0e0f850338e739e9be02c..839ab0627747d7a49bef7b0192ee9e7a42587ca0 > 100644 > --- a/gcc/config/aarch64/aarch64-sve.md > +++ b/gcc/config/aarch64/aarch64-sve.md > @@ -1156,76 +1156,86 @@ (define_insn "aarch64_rdffr" > > ;; Likewise with zero predication. > (define_insn "aarch64_rdffr_z" > - [(set (match_operand:VNx16BI 0 "register_operand" "=Upa") > + [(set (match_operand:VNx16BI 0 "register_operand") > (and:VNx16BI > (reg:VNx16BI FFRT_REGNUM) > - (match_operand:VNx16BI 1 "register_operand" "Upa")))] > + (match_operand:VNx16BI 1 "register_operand")))] >"TARGET_SVE && TARGET_NON_STREAMING" > - "rdffr\t%0.b, %1/z" > + {@ [ cons: =0, 1 ] > + [ Upa , Upa ] rdffr\t%0.b, %1/z > + } > ) > > ;; Read the FFR to test for a fault, without using the predicate result. > (define_insn "*aarch64_rdffr_z_ptest" >[(set (reg:CC_NZC CC_REGNUM) > (unspec:CC_NZC > - [(match_operand:VNx16BI 1 "register_operand" "Upa") > + [(match_operand:VNx16BI 1 "register_operand") >(match_dup 1) >(match_operand:SI 2 "aarch64_sve_ptrue_flag") >(and:VNx16BI > (reg:VNx16BI FFRT_REGNUM) > (match_dup 1))] > UNSPEC_PTEST)) > - (clobber (match_scratch:VNx16BI 0 "=Upa"))] > + (clobber (match_scratch:VNx16BI 0))] >"TARGET_SVE && TARGET_NON_STREAMING" > - "rdffrs\t%0.b, %1/z" > + {@ [ cons: =0, 1 , 2 ] > + [ Upa , Upa, ] rdffrs\t%0.b, %1/z > + } > ) > > ;; Same for unpredicated RDFFR when tested with a known PTRUE. > (define_insn "*aarch64_rdffr_ptest" >[(set (reg:CC_NZC CC_REGNUM) > (unspec:CC_NZC > - [(match_operand:VNx16BI 1 "register_operand" "Upa") > + [(match_operand:VNx16BI 1 "register_operand") >(match_dup 1) >(const_int SVE_KNOWN_PTRUE) >(reg:VNx16BI FFRT_REGNUM)] > UNSPEC_PTEST)) > - (clobber (match_scratch:VNx16BI 0 "=Upa"))] > + (clobber (match_scratch:VNx16BI 0))] >"TARGET_SVE && TARGET_NON_STREAMING" > - "rdffrs\t%0.b, %1/z" > + {@ [ cons: =0, 1 ] > + [ Upa , Upa ] rdffrs\t%0.b, %1/z > + } > ) > > ;; Read the FFR with zero predication and test the result. > (define_insn "*aarch64_rdffr_z_cc" >[(set (reg:CC_NZC CC_REGNUM) > (unspec:CC_NZC > - [(match_operand:VNx16BI 1 "register_operand" "Upa") > + [(match_operand:VNx16BI 1 "register_operand") >(match_dup 1) >(match_operand:SI 2 "aarch64_sve_ptrue_flag") >(and:VNx16BI > (reg:VNx16BI FFRT_REGNUM) > (match_dup 1))] > UNSPEC_PTEST)) > - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") > + (set (match_operand:VNx16BI 0 "register_operand") > (and:VNx16BI > (reg:VNx16BI FFRT_REGNUM) > (match_dup 1)))] >"TARGET_SVE && TARGET_NON_STREAMING" > - "rdffrs\t%0.b, %1/z" > + {@ [ cons: =0, 1 , 2 ] > + [ Upa , Upa, ] rdffrs\t%0.b, %1/z > + } > ) > > ;; Same for unpredicated RDFFR when tested with a known PTRUE. > (define_insn "*aarch64_rdffr_cc" >[(set (reg:CC_NZC CC_REGNUM) > (unspec:CC_NZC > - [(match_operand:VNx16BI 1 "register_operand" "Upa") > + [(match_operand:VNx16BI 1 "register_operand") >(match_dup 1) >(const_int SVE_KNOWN_PTRUE) >(reg:VNx16BI FFRT_REGNUM)] > UNSPEC_PTEST)) > - (set (match_operand:VNx16BI 0
[PATCH 1/4]AArch64: convert several predicate patterns to new compact syntax
Hi All, This converts the single alternative patterns to the new compact syntax such that when I add the new alternatives it's clearer what's being changed. Note that this will spew out a bunch of warnings from geninsn as it'll warn that @ is useless for a single alternative pattern. These are not fatal so won't break the build and are only temporary. No change in functionality is expected with this patch. Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * config/aarch64/aarch64-sve.md (and3, @aarch64_pred__z, *3_cc, *3_ptest, aarch64_pred__z, *3_cc, *3_ptest, aarch64_pred__z, *3_cc, *3_ptest, *cmp_ptest, @aarch64_pred_cmp_wide, *aarch64_pred_cmp_wide_cc, *aarch64_pred_cmp_wide_ptest, *aarch64_brk_cc, *aarch64_brk_ptest, @aarch64_brk, *aarch64_brkn_cc, *aarch64_brkn_ptest, *aarch64_brk_cc, *aarch64_brk_ptest, aarch64_rdffr_z, *aarch64_rdffr_z_ptest, *aarch64_rdffr_ptest, *aarch64_rdffr_z_cc, *aarch64_rdffr_cc): Convert to compact syntax. * config/aarch64/aarch64-sve2.md (@aarch64_pred_): Likewise. --- diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index 0434358122d2fde71bd0e0f850338e739e9be02c..839ab0627747d7a49bef7b0192ee9e7a42587ca0 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -1156,76 +1156,86 @@ (define_insn "aarch64_rdffr" ;; Likewise with zero predication. (define_insn "aarch64_rdffr_z" - [(set (match_operand:VNx16BI 0 "register_operand" "=Upa") + [(set (match_operand:VNx16BI 0 "register_operand") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) - (match_operand:VNx16BI 1 "register_operand" "Upa")))] + (match_operand:VNx16BI 1 "register_operand")))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffr\t%0.b, %1/z" + {@ [ cons: =0, 1 ] + [ Upa , Upa ] rdffr\t%0.b, %1/z + } ) ;; Read the FFR to test for a fault, without using the predicate result. (define_insn "*aarch64_rdffr_z_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 2 "aarch64_sve_ptrue_flag") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; Same for unpredicated RDFFR when tested with a known PTRUE. (define_insn "*aarch64_rdffr_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (const_int SVE_KNOWN_PTRUE) (reg:VNx16BI FFRT_REGNUM)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 ] + [ Upa , Upa ] rdffrs\t%0.b, %1/z + } ) ;; Read the FFR with zero predication and test the result. (define_insn "*aarch64_rdffr_z_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 2 "aarch64_sve_ptrue_flag") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1))] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1)))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; Same for unpredicated RDFFR when tested with a known PTRUE. (define_insn "*aarch64_rdffr_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (const_int SVE_KNOWN_PTRUE) (reg:VNx16BI FFRT_REGNUM)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (reg:VNx16BI FFRT_REGNUM))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; [R3 in the block comment above about FFR handling] @@ -6637,11 +6647,13 @@ (define_insn