On Thu, Jan 19, 2012 at 3:13 AM, Richard Guenther
<richard.guent...@gmail.com> wrote:
> On Thu, Jan 19, 2012 at 10:00 AM, Andrew Pinski
> <andrew.pin...@caviumnetworks.com> wrote:
>> On Tue, Jan 17, 2012 at 1:38 AM, Richard Guenther
>> <richard.guent...@gmail.com> wrote:
>>> On Tue, Jan 17, 2012 at 8:06 AM, Andrew Pinski
>>> <andrew.pin...@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.

Here is an updated patch which fixes a bug which I found while doing
the treecombine branch.  I rewrote defcodefor_name so more than
SSA_NAMEs can be passed to it.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

Thanks,
Andrew Pinski

ChangeLog:

ChangeLog:
* tree-ssa-forwprop.c (defcodefor_name): New function.
(simplify_bitwise_binary): Use defcodefor_name instead of manually
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:
>> * 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.

Reply via email to