From: Tamar Christina Date: Fri, 5 Jul 2024 11:09:21 +0000 (+0100) Subject: AArch64: remove aarch64_simd_vec_unpack_lo_ X-Git-Tag: basepoints/gcc-16~7698 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6ff698106644af39da9e0eda51974fdcd111280d;p=thirdparty%2Fgcc.git AArch64: remove aarch64_simd_vec_unpack_lo_ The fix for PR18127 reworked the uxtl to zip optimization. In doing so it undid the changes in aarch64_simd_vec_unpack_lo_ and this now no longer matches aarch64_simd_vec_unpack_hi_. It still works because the RTL generated by aarch64_simd_vec_unpack_lo_ overlaps with the general zero extend RTL and so because that one is listed before the lo pattern recog picks it instead. This removes aarch64_simd_vec_unpack_lo_. gcc/ChangeLog: * config/aarch64/aarch64-simd.md (aarch64_simd_vec_unpack_lo_): Remove. (vec_unpack_lo__lo_" - [(set (match_operand: 0 "register_operand" "=w") - (ANY_EXTEND: (vec_select: - (match_operand:VQW 1 "register_operand" "w") - (match_operand:VQW 2 "vect_par_cnst_lo_half" "") - )))] - "TARGET_SIMD" - "xtl\t%0., %1." - [(set_attr "type" "neon_shift_imm_long")] -) - (define_insn_and_split "aarch64_simd_vec_unpack_hi_" [(set (match_operand: 0 "register_operand" "=w") (ANY_EXTEND: (vec_select: @@ -1952,14 +1941,11 @@ ) (define_expand "vec_unpack_lo_" - [(match_operand: 0 "register_operand") - (ANY_EXTEND: (match_operand:VQW 1 "register_operand"))] + [(set (match_operand: 0 "register_operand") + (ANY_EXTEND: (match_operand:VQW 1 "register_operand")))] "TARGET_SIMD" { - rtx p = aarch64_simd_vect_par_cnst_half (mode, , false); - emit_insn (gen_aarch64_simd_vec_unpack_lo_ (operands[0], - operands[1], p)); - DONE; + operands[1] = lowpart_subreg (mode, operands[1], mode); } ) diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 6b106a72e49..469eb938953 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -23188,7 +23188,8 @@ aarch64_gen_shareable_zero (machine_mode mode) to split without that restriction and instead recombine shared zeros if they turn out not to be worthwhile. This would allow splits in single-block functions and would also cope more naturally with - rematerialization. */ + rematerialization. The downside of not doing this is that we lose the + optimizations for vector epilogues as well. */ bool aarch64_split_simd_shift_p (rtx_insn *insn)