> -----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.
Thanks,
Kyrill

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

Reply via email to