On Fri, 6 Dec 2024, Richard Earnshaw wrote: > The vcond{,u} expander paterns have been declared as obsolete. Remove > them from the Arm backend.
OK (not sure if you were expecting approval from me ;)), the patterns are no longer exercised anywhere. Richard. > gcc/ChangeLog: > > PR target/114189 > * config/arm/arm-protos.h (arm_expand_vcond): Delete prototype. > * config/arm/arm.cc (arm_expand_vcond): Delete function. > * config/arm/vec-common.md (vcond<mode><mode>): Delete pattern > (vcond<V_cvtto><mode>): Likewise. > (vcond<VH_cvtto><mode>): Likewise. > (vcondu<mode><v_cmp_result>): Likewise. > --- > gcc/config/arm/arm-protos.h | 1 - > gcc/config/arm/arm.cc | 44 ---------------------- > gcc/config/arm/vec-common.md | 71 ------------------------------------ > 3 files changed, 116 deletions(-) > > No regressions in the testsuite. I'll push next week if there are no > objections. > > diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h > index 7311ad4d8e4..155507f4745 100644 > --- a/gcc/config/arm/arm-protos.h > +++ b/gcc/config/arm/arm-protos.h > @@ -406,7 +406,6 @@ extern bool arm_expand_vector_compare (rtx, rtx_code, > rtx, rtx, bool); > #endif /* RTX_CODE */ > > extern bool arm_gen_setmem (rtx *); > -extern void arm_expand_vcond (rtx *, machine_mode); > extern void arm_expand_vec_perm (rtx target, rtx op0, rtx op1, rtx sel); > > extern bool arm_autoinc_modes_ok_p (machine_mode, enum arm_auto_incmodes); > diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc > index 1fbc4c22f22..bc6f9345d1e 100644 > --- a/gcc/config/arm/arm.cc > +++ b/gcc/config/arm/arm.cc > @@ -31803,50 +31803,6 @@ arm_expand_vector_compare (rtx target, rtx_code > code, rtx op0, rtx op1, > } > } > > -/* Expand a vcond or vcondu pattern with operands OPERANDS. > - CMP_RESULT_MODE is the mode of the comparison result. */ > - > -void > -arm_expand_vcond (rtx *operands, machine_mode cmp_result_mode) > -{ > - /* When expanding for MVE, we do not want to emit a (useless) vpsel in > - arm_expand_vector_compare, and another one here. */ > - rtx mask; > - > - if (TARGET_HAVE_MVE) > - mask = gen_reg_rtx (arm_mode_to_pred_mode (cmp_result_mode).require ()); > - else > - mask = gen_reg_rtx (cmp_result_mode); > - > - bool inverted = arm_expand_vector_compare (mask, GET_CODE (operands[3]), > - operands[4], operands[5], true); > - if (inverted) > - std::swap (operands[1], operands[2]); > - if (TARGET_NEON) > - emit_insn (gen_neon_vbsl (GET_MODE (operands[0]), operands[0], > - mask, operands[1], operands[2])); > - else > - { > - machine_mode cmp_mode = GET_MODE (operands[0]); > - > - switch (GET_MODE_CLASS (cmp_mode)) > - { > - case MODE_VECTOR_INT: > - emit_insn (gen_mve_q (VPSELQ_S, VPSELQ_S, cmp_mode, operands[0], > - operands[1], operands[2], mask)); > - break; > - case MODE_VECTOR_FLOAT: > - if (TARGET_HAVE_MVE_FLOAT) > - emit_insn (gen_mve_q_f (VPSELQ_F, cmp_mode, operands[0], > - operands[1], operands[2], mask)); > - else > - gcc_unreachable (); > - break; > - default: > - gcc_unreachable (); > - } > - } > -} > > #define MAX_VECT_LEN 16 > > diff --git a/gcc/config/arm/vec-common.md b/gcc/config/arm/vec-common.md > index ff1c27a0d71..0b426cdaff7 100644 > --- a/gcc/config/arm/vec-common.md > +++ b/gcc/config/arm/vec-common.md > @@ -416,77 +416,6 @@ (define_expand "vlshr<mode>3" > } > }) > > -;; Conditional instructions. These are comparisons with conditional moves > for > -;; vectors. They perform the assignment: > -;; > -;; Vop0 = (Vop4 <op3> Vop5) ? Vop1 : Vop2; > -;; > -;; where op3 is <, <=, ==, !=, >= or >. Operations are performed > -;; element-wise. > - > -(define_expand "vcond<mode><mode>" > - [(set (match_operand:VDQWH 0 "s_register_operand") > - (if_then_else:VDQWH > - (match_operator 3 "comparison_operator" > - [(match_operand:VDQWH 4 "s_register_operand") > - (match_operand:VDQWH 5 "reg_or_zero_operand")]) > - (match_operand:VDQWH 1 "s_register_operand") > - (match_operand:VDQWH 2 "s_register_operand")))] > - "ARM_HAVE_<MODE>_ARITH > - && !TARGET_REALLY_IWMMXT > - && (!<Is_float_mode> || flag_unsafe_math_optimizations)" > -{ > - arm_expand_vcond (operands, <V_cmp_result>mode); > - DONE; > -}) > - > -(define_expand "vcond<V_cvtto><mode>" > - [(set (match_operand:<V_CVTTO> 0 "s_register_operand") > - (if_then_else:<V_CVTTO> > - (match_operator 3 "comparison_operator" > - [(match_operand:V32 4 "s_register_operand") > - (match_operand:V32 5 "reg_or_zero_operand")]) > - (match_operand:<V_CVTTO> 1 "s_register_operand") > - (match_operand:<V_CVTTO> 2 "s_register_operand")))] > - "ARM_HAVE_<MODE>_ARITH > - && !TARGET_REALLY_IWMMXT > - && (!<Is_float_mode> || flag_unsafe_math_optimizations)" > -{ > - arm_expand_vcond (operands, <V_cmp_result>mode); > - DONE; > -}) > - > -(define_expand "vcond<VH_cvtto><mode>" > - [(set (match_operand:<VH_CVTTO> 0 "s_register_operand") > - (if_then_else:<VH_CVTTO> > - (match_operator 3 "comparison_operator" > - [(match_operand:V16 4 "s_register_operand") > - (match_operand:V16 5 "reg_or_zero_operand")]) > - (match_operand:<VH_CVTTO> 1 "s_register_operand") > - (match_operand:<VH_CVTTO> 2 "s_register_operand")))] > - "ARM_HAVE_<MODE>_ARITH > - && !TARGET_REALLY_IWMMXT > - && (!<Is_float_mode> || flag_unsafe_math_optimizations)" > -{ > - arm_expand_vcond (operands, <V_cmp_result>mode); > - DONE; > -}) > - > -(define_expand "vcondu<mode><v_cmp_result>" > - [(set (match_operand:VDQW 0 "s_register_operand") > - (if_then_else:VDQW > - (match_operator 3 "arm_comparison_operator" > - [(match_operand:<V_cmp_result> 4 "s_register_operand") > - (match_operand:<V_cmp_result> 5 "reg_or_zero_operand")]) > - (match_operand:VDQW 1 "s_register_operand") > - (match_operand:VDQW 2 "s_register_operand")))] > - "ARM_HAVE_<MODE>_ARITH > - && !TARGET_REALLY_IWMMXT" > -{ > - arm_expand_vcond (operands, <V_cmp_result>mode); > - DONE; > -}) > - > (define_expand "vec_load_lanesoi<mode>" > [(set (match_operand:OI 0 "s_register_operand") > (unspec:OI [(match_operand:OI 1 "neon_struct_operand") > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)