This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix PR 33512 Folding of x & ((~x) | y) into x & y on the tree level


On Thu, Jan 19, 2012 at 10:00 AM, Andrew Pinski
<andrew.pinski@caviumnetworks.com> wrote:
> On Tue, Jan 17, 2012 at 1:38 AM, Richard Guenther
> <richard.guenther@gmail.com> wrote:
>> On Tue, Jan 17, 2012 at 8:06 AM, Andrew Pinski
>> <andrew.pinski@caviumnetworks.com> wrote:
>>> Hi,
>>> ?This adds the folding of x & ((~x) | y)) into x & y on the tree
>>> level via fold-const.c
>>> There is already partly done on the RTL level but it would be a good
>>> thing for the tree level also.
>>>
>>>
>>> OK for 4.8 (yes I know we have not branched yet but I thought I would
>>> send it out so I don't forget about it)?
>>> Bootstrapped and tested on x86_64-linux-gnu with no regressions.
>>
>> Can you instead patch tree-ssa-forwprop.c:simplify_bitwise_binary?
>
> Yes and here is a new patch which also adds optimizing x | ((~x) & y)) to x | y.
> Also it adds the optimizing x & (x | y) to x and x | (x & y) to x to
> tree-ssa-forwprop.c:simplify_bitwise_binary
> since it was an easy extension on top of the ~x case (well I
> implemented the one without the ~ first). ?I did not remove those
> folding from fold-const.c though.
>
> Also I was thinking maybe this belongs in reassociate though I don't
> see how to do it.

I still have plans to create that piecewise gimple_fold (see my proposal
from early last year) that would be the container for this kind of pattern
matching.  It would then be usable from reassoc as well (but reassoc
has the issue of only collecting one kind of op, so its simplification
wouldn't trigger reliably on these).

http://gcc.gnu.org/ml/gcc-patches/2011-03/msg01099.html

> OK for 4.8, once in stage 1? Again bootstrapped and tested on
> x86_64-linux-gnu with no regressions.

Ok.

Thanks,
Richard.

> Thanks,
> Andrew Pinski
>
> ChangeLog:
> * tree-ssa-forwprop.c (defcodefor_name): New function.
> (simplify_bitwise_binary): Use defcodefor_name.
> Simplify "( X | Y) & X" to X and "( X & Y) | X" to X.
> Simplify "(~X | Y) & X" to "X & Y" and
> "(~X & Y) | X" to "X | Y".
>
> testsuite/ChangeLog:
> * gcc.dg/tree-ssa/andor-3.c: New testcase.
> * gcc.dg/tree-ssa/andor-4.c: New testcase.
> * gcc.dg/tree-ssa/andor-5.c: New testcase.
>
>
>>
>> Thanks,
>> Richard.
>>
>>> Thanks,
>>> Andrew Pinski
>>>
>>> ChangeLog:
>>> * fold-const.c (fold_binary_loc <case BIT_AND_EXPR>): Add folding of x
>>> & (~x | y) into x & y.
>>>
>>> testsuite/ChangeLog:
>>> * gcc.dg/tree-ssa/andor-3.c: New testcase.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]