This patch is large in lines of code, but it is a fairly regular extension of the first patch as it converts the high-half patterns to standard RTL codes in the same fashion as the first patch did for the low-half ones. This now allows us to remove the unspec codes for these instructions as there are no more uses of them left. Bootstrapped and tested on aarch64-none-linux-gnu and aarch64_be-none-elf. gcc/ChangeLog: * config/aarch64/aarch64-simd-builtins.def (shrn2): Rename builtins to... (shrn2_n): ... This. (rshrn2): Rename builtins to... (rshrn2_n): ... This. * config/aarch64/arm_neon.h (vrshrn_high_n_s16): Adjust for the above. (vrshrn_high_n_s32): Likewise. (vrshrn_high_n_s64): Likewise. (vrshrn_high_n_u16): Likewise. (vrshrn_high_n_u32): Likewise. (vrshrn_high_n_u64): Likewise. (vshrn_high_n_s16): Likewise. (vshrn_high_n_s32): Likewise. (vshrn_high_n_s64): Likewise. (vshrn_high_n_u16): Likewise. (vshrn_high_n_u32): Likewise. (vshrn_high_n_u64): Likewise. * config/aarch64/aarch64-simd.md (*aarch64_shrn2_vect_le): Delete. (*aarch64_shrn2_vect_be): Likewise. (aarch64_shrn2_insn_le): Likewise. (aarch64_shrn2_insn_be): Likewise. (aarch64_shrn2): Likewise. (aarch64_rshrn2_insn_le): Likewise. (aarch64_rshrn2_insn_be): Likewise. (aarch64_rshrn2): Likewise. (aarch64_qshrn2_n_insn_le): Likewise. (aarch64_shrn2_n_insn_le): New define_insn. (aarch64_qshrn2_n_insn_be): Delete. (aarch64_shrn2_n_insn_be): New define_insn. (aarch64_qshrn2_n): Delete. (aarch64_shrn2_n): New define_expand. (aarch64_rshrn2_n_insn_le): New define_insn. (aarch64_rshrn2_n_insn_be): New define_insn. (aarch64_rshrn2_n): New define_expand. (aarch64_sqshrun2_n_insn_le): New define_insn. (aarch64_sqshrun2_n_insn_be): New define_insn. (aarch64_sqshrun2_n): New define_expand. (aarch64_sqrshrun2_n_insn_le): New define_insn. (aarch64_sqrshrun2_n_insn_be): New define_insn. (aarch64_sqrshrun2_n): New define_expand. * config/aarch64/iterators.md (UNSPEC_SQSHRUN, UNSPEC_SQRSHRUN, UNSPEC_SQSHRN, UNSPEC_UQSHRN, UNSPEC_SQRSHRN, UNSPEC_UQRSHRN): Delete unspec values. (VQSHRN_N): Delete int iterator.