On 01/03/2018 06:57 AM, Sudakshina Das wrote:
> Hi
> 
> This patch add support for the missing transformation of (x | y) == x ->
> (y & ~x) == 0.
> The transformation for (x & y) == x case already exists in
> simplify-rtx.c since 2014 as of r218503 and this patch only adds a
> couple of extra patterns for the IOR case.
> 
> Citing the example given in PR82439 :
> 
> Simple testcase (f1 should generate the same as f2):
> 
> int f1(int x, int y) { return (x | y) == x; }
> int f2(int x, int y) { return (y & ~x) == 0; }
> 
> f1:
>     orr    w1, w0, w1
>     cmp    w1, w0
>     cset    w0, eq
>     ret
> f2:
>     bics    wzr, w1, w0
>     cset    w0, eq
>     ret
> 
> This benefits targets that have the BICS instruction to generate better
> code. Wilco helped me in showing that even in targets that do not have
> the BICS instruction, this is no worse and gives out 2 instructions.
> For example in x86:
> 
> 0000000000000000 <f1>:
>    0:    09 fe                    or     %edi,%esi
>    2:    31 c0                    xor    %eax,%eax
>    4:    39 fe                    cmp    %edi,%esi
>    6:    0f 94 c0                 sete   %al
>    9:    c3                       retq
> 
> 0000000000000010 <f2>:
>   10:    f7 d7                    not    %edi
>   12:    31 c0                    xor    %eax,%eax
>   14:    85 f7                    test   %esi,%edi
>   16:    0f 94 c0                 sete   %al
>   19:    c3                       retq
> 
> Testing done: Checked for regressions on bootstrapped
> aarch64-none-linux-gnu and arm-none-linux-gnueabihf and added new test
> cases.
> Is this ok for trunk?
> 
> Sudi
> 
> ChangeLog Entries:
> 
> *** gcc/ChangeLog ***
> 
> 2017-01-03  Sudakshina Das  <sudi....@arm.com>
> 
>     PR target/82439
>     * simplify-rtx.c (simplify_relational_operation_1): Add
>     simplifications of (x|y) == x for BICS pattern.
> 
> *** gcc/testsuite/ChangeLog ***
> 
> 2017-01-03  Sudakshina Das  <sudi....@arm.com>
> 
>     PR target/82439
>     * gcc.target/aarch64/bics_5.c: New test.
>     * gcc.target/arm/bics_5.c: Likewise.
OK.
jeff

Reply via email to