> On Jul 21, 2015, at 3:31 AM, Kyrill Tkachov <kyrylo.tkac...@arm.com> wrote:
>
>
>> On 21/07/15 10:26, pins...@gmail.com wrote:
>>
>>
>>
>>> On Jul 21, 2015, at 2:15 AM, Hurugalawadi, Naveen
>>> <naveen.hurugalaw...@caviumnetworks.com> wrote:
>>>
>>> Hi,
>>>
>>> Please find attached the patch which performs following patterns folding
>>> in match.pd:-
>>>
>>> a ==/!= a p+ b to b ==/!= 0.
>>> a << N ==/!= 0 to a&(-1>>N) ==/!= 0.
>>> a * N ==/!= 0 where N is a power of 2 to a & (-1<<N2) ==/!= 0 where N2 is
>>> log2 of N.
>>>
>>> Please review the same and let us know if its okay?
>> I should note this shows up in perlbmk in spec 2006.
>
> Yes, I see it triggering there for aarch64, but I also see some undesired
> effects,
> for example in gcc:
> lsl x24, x24, 3
> cbz x24, .L1194
>
> now becomes:
> and x0, x24, 2305843009213693951
> lsl x24, x24, 3
> cbz x0, .L1194
Shouldn't the and become a tst instead and the cbz be a b.eq? Oh I have
another patch which does that and the reason the performance for me does not
regress on thunderx (tst and branches can merge before issue).
Thanks,
Andrew
>
>> Thanks,
>> Andrew
>>
>>> Regression Tested on X86_64.
>>>
>>> On Behalf of Andrew Pinski.
>>>
>>> Thanks,
>>>
>>> gcc/testsuite/ChangeLog:
>>>
>>> 2015-01-21 Andrew Pinski <apin...@cavium.com>
>>>
>>> * testsuite/gcc.dg/tree-ssa/compare-shiftmult-1.c: New testcase.
>>> * testsuite/gcc.dg/tree-ssa/compare_pointers-1.c: New testcase.
>>>
>>> gcc/ChangeLog:
>>>
>>> 2015-01-21 Andrew Pinski <apin...@cavium.com>
>>>
>>> * match.pd (define_predicates): Add integer_pow2p.
>>> Add pattern for folding of a ==/!= a p+ b to b ==/!= 0.
>>> (unsigned_integral_valued_p): New match.
>>> Add pattern for folding of a<<N ==/!= 0 to a&(-1>>N) ==/!= 0.
>>> Add pattern for folding of a*N ==/!= 0 where N is a power of 2
>>> to a&(-1<<N2) ==/!= 0 where N2 is log2 of N.
>>> <gcc_match.patch>
>