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

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>

Reply via email to