On 27/02/2024 13:56, Andre Vieira wrote:
>
> This patch adds an attribute to the mve md patterns to be able to identify
> predicable MVE instructions and what their predicated and unpredicated
> variants
> are. This attribute is used to encode the icode of the unpredicated variant
> of
> an instruction in its predicated variant.
>
> This will make it possible for us to transform VPT-predicated insns in
> the insn chain into their unpredicated equivalents when transforming the loop
> into a MVE Tail-Predicated Low Overhead Loop. For example:
> `mve_vldrbq_z_ -> mve_vldrbq_`.
>
> gcc/ChangeLog:
>
> * config/arm/arm.md (mve_unpredicated_insn): New attribute.
> * config/arm/arm.h (MVE_VPT_PREDICATED_INSN_P): New define.
> (MVE_VPT_UNPREDICATED_INSN_P): Likewise.
> (MVE_VPT_PREDICABLE_INSN_P): Likewise.
> * config/arm/vec-common.md (mve_vshlq_): Add attribute.
> * config/arm/mve.md (arm_vcx1q_p_v16qi): Add attribute.
> (arm_vcx1qv16qi): Likewise.
> (arm_vcx1qav16qi): Likewise.
> (arm_vcx1qv16qi): Likewise.
> (arm_vcx2q_p_v16qi): Likewise.
> (arm_vcx2qv16qi): Likewise.
> (arm_vcx2qav16qi): Likewise.
> (arm_vcx2qv16qi): Likewise.
> (arm_vcx3q_p_v16qi): Likewise.
> (arm_vcx3qv16qi): Likewise.
> (arm_vcx3qav16qi): Likewise.
> (arm_vcx3qv16qi): Likewise.
> (@mve_q_): Likewise.
> (@mve_q_int_): Likewise.
> (@mve_q_v4si): Likewise.
> (@mve_q_n_): Likewise.
> (@mve_q_r_): Likewise.
> (@mve_q_f): Likewise.
> (@mve_q_m_): Likewise.
> (@mve_q_m_n_): Likewise.
> (@mve_q_m_r_): Likewise.
> (@mve_q_m_f): Likewise.
> (@mve_q_int_m_): Likewise.
> (@mve_q_p_v4si): Likewise.
> (@mve_q_p_): Likewise.
> (@mve_q_): Likewise.
> (@mve_q_f): Likewise.
> (@mve_q_m_): Likewise.
> (@mve_q_m_f): Likewise.
> (mve_vq_f): Likewise.
> (mve_q): Likewise.
> (mve_q_f): Likewise.
> (mve_vadciq_v4si): Likewise.
> (mve_vadciq_m_v4si): Likewise.
> (mve_vadcq_v4si): Likewise.
> (mve_vadcq_m_v4si): Likewise.
> (mve_vandq_): Likewise.
> (mve_vandq_f): Likewise.
> (mve_vandq_m_): Likewise.
> (mve_vandq_m_f): Likewise.
> (mve_vandq_s): Likewise.
> (mve_vandq_u): Likewise.
> (mve_vbicq_): Likewise.
> (mve_vbicq_f): Likewise.
> (mve_vbicq_m_): Likewise.
> (mve_vbicq_m_f): Likewise.
> (mve_vbicq_m_n_): Likewise.
> (mve_vbicq_n_): Likewise.
> (mve_vbicq_s): Likewise.
> (mve_vbicq_u): Likewise.
> (@mve_vclzq_s): Likewise.
> (mve_vclzq_u): Likewise.
> (@mve_vcmp_q_): Likewise.
> (@mve_vcmp_q_n_): Likewise.
> (@mve_vcmp_q_f): Likewise.
> (@mve_vcmp_q_n_f): Likewise.
> (@mve_vcmp_q_m_f): Likewise.
> (@mve_vcmp_q_m_n_): Likewise.
> (@mve_vcmp_q_m_): Likewise.
> (@mve_vcmp_q_m_n_f): Likewise.
> (mve_vctpq): Likewise.
> (mve_vctpq_m): Likewise.
> (mve_vcvtaq_): Likewise.
> (mve_vcvtaq_m_): Likewise.
> (mve_vcvtbq_f16_f32v8hf): Likewise.
> (mve_vcvtbq_f32_f16v4sf): Likewise.
> (mve_vcvtbq_m_f16_f32v8hf): Likewise.
> (mve_vcvtbq_m_f32_f16v4sf): Likewise.
> (mve_vcvtmq_): Likewise.
> (mve_vcvtmq_m_): Likewise.
> (mve_vcvtnq_): Likewise.
> (mve_vcvtnq_m_): Likewise.
> (mve_vcvtpq_): Likewise.
> (mve_vcvtpq_m_): Likewise.
> (mve_vcvtq_from_f_): Likewise.
> (mve_vcvtq_m_from_f_): Likewise.
> (mve_vcvtq_m_n_from_f_): Likewise.
> (mve_vcvtq_m_n_to_f_): Likewise.
> (mve_vcvtq_m_to_f_): Likewise.
> (mve_vcvtq_n_from_f_): Likewise.
> (mve_vcvtq_n_to_f_): Likewise.
> (mve_vcvtq_to_f_): Likewise.
> (mve_vcvttq_f16_f32v8hf): Likewise.
> (mve_vcvttq_f32_f16v4sf): Likewise.
> (mve_vcvttq_m_f16_f32v8hf): Likewise.
> (mve_vcvttq_m_f32_f16v4sf): Likewise.
> (mve_vdwdupq_m_wb_u_insn): Likewise.
> (mve_vdwdupq_wb_u_insn): Likewise.
> (mve_veorq_s>): Likewise.
> (mve_veorq_u>): Likewise.
> (mve_veorq_f): Likewise.
> (mve_vidupq_m_wb_u_insn): Likewise.
> (mve_vidupq_u_insn): Likewise.
> (mve_viwdupq_m_wb_u_insn): Likewise.
> (mve_viwdupq_wb_u_insn): Likewise.
> (mve_vldrbq_): Likewise.
> (mve_vldrbq_gather_offset_): Likewise.
> (mve_vldrbq_gather_offset_z_): Likewise.
> (mve_vldrbq_z_): Likewise.
> (mve_vldrdq_gather_base_v2di): Likewise.
> (mve_vldrdq_gather_base_wb_v2di_insn): Likewise.
> (mve_vldrdq_gather_base_wb_z_v2di_insn): Likewise.
> (mve_vldrdq_gather_base_z_v2di): Likewise.
> (mve_vldrdq_gather_offset_v2di): Likewise.
> (mve_vldrdq_gather_offset_z_v2di): Likewise.
> (mve_vldrdq_gather_shifted_offset_v2di): Likewise.
> (mve_vldrdq_gather_shifted_offset_z_v2di): Likewise.
> (mve_vldrhq_): Likewise.
>