Hi all,

Similar to BCAX, we can use EOR3 for DImode, but we have to be careful
not to force GP<->SIMD moves unnecessarily, so add a splitter for that case.

So for input:
uint64_t eor3_d_gp (uint64_t a, uint64_t b, uint64_t c) { return EOR3 (a, b, 
c); }
uint64x1_t eor3_d (uint64x1_t a, uint64x1_t b, uint64x1_t c) { return EOR3 (a, 
b, c); }

We generate the desired:
eor3_d_gp:
eor x1, x1, x2
eor x0, x1, x0
ret

eor3_d:
eor3 v0.16b, v0.16b, v1.16b, v2.16b
ret

Bootstrapped and tested on aarch64-none-linux-gnu.
Ok for trunk?
Thanks,
Kyrill

Signed-off-by: Kyrylo Tkachov <ktkac...@nvidia.com>

gcc/

        * config/aarch64/aarch64-simd.md (*eor3qdi4): New
        define_insn_and_split.

gcc/testsuite/

        * gcc.target/aarch64/simd/eor3_d.c: Add tests for DImode operands.

Attachment: 0004-aarch64-Use-EOR3-for-DImode-values.patch
Description: 0004-aarch64-Use-EOR3-for-DImode-values.patch

Reply via email to