Hi all, This patch reimplements the backend patterns for the rshrn intrinsics using standard RTL codes rather than UNSPECS. We already represent shrn as truncate of a shift. rshrn can be represented as truncate (src + (1 << (shft - 1)) >> shft), similar to how LLVM treats it. I have a follow-up patch to do the same for the rshrn2 pattern, which will allow us to remove the UNSPEC_RSHRN entirely. Bootstrapped and tested on aarch64-none-linux-gnu. Pushing to trunk. Thanks, Kyrill gcc/ChangeLog: * config/aarch64/aarch64-simd.md (aarch64_rshrn_insn_le): Reimplement with standard RTL codes instead of an UNSPEC. (aarch64_rshrn_insn_be): Likewise. (aarch64_rshrn): Adjust for the above. * config/aarch64/predicates.md (aarch64_simd_rshrn_imm_vec): Define.