[PATCH V2] aarch64: Model zero-high-half semantics of [SU]QXTN instructions

Jonathan Wright Jonathan.Wright@arm.com
Wed Jun 16 09:12:30 GMT 2021


Hi,

Version 2 of the patch adds tests to verify the benefit of this change.

Ok for master?

Thanks,
Jonathan

---

gcc/ChangeLog:

2021-06-14  Jonathan Wright  <jonathan.wright@arm.com>

	* config/aarch64/aarch64-simd-builtins.def: Split generator
	for aarch64_<su>qmovn builtins into scalar and vector
	variants.
	* config/aarch64/aarch64-simd.md (aarch64_<su>qmovn<mode>_insn_le):
	Define.
	(aarch64_<su>qmovn<mode>_insn_be): Define.
	(aarch64_<su>qmovn<mode>): Split into scalar and vector
	variants. Change vector variant to an expander that emits the
	correct instruction depending on endianness.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/narrow_zero_high_half.c: Add new tests.


From: Gcc-patches <gcc-patches-bounces+jonathan.wright=arm.com@gcc.gnu.org> on behalf of Jonathan Wright via Gcc-patches <gcc-patches@gcc.gnu.org>
Sent: 15 June 2021 10:59
To: gcc-patches@gcc.gnu.org <gcc-patches@gcc.gnu.org>
Subject: [PATCH] aarch64: Model zero-high-half semantics of [SU]QXTN instructions 
 
Hi,

As subject, this patch first splits the aarch64_<su>qmovn<mode>
pattern into separate scalar and vector variants. It then further splits
the vector RTL  pattern into big/little endian variants that model the
zero-high-half semantics of the underlying instruction. Modeling
these semantics allows for better RTL combinations while also
removing some register allocation issues as the compiler now knows
that the operation is totally destructive.

Regression tested and bootstrapped on aarch64-none-linux-gnu - no
issues.

Ok for master?

Thanks,
Jonathan

---

gcc/ChangeLog:

2021-06-14  Jonathan Wright  <jonathan.wright@arm.com>

        * config/aarch64/aarch64-simd-builtins.def: Split generator
        for aarch64_<su>qmovn builtins into scalar and vector
        variants.
        * config/aarch64/aarch64-simd.md (aarch64_<su>qmovn<mode>_insn_le):
        Define.
        (aarch64_<su>qmovn<mode>_insn_be): Define.
        (aarch64_<su>qmovn<mode>): Split into scalar and vector
        variants. Change vector variant to an expander that emits the
        correct instruction depending on endianness.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rb14565.patch
Type: application/octet-stream
Size: 4466 bytes
Desc: rb14565.patch
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20210616/ca185685/attachment-0001.obj>


More information about the Gcc-patches mailing list