> -----Original Message----- > From: Gcc-patches <gcc-patches-boun...@gcc.gnu.org> On Behalf Of > Christophe Lyon via Gcc-patches > Sent: 30 April 2021 15:10 > To: gcc-patches@gcc.gnu.org > Subject: [PATCH 5/9] arm: MVE: Factorize vcmp_*f* > > Like in the previous, we factorize the vcmp_*f* patterns to make > maintenance easier. Ok. Thanks, Kyrill > > 2021-03-12 Christophe Lyon <christophe.l...@linaro.org> > > gcc/ > * config/arm/iterators.md (MVE_FP_COMPARISONS): New. > * config/arm/mve.md (mve_vcmp<mve_cmp_op>q_f<mode>) > (mve_vcmp<mve_cmp_op>q_n_f<mode>): New, merge all vcmp_*f* > patterns. > (mve_vcmpeqq_f<mode>, mve_vcmpeqq_n_f<mode>, > mve_vcmpgeq_f<mode>) > (mve_vcmpgeq_n_f<mode>, mve_vcmpgtq_f<mode>) > (mve_vcmpgtq_n_f<mode>, mve_vcmpleq_f<mode>) > (mve_vcmpleq_n_f<mode>, mve_vcmpltq_f<mode>) > (mve_vcmpltq_n_f<mode>, mve_vcmpneq_f<mode>) > (mve_vcmpneq_n_f<mode>): Remove. > * config/arm/unspecs.md (VCMPEQQ_F, VCMPEQQ_N_F, > VCMPGEQ_F) > (VCMPGEQ_N_F, VCMPGTQ_F, VCMPGTQ_N_F, VCMPLEQ_F, > VCMPLEQ_N_F) > (VCMPLTQ_F, VCMPLTQ_N_F, VCMPNEQ_F, VCMPNEQ_N_F): > Remove. > --- > gcc/config/arm/iterators.md | 1 + > gcc/config/arm/mve.md | 172 > +++----------------------------------------- > gcc/config/arm/unspecs.md | 12 ---- > 3 files changed, 11 insertions(+), 174 deletions(-) > > diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md > index 29347f7..95df8bd 100644 > --- a/gcc/config/arm/iterators.md > +++ b/gcc/config/arm/iterators.md > @@ -287,6 +287,7 @@ (define_code_iterator GTUGEU [gtu geu]) > (define_code_iterator COMPARISONS [eq gt ge le lt]) > ;; Comparisons for MVE > (define_code_iterator MVE_COMPARISONS [eq ge geu gt gtu le lt ne]) > +(define_code_iterator MVE_FP_COMPARISONS [eq ge gt le lt ne]) > > ;; A list of ... > (define_code_iterator IOR_XOR [ior xor]) > diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md > index 40baff7..7c846a4 100644 > --- a/gcc/config/arm/mve.md > +++ b/gcc/config/arm/mve.md > @@ -1926,182 +1926,30 @@ (define_insn "mve_vcaddq<mve_rot><mode>" > ]) > > ;; > -;; [vcmpeqq_f]) > +;; [vcmpeqq_f, vcmpgeq_f, vcmpgtq_f, vcmpleq_f, vcmpltq_f, vcmpneq_f]) > ;; > -(define_insn "mve_vcmpeqq_f<mode>" > +(define_insn "mve_vcmp<mve_cmp_op>q_f<mode>" > [ > (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:MVE_0 2 "s_register_operand" "w")] > - VCMPEQQ_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> eq, %q1, %q2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpeqq_n_f]) > -;; > -(define_insn "mve_vcmpeqq_n_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:<V_elem> 2 "s_register_operand" "r")] > - VCMPEQQ_N_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> eq, %q1, %2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpgeq_f]) > -;; > -(define_insn "mve_vcmpgeq_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:MVE_0 2 "s_register_operand" "w")] > - VCMPGEQ_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> ge, %q1, %q2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpgeq_n_f]) > -;; > -(define_insn "mve_vcmpgeq_n_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:<V_elem> 2 "s_register_operand" "r")] > - VCMPGEQ_N_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> ge, %q1, %2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpgtq_f]) > -;; > -(define_insn "mve_vcmpgtq_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:MVE_0 2 "s_register_operand" "w")] > - VCMPGTQ_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> gt, %q1, %q2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpgtq_n_f]) > -;; > -(define_insn "mve_vcmpgtq_n_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:<V_elem> 2 "s_register_operand" "r")] > - VCMPGTQ_N_F)) > + (MVE_FP_COMPARISONS:HI (match_operand:MVE_0 1 > "s_register_operand" "w") > + (match_operand:MVE_0 2 "s_register_operand" > "w"))) > ] > "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> gt, %q1, %2" > + "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %q2" > [(set_attr "type" "mve_move") > ]) > > ;; > -;; [vcmpleq_f]) > +;; [vcmpeqq_n_f, vcmpgeq_n_f, vcmpgtq_n_f, vcmpleq_n_f, vcmpltq_n_f, > vcmpneq_n_f]) > ;; > -(define_insn "mve_vcmpleq_f<mode>" > +(define_insn "mve_vcmp<mve_cmp_op>q_n_f<mode>" > [ > (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:MVE_0 2 "s_register_operand" "w")] > - VCMPLEQ_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> le, %q1, %q2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpleq_n_f]) > -;; > -(define_insn "mve_vcmpleq_n_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:<V_elem> 2 "s_register_operand" "r")] > - VCMPLEQ_N_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> le, %q1, %2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpltq_f]) > -;; > -(define_insn "mve_vcmpltq_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:MVE_0 2 "s_register_operand" "w")] > - VCMPLTQ_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> lt, %q1, %q2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpltq_n_f]) > -;; > -(define_insn "mve_vcmpltq_n_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:<V_elem> 2 "s_register_operand" "r")] > - VCMPLTQ_N_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> lt, %q1, %2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpneq_f]) > -;; > -(define_insn "mve_vcmpneq_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:MVE_0 2 "s_register_operand" "w")] > - VCMPNEQ_F)) > - ] > - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> ne, %q1, %q2" > - [(set_attr "type" "mve_move") > -]) > - > -;; > -;; [vcmpneq_n_f]) > -;; > -(define_insn "mve_vcmpneq_n_f<mode>" > - [ > - (set (match_operand:HI 0 "vpr_register_operand" "=Up") > - (unspec:HI [(match_operand:MVE_0 1 "s_register_operand" "w") > - (match_operand:<V_elem> 2 "s_register_operand" "r")] > - VCMPNEQ_N_F)) > + (MVE_FP_COMPARISONS:HI (match_operand:MVE_0 1 > "s_register_operand" "w") > + (match_operand:<V_elem> 2 > "s_register_operand" "r"))) > ] > "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" > - "vcmp.f%#<V_sz_elem> ne, %q1, %2" > + "vcmp.f%#<V_sz_elem> <mve_cmp_op>, %q1, %2" > [(set_attr "type" "mve_move") > ]) > > diff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md > index 4d47ab7..07ca53b 100644 > --- a/gcc/config/arm/unspecs.md > +++ b/gcc/config/arm/unspecs.md > @@ -710,18 +710,6 @@ (define_c_enum "unspec" [ > VABDQ_M_U > VABDQ_F > VADDQ_N_F > - VCMPEQQ_F > - VCMPEQQ_N_F > - VCMPGEQ_F > - VCMPGEQ_N_F > - VCMPGTQ_F > - VCMPGTQ_N_F > - VCMPLEQ_F > - VCMPLEQ_N_F > - VCMPLTQ_F > - VCMPLTQ_N_F > - VCMPNEQ_F > - VCMPNEQ_N_F > VMAXNMAQ_F > VMAXNMAVQ_F > VMAXNMQ_F > -- > 2.7.4
RE: [PATCH 5/9] arm: MVE: Factorize vcmp_*f*
Kyrylo Tkachov via Gcc-patches Mon, 10 May 2021 05:00:30 -0700
- [PATCH 1/9] arm: MVE: Convert vcmp[eq... Christophe Lyon via Gcc-patches
- [PATCH 2/9] arm: MVE: Cleanup vc... Christophe Lyon via Gcc-patches
- RE: [PATCH 2/9] arm: MVE: Cl... Kyrylo Tkachov via Gcc-patches
- [PATCH 4/9] arm: MVE: Factorize ... Christophe Lyon via Gcc-patches
- RE: [PATCH 4/9] arm: MVE: Fa... Kyrylo Tkachov via Gcc-patches
- [PATCH 5/9] arm: MVE: Factorize ... Christophe Lyon via Gcc-patches
- RE: [PATCH 5/9] arm: MVE: Fa... Kyrylo Tkachov via Gcc-patches
- [PATCH 3/9] arm: MVE: Remove _s ... Christophe Lyon via Gcc-patches
- RE: [PATCH 3/9] arm: MVE: Re... Kyrylo Tkachov via Gcc-patches
- [PATCH 7/9] arm: Auto-vectorizat... Christophe Lyon via Gcc-patches
- Re: [PATCH 7/9] arm: Auto-ve... Andre Vieira (lists) via Gcc-patches
- Re: [PATCH 7/9] arm: Aut... Christophe Lyon via Gcc-patches
- Re: [PATCH 7/9] arm:... Christophe Lyon via Gcc-patches
- Re: [PATCH 7/9]... Christophe Lyon via Gcc-patches
- Re: [PATCH ... Christophe Lyon via Gcc-patches
- RE: [PATCH ... Kyrylo Tkachov via Gcc-patches
- [PATCH 6/9] arm: Auto-vectorizat... Christophe Lyon via Gcc-patches