On 5/2/23 18:31, Kyrylo Tkachov wrote:


-----Original Message-----
From: Christophe Lyon <christophe.l...@arm.com>
Sent: Tuesday, April 18, 2023 2:46 PM
To: gcc-patches@gcc.gnu.org; Kyrylo Tkachov <kyrylo.tkac...@arm.com>;
Richard Earnshaw <richard.earns...@arm.com>; Richard Sandiford
<richard.sandif...@arm.com>
Cc: Christophe Lyon <christophe.l...@arm.com>
Subject: [PATCH 08/22] arm: [MVE intrinsics] rework vaddq vmulq vsubq

Implement vaddq, vmulq, vsubq using the new MVE builtins framework.

2022-09-08  Christophe Lyon <christophe.l...@arm.com>

        gcc/

        * config/arm/arm-mve-builtins-base.cc
(FUNCTION_WITH_RTX_M_N):
        New.
        (vaddq, vmulq, vsubq): New.
        * config/arm/arm-mve-builtins-base.def (vaddq, vmulq, vsubq): New.
        * config/arm/arm-mve-builtins-base.h (vaddq, vmulq, vsubq): New.
        * config/arm/arm_mve.h (vaddq): Remove.
        (vaddq_m): Remove.
        (vaddq_x): Remove.
        (vaddq_n_u8): Remove.
        (vaddq_n_s8): Remove.
        (vaddq_n_u16): Remove.
        (vaddq_n_s16): Remove.
        (vaddq_n_u32): Remove.
        (vaddq_n_s32): Remove.
        (vaddq_n_f16): Remove.
        (vaddq_n_f32): Remove.
        (vaddq_m_n_s8): Remove.
        (vaddq_m_n_s32): Remove.
        (vaddq_m_n_s16): Remove.
        (vaddq_m_n_u8): Remove.
        (vaddq_m_n_u32): Remove.
        (vaddq_m_n_u16): Remove.
        (vaddq_m_s8): Remove.
        (vaddq_m_s32): Remove.
        (vaddq_m_s16): Remove.
        (vaddq_m_u8): Remove.
        (vaddq_m_u32): Remove.
        (vaddq_m_u16): Remove.
        (vaddq_m_f32): Remove.
        (vaddq_m_f16): Remove.
        (vaddq_m_n_f32): Remove.
        (vaddq_m_n_f16): Remove.
        (vaddq_s8): Remove.
        (vaddq_s16): Remove.
        (vaddq_s32): Remove.
        (vaddq_u8): Remove.
        (vaddq_u16): Remove.
        (vaddq_u32): Remove.
        (vaddq_f16): Remove.
        (vaddq_f32): Remove.
        (vaddq_x_s8): Remove.
        (vaddq_x_s16): Remove.
        (vaddq_x_s32): Remove.
        (vaddq_x_n_s8): Remove.
        (vaddq_x_n_s16): Remove.
        (vaddq_x_n_s32): Remove.
        (vaddq_x_u8): Remove.
        (vaddq_x_u16): Remove.
        (vaddq_x_u32): Remove.
        (vaddq_x_n_u8): Remove.
        (vaddq_x_n_u16): Remove.
        (vaddq_x_n_u32): Remove.
        (vaddq_x_f16): Remove.
        (vaddq_x_f32): Remove.
        (vaddq_x_n_f16): Remove.
        (vaddq_x_n_f32): Remove.
        (__arm_vaddq_n_u8): Remove.
        (__arm_vaddq_n_s8): Remove.
        (__arm_vaddq_n_u16): Remove.
        (__arm_vaddq_n_s16): Remove.
        (__arm_vaddq_n_u32): Remove.
        (__arm_vaddq_n_s32): Remove.
        (__arm_vaddq_m_n_s8): Remove.
        (__arm_vaddq_m_n_s32): Remove.
        (__arm_vaddq_m_n_s16): Remove.
        (__arm_vaddq_m_n_u8): Remove.
        (__arm_vaddq_m_n_u32): Remove.
        (__arm_vaddq_m_n_u16): Remove.
        (__arm_vaddq_m_s8): Remove.
        (__arm_vaddq_m_s32): Remove.
        (__arm_vaddq_m_s16): Remove.
        (__arm_vaddq_m_u8): Remove.
        (__arm_vaddq_m_u32): Remove.
        (__arm_vaddq_m_u16): Remove.
        (__arm_vaddq_s8): Remove.
        (__arm_vaddq_s16): Remove.
        (__arm_vaddq_s32): Remove.
        (__arm_vaddq_u8): Remove.
        (__arm_vaddq_u16): Remove.
        (__arm_vaddq_u32): Remove.
        (__arm_vaddq_x_s8): Remove.
        (__arm_vaddq_x_s16): Remove.
        (__arm_vaddq_x_s32): Remove.
        (__arm_vaddq_x_n_s8): Remove.
        (__arm_vaddq_x_n_s16): Remove.
        (__arm_vaddq_x_n_s32): Remove.
        (__arm_vaddq_x_u8): Remove.
        (__arm_vaddq_x_u16): Remove.
        (__arm_vaddq_x_u32): Remove.
        (__arm_vaddq_x_n_u8): Remove.
        (__arm_vaddq_x_n_u16): Remove.
        (__arm_vaddq_x_n_u32): Remove.
        (__arm_vaddq_n_f16): Remove.
        (__arm_vaddq_n_f32): Remove.
        (__arm_vaddq_m_f32): Remove.
        (__arm_vaddq_m_f16): Remove.
        (__arm_vaddq_m_n_f32): Remove.
        (__arm_vaddq_m_n_f16): Remove.
        (__arm_vaddq_f16): Remove.
        (__arm_vaddq_f32): Remove.
        (__arm_vaddq_x_f16): Remove.
        (__arm_vaddq_x_f32): Remove.
        (__arm_vaddq_x_n_f16): Remove.
        (__arm_vaddq_x_n_f32): Remove.
        (__arm_vaddq): Remove.
        (__arm_vaddq_m): Remove.
        (__arm_vaddq_x): Remove.
        (vmulq): Remove.
        (vmulq_m): Remove.
        (vmulq_x): Remove.
        (vmulq_u8): Remove.
        (vmulq_n_u8): Remove.
        (vmulq_s8): Remove.
        (vmulq_n_s8): Remove.
        (vmulq_u16): Remove.
        (vmulq_n_u16): Remove.
        (vmulq_s16): Remove.
        (vmulq_n_s16): Remove.
        (vmulq_u32): Remove.
        (vmulq_n_u32): Remove.
        (vmulq_s32): Remove.
        (vmulq_n_s32): Remove.
        (vmulq_n_f16): Remove.
        (vmulq_f16): Remove.
        (vmulq_n_f32): Remove.
        (vmulq_f32): Remove.
        (vmulq_m_n_s8): Remove.
        (vmulq_m_n_s32): Remove.
        (vmulq_m_n_s16): Remove.
        (vmulq_m_n_u8): Remove.
        (vmulq_m_n_u32): Remove.
        (vmulq_m_n_u16): Remove.
        (vmulq_m_s8): Remove.
        (vmulq_m_s32): Remove.
        (vmulq_m_s16): Remove.
        (vmulq_m_u8): Remove.
        (vmulq_m_u32): Remove.
        (vmulq_m_u16): Remove.
        (vmulq_m_f32): Remove.
        (vmulq_m_f16): Remove.
        (vmulq_m_n_f32): Remove.
        (vmulq_m_n_f16): Remove.
        (vmulq_x_s8): Remove.
        (vmulq_x_s16): Remove.
        (vmulq_x_s32): Remove.
        (vmulq_x_n_s8): Remove.
        (vmulq_x_n_s16): Remove.
        (vmulq_x_n_s32): Remove.
        (vmulq_x_u8): Remove.
        (vmulq_x_u16): Remove.
        (vmulq_x_u32): Remove.
        (vmulq_x_n_u8): Remove.
        (vmulq_x_n_u16): Remove.
        (vmulq_x_n_u32): Remove.
        (vmulq_x_f16): Remove.
        (vmulq_x_f32): Remove.
        (vmulq_x_n_f16): Remove.
        (vmulq_x_n_f32): Remove.
        (__arm_vmulq_u8): Remove.
        (__arm_vmulq_n_u8): Remove.
        (__arm_vmulq_s8): Remove.
        (__arm_vmulq_n_s8): Remove.
        (__arm_vmulq_u16): Remove.
        (__arm_vmulq_n_u16): Remove.
        (__arm_vmulq_s16): Remove.
        (__arm_vmulq_n_s16): Remove.
        (__arm_vmulq_u32): Remove.
        (__arm_vmulq_n_u32): Remove.
        (__arm_vmulq_s32): Remove.
        (__arm_vmulq_n_s32): Remove.
        (__arm_vmulq_m_n_s8): Remove.
        (__arm_vmulq_m_n_s32): Remove.
        (__arm_vmulq_m_n_s16): Remove.
        (__arm_vmulq_m_n_u8): Remove.
        (__arm_vmulq_m_n_u32): Remove.
        (__arm_vmulq_m_n_u16): Remove.
        (__arm_vmulq_m_s8): Remove.
        (__arm_vmulq_m_s32): Remove.
        (__arm_vmulq_m_s16): Remove.
        (__arm_vmulq_m_u8): Remove.
        (__arm_vmulq_m_u32): Remove.
        (__arm_vmulq_m_u16): Remove.
        (__arm_vmulq_x_s8): Remove.
        (__arm_vmulq_x_s16): Remove.
        (__arm_vmulq_x_s32): Remove.
        (__arm_vmulq_x_n_s8): Remove.
        (__arm_vmulq_x_n_s16): Remove.
        (__arm_vmulq_x_n_s32): Remove.
        (__arm_vmulq_x_u8): Remove.
        (__arm_vmulq_x_u16): Remove.
        (__arm_vmulq_x_u32): Remove.
        (__arm_vmulq_x_n_u8): Remove.
        (__arm_vmulq_x_n_u16): Remove.
        (__arm_vmulq_x_n_u32): Remove.
        (__arm_vmulq_n_f16): Remove.
        (__arm_vmulq_f16): Remove.
        (__arm_vmulq_n_f32): Remove.
        (__arm_vmulq_f32): Remove.
        (__arm_vmulq_m_f32): Remove.
        (__arm_vmulq_m_f16): Remove.
        (__arm_vmulq_m_n_f32): Remove.
        (__arm_vmulq_m_n_f16): Remove.
        (__arm_vmulq_x_f16): Remove.
        (__arm_vmulq_x_f32): Remove.
        (__arm_vmulq_x_n_f16): Remove.
        (__arm_vmulq_x_n_f32): Remove.
        (__arm_vmulq): Remove.
        (__arm_vmulq_m): Remove.
        (__arm_vmulq_x): Remove.
        (vsubq): Remove.
        (vsubq_m): Remove.
        (vsubq_x): Remove.
        (vsubq_n_f16): Remove.
        (vsubq_n_f32): Remove.
        (vsubq_u8): Remove.
        (vsubq_n_u8): Remove.
        (vsubq_s8): Remove.
        (vsubq_n_s8): Remove.
        (vsubq_u16): Remove.
        (vsubq_n_u16): Remove.
        (vsubq_s16): Remove.
        (vsubq_n_s16): Remove.
        (vsubq_u32): Remove.
        (vsubq_n_u32): Remove.
        (vsubq_s32): Remove.
        (vsubq_n_s32): Remove.
        (vsubq_f16): Remove.
        (vsubq_f32): Remove.
        (vsubq_m_s8): Remove.
        (vsubq_m_u8): Remove.
        (vsubq_m_s16): Remove.
        (vsubq_m_u16): Remove.
        (vsubq_m_s32): Remove.
        (vsubq_m_u32): Remove.
        (vsubq_m_n_s8): Remove.
        (vsubq_m_n_s32): Remove.
        (vsubq_m_n_s16): Remove.
        (vsubq_m_n_u8): Remove.
        (vsubq_m_n_u32): Remove.
        (vsubq_m_n_u16): Remove.
        (vsubq_m_f32): Remove.
        (vsubq_m_f16): Remove.
        (vsubq_m_n_f32): Remove.
        (vsubq_m_n_f16): Remove.
        (vsubq_x_s8): Remove.
        (vsubq_x_s16): Remove.
        (vsubq_x_s32): Remove.
        (vsubq_x_n_s8): Remove.
        (vsubq_x_n_s16): Remove.
        (vsubq_x_n_s32): Remove.
        (vsubq_x_u8): Remove.
        (vsubq_x_u16): Remove.
        (vsubq_x_u32): Remove.
        (vsubq_x_n_u8): Remove.
        (vsubq_x_n_u16): Remove.
        (vsubq_x_n_u32): Remove.
        (vsubq_x_f16): Remove.
        (vsubq_x_f32): Remove.
        (vsubq_x_n_f16): Remove.
        (vsubq_x_n_f32): Remove.
        (__arm_vsubq_u8): Remove.
        (__arm_vsubq_n_u8): Remove.
        (__arm_vsubq_s8): Remove.
        (__arm_vsubq_n_s8): Remove.
        (__arm_vsubq_u16): Remove.
        (__arm_vsubq_n_u16): Remove.
        (__arm_vsubq_s16): Remove.
        (__arm_vsubq_n_s16): Remove.
        (__arm_vsubq_u32): Remove.
        (__arm_vsubq_n_u32): Remove.
        (__arm_vsubq_s32): Remove.
        (__arm_vsubq_n_s32): Remove.
        (__arm_vsubq_m_s8): Remove.
        (__arm_vsubq_m_u8): Remove.
        (__arm_vsubq_m_s16): Remove.
        (__arm_vsubq_m_u16): Remove.
        (__arm_vsubq_m_s32): Remove.
        (__arm_vsubq_m_u32): Remove.
        (__arm_vsubq_m_n_s8): Remove.
        (__arm_vsubq_m_n_s32): Remove.
        (__arm_vsubq_m_n_s16): Remove.
        (__arm_vsubq_m_n_u8): Remove.
        (__arm_vsubq_m_n_u32): Remove.
        (__arm_vsubq_m_n_u16): Remove.
        (__arm_vsubq_x_s8): Remove.
        (__arm_vsubq_x_s16): Remove.
        (__arm_vsubq_x_s32): Remove.
        (__arm_vsubq_x_n_s8): Remove.
        (__arm_vsubq_x_n_s16): Remove.
        (__arm_vsubq_x_n_s32): Remove.
        (__arm_vsubq_x_u8): Remove.
        (__arm_vsubq_x_u16): Remove.
        (__arm_vsubq_x_u32): Remove.
        (__arm_vsubq_x_n_u8): Remove.
        (__arm_vsubq_x_n_u16): Remove.
        (__arm_vsubq_x_n_u32): Remove.
        (__arm_vsubq_n_f16): Remove.
        (__arm_vsubq_n_f32): Remove.
        (__arm_vsubq_f16): Remove.
        (__arm_vsubq_f32): Remove.
        (__arm_vsubq_m_f32): Remove.
        (__arm_vsubq_m_f16): Remove.
        (__arm_vsubq_m_n_f32): Remove.
        (__arm_vsubq_m_n_f16): Remove.
        (__arm_vsubq_x_f16): Remove.
        (__arm_vsubq_x_f32): Remove.
        (__arm_vsubq_x_n_f16): Remove.
        (__arm_vsubq_x_n_f32): Remove.
        (__arm_vsubq): Remove.
        (__arm_vsubq_m): Remove.
        (__arm_vsubq_x): Remove.
        * config/arm/arm_mve_builtins.def (vsubq_u, vsubq_s, vsubq_f):
        Remove.
        (vmulq_u, vmulq_s, vmulq_f): Remove.
        * config/arm/mve.md (mve_vsubq_<supf><mode>): Remove.
        (mve_vmulq_<supf><mode>): Remove.

[snip]

diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md
index 5167fbc6add..ccb3cf23304 100644
--- a/gcc/config/arm/mve.md
+++ b/gcc/config/arm/mve.md
@@ -1353,18 +1353,6 @@ (define_insn "mve_vmulltq_int_<supf><mode>"
  ;; [vmulq_u, vmulq_s])
  ;; [vsubq_s, vsubq_u])
  ;;
-(define_insn "mve_vmulq_<supf><mode>"
-  [
-    (set (match_operand:MVE_2 0 "s_register_operand" "=w")
-       (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand"
"w")
-                      (match_operand:MVE_2 2 "s_register_operand" "w")]
-        VMULQ))
-  ]
-  "TARGET_HAVE_MVE"
-  "vmul.i%#<V_sz_elem>\t%q0, %q1, %q2"
-  [(set_attr "type" "mve_move")
-])
-
  (define_insn "mve_<mve_addsubmul>q<mode>"
    [
     (set (match_operand:MVE_2 0 "s_register_operand" "=w")
@@ -1742,21 +1730,6 @@ (define_insn "mve_vshlq_r_<supf><mode>"
    [(set_attr "type" "mve_move")
  ])

-;;
-;; [vsubq_s, vsubq_u])
-;;
-(define_insn "mve_vsubq_<supf><mode>"
-  [
-   (set (match_operand:MVE_2 0 "s_register_operand" "=w")
-       (unspec:MVE_2 [(match_operand:MVE_2 1 "s_register_operand"
"w")
-                      (match_operand:MVE_2 2 "s_register_operand" "w")]
-        VSUBQ))
-  ]
-  "TARGET_HAVE_MVE"
-  "vsub.i%#<V_sz_elem>\t%q0, %q1, %q2"
-  [(set_attr "type" "mve_move")
-])
-

Just to make sure I understand correctly, are these patterns being removed 
because the new builtins are wired through the factored patterns in patch 
[07/22]?
If so, ok.

Yes. In patch 07/22, we introduce mve_<mve_addsubmul>q<mode> which uses standard RTX codes, instead of unspecs. With this patch 08/22, the builtins now rely on the RTX codes, so the unspec-based patterns as useless (as was already the case for "add").

Christophe

Thanks,
Kyrill

  ;;
  ;; [vabdq_f])
  ;;
--
2.34.1

Reply via email to