On January 15, 2021 9:03:58 PM GMT+01:00, Jakub Jelinek <ja...@redhat.com> 
wrote:
>On Fri, Jan 15, 2021 at 08:50:20PM +0100, Richard Biener wrote:
>> On January 15, 2021 7:38:35 PM GMT+01:00, Jakub Jelinek
><ja...@redhat.com> wrote:
>> >Hi!
>> >
>> >The following patch generalizes the PR64309 simplifications, so that
>> >instead
>> >of working only with constants 1 and 1 it works with any two power
>of
>> >two
>> >constants, and works also for right shift (in that case it rules out
>> >the
>> >first one being negative, as it is arithmetic shift then).
>> >
>> >Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>> 
>> Ok. 
>
>Thanks.
>
>BTW, I've tried to also fix what the PR wanted primarily by adding
>/* Simplify (CST << x) & 1 to 0 if CST is even or to x == 0 if it is
>odd.  /
>(simplify
> (bit_and (lshift INTEGER_CST@1 @0) integer_onep)
>  (if ((wi::to_wide (@1) & 1) != 0)
>   (eq @0 { build_zero_cst (TREE_TYPE (@0)); })
>   ({ build_zero_cst (type); })))
>simplifier before this one, but genmatch.c doesn't seem to put it into
>the
>resulting files.  Is there a way to figure out what is going on?
>
>I remember you said one can't have multiple too similar rules,
>but the closest one I can find is
>(for shift (lshift rshift)
> (simplify
>  (bit_and (convert?:s@4 (shift:s@5 (convert1?@3 @0) INTEGER_CST@1))
>           INTEGER_CST@2)
>Is it that one that makes the above not work and shall I then
>stick it into the same simplifier?

Hmm, genmatch should warn then (maybe only with -v). But yeah, it looks awfully 
close (though INTEGER_CST vs. Integer_onep should make a difference... 

You could try Debug genmatch with a smaller file containing just the two cases. 
The intent is to diagnose 'dropped' patterns. 

>What I want has the @1 in this one actually not an INTEGER_CST, while
>@3
>shall be INTEGER_CST...
>
>       Jakub

Reply via email to