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<mode>_insn_le): 
Reimplement
        with standard RTL codes instead of an UNSPEC.
        (aarch64_rshrn<mode>_insn_be): Likewise.
        (aarch64_rshrn<mode>): Adjust for the above.
        * config/aarch64/predicates.md (aarch64_simd_rshrn_imm_vec): Define.

Attachment: rshrn.patch
Description: rshrn.patch

Reply via email to