Ping.
https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01434.html

Thanks,
Kyrill

On 23/04/15 17:57, Kyrill Tkachov wrote:
[resending due to mail client messing up.]

Hi all,

The EON instruction can be expressed either by (xor (not a) b) or (not (xor
a b)),
simplify-rtx canonicalizes to the second form and we have a pattern for it
(*xor_one_cmpl<mode>3) but we don't have a pattern for the shifted operand
version. This patch adds that pattern as well as the proper handling of it
in
aarch64_rtx_costs. The zero-extend version of it is also added.

While we're in the NOT case of rtx costs this patch also
corrects the costing of MVN+shift operations.

With this patch, for C code:
unsigned long
baz (unsigned int a, unsigned int b)
{
   return ~(a ^ (b << 6));
}

unsigned long
foo (unsigned long a, unsigned long b)
{
   return ~(a ^ (b >> 24));
}


we now generate:
baz:
        eon     w0, w0, w1, lsl 6
        ret

foo:
        eon     x0, x0, x1, lsr 24
        ret

instead of the previous:
baz:
        eor     w0, w0, w1, lsl 6
        mvn     w0, w0
        uxtw    x0, w0
        ret

foo:
        eor     x0, x0, x1, lsr 24
        mvn     x0, x0
        ret


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

2015-04-23  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

        * config/aarch64/aarch64.md
(*eor_one_cmpl_<SHIFT:optab><mode>3_alt):
        New pattern.
        (*eor_one_cmpl_<SHIFT:optab>sidi3_alt_ze): Likewise.
        * config/aarch64/aarch64.c (aarch64_rtx_costs): Handle MVN-shift
        appropriately.  Handle alternative EON form.

Reply via email to