On Thu, Nov 13, 2014 at 4:55 PM, Sandra Loosemore
<san...@codesourcery.com> wrote:
> This patch to the AArch64 back end adds a couple of additional bics patterns
> to match code of the form
>
>   if ((x & y) == x) ...;
>
> This is testing whether the bits set in x are a subset of the bits set in y;
> or, that no bits in x are set that are not set in y.  So, it is equivalent
> to
>
>   if ((x & ~y) == 0) ...;
>
> Presently this generates code like
>   and     x21, x21, x20
>   cmp     x21, x20
>   b.eq    c0 <main+0xc0>
>
> and this patch allows it to be written more concisely as:
>   bics     x21, x20, x21
>   b.eq     c0 <main+0xc0>
>
> Since the bics instruction sets the condition codes itself, no explicit
> comparison is required and the result of the bics computation can be
> discarded.
>
> Regression-tested on aarch64-linux-gnu.  OK to commit?

Is this not a duplicate of
https://gcc.gnu.org/ml/gcc-patches/2014-11/msg00943.html ?

regards
Ramana

>
> -Sandra
>
>
> 2014-11-12  Sandra Loosemore  <san...@codesourcery.com>
>             Chris Jones <chr...@nvidia.com>
>
>         gcc/
>         * config/aarch64/aarch64.md (*and<mode>3_compare_op1): New.
>         (*and<mode>3_compare_op2): New.
>
>         gcc/testsuite/
>         * gcc.target/aarch64/bics_3.c: New.
>
>

Reply via email to