diff options
author | Christophe Lyon <christophe.lyon@arm.com> | 2022-10-24 14:01:51 +0000 |
---|---|---|
committer | Christophe Lyon <christophe.lyon@arm.com> | 2023-05-05 16:12:00 +0200 |
commit | bcf66a4dcbff3f0a9cff2bd4d2efb4e9789d71c7 (patch) | |
tree | 98bcc7ebec51e70851dfc74f868088e1ba8f492f | |
parent | 9e838ad14bb5c0a4128f1fdaeeed7255b36989d0 (diff) | |
download | gcc-bcf66a4dcbff3f0a9cff2bd4d2efb4e9789d71c7.zip gcc-bcf66a4dcbff3f0a9cff2bd4d2efb4e9789d71c7.tar.gz gcc-bcf66a4dcbff3f0a9cff2bd4d2efb4e9789d71c7.tar.bz2 |
arm: [MVE intrinsics] factorize vmaxq vminq
Factorize vmaxq and vminq so that they use the same pattern.
2022-09-08 Christophe Lyon <christophe.lyon@arm.com>
gcc/
* config/arm/iterators.md (MAX_MIN_SU): New.
(max_min_su_str): New.
(max_min_supf): New.
* config/arm/mve.md (mve_vmaxq_s<mode>, mve_vmaxq_u<mode>)
(mve_vminq_s<mode>, mve_vminq_u<mode>): Merge into ...
(mve_<max_min_su_str>q_<max_min_supf><mode>): ... this.
-rw-r--r-- | gcc/config/arm/iterators.md | 11 | ||||
-rw-r--r-- | gcc/config/arm/mve.md | 44 |
2 files changed, 16 insertions, 39 deletions
diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md index 3133642..9ff61e0 100644 --- a/gcc/config/arm/iterators.md +++ b/gcc/config/arm/iterators.md @@ -330,6 +330,9 @@ ;; Saturating addition, subtraction (define_code_iterator SSPLUSMINUS [ss_plus ss_minus]) +;; Max/Min iterator, to factorize MVE patterns +(define_code_iterator MAX_MIN_SU [smax umax smin umin]) + ;; MVE integer binary operations. (define_code_iterator MVE_INT_BINARY_RTX [plus minus mult]) @@ -1271,6 +1274,14 @@ (define_code_attr float_SUP [(unsigned_float "U") (float "S")]) +;; max/min for MVE +(define_code_attr max_min_su_str [(smax "vmax") (umax "vmax") (smin "vmin") (umin "vmin")]) + +(define_code_attr max_min_supf [ + (smax "s") (umax "u") + (smin "s") (umin "u") + ]) + ;;---------------------------------------------------------------------------- ;; Int attributes ;;---------------------------------------------------------------------------- diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index c8cb4e4..44409b4 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -1106,29 +1106,20 @@ ]) ;; -;; [vmaxq_u, vmaxq_s]) +;; [vmaxq_u, vmaxq_s] +;; [vminq_s, vminq_u] ;; -(define_insn "mve_vmaxq_s<mode>" +(define_insn "mve_<max_min_su_str>q_<max_min_supf><mode>" [ (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (smax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") + (MAX_MIN_SU:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") (match_operand:MVE_2 2 "s_register_operand" "w"))) ] "TARGET_HAVE_MVE" - "vmax.%#<V_s_elem>\t%q0, %q1, %q2" + "<max_min_su_str>.<max_min_supf>%#<V_sz_elem>\t%q0, %q1, %q2" [(set_attr "type" "mve_move") ]) -(define_insn "mve_vmaxq_u<mode>" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (umax:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE" - "vmax.%#<V_u_elem>\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) ;; ;; [vmaxvq_u, vmaxvq_s]) @@ -1176,31 +1167,6 @@ ]) ;; -;; [vminq_s, vminq_u]) -;; -(define_insn "mve_vminq_s<mode>" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (smin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE" - "vmin.%#<V_s_elem>\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -(define_insn "mve_vminq_u<mode>" - [ - (set (match_operand:MVE_2 0 "s_register_operand" "=w") - (umin:MVE_2 (match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand:MVE_2 2 "s_register_operand" "w"))) - ] - "TARGET_HAVE_MVE" - "vmin.%#<V_u_elem>\t%q0, %q1, %q2" - [(set_attr "type" "mve_move") -]) - -;; ;; [vminvq_u, vminvq_s]) ;; (define_insn "mve_vminvq_<supf><mode>" |