On Thu, May 19, 2011 at 2:59 PM, Kai Tietz <ktiet...@googlemail.com> wrote:
> 2011/5/19 Richard Guenther <richard.guent...@gmail.com>:
>> On Thu, May 19, 2011 at 2:48 PM, Kai Tietz <ktiet...@googlemail.com> wrote:
>>> Hello,
>>>
>>> This patch improves reassociation folding for comparision. It expands
>>> expressions within binary-AND/OR expression like (X | Y) == 0 to (X ==
>>> 0 && Y == 0)
>>> and (X | Y) != 0 to (X != 0 || Y != 0).  This is necessary to allow
>>> better reassociation
>>> on weak pre-folded logical expressions.  This unfolding gets undone
>>> anyway later by pass,
>>> so no disadvantage gets introduced.
>>> Also while going through BB-list, it tries to do some little
>>> type-sinking for SSA sequences
>>> like "D1 = (type) bool1; D2 = (type) bool2; D3 = D1 & D2;' to 'D1 =
>>> bool1 & bool2; D2 = (type) D1;'.
>>> This folding has the advantage to see better through intermediate
>>> results with none-boolean type.
>>> The function eliminate_redundant_comparison () got reworded so, that
>>> doesn't break in all cases.
>>> It now continues to find duplicates and tries to find inverse variant
>>> (folded to constant). By this
>>> change we don't combine possible weak optimizations too fast, before
>>> we can find and handle
>>> inverse or duplicates.
>>
>> sinking casting belongs not here but instead to tree-ssa-forwprop.
>> I'm not sure that a != 0 | b != 0 is the better canonical variant than
>> a | b != 0 though.
>>
>> is_boolean_compatible_type_p looks like a strange remanent.
>>
>> Richard.
>
> Well, a | b != 0 is for sure more optimal, but for reassociation we
> need to see the unfolded variant temporary. This is necessary as
> fold-const can't see through SSA statements.  But this kind of
> expansion should be reversed then by pass to the form (a | b) != 0
> back.

?  fold-const shouldn't deal with this at all as we are in gimple and in
SSA form.  Surely re-association comes to play only with chains of
the above with more than two operands.

Richard.

>
> Regards,
> Kai
>

Reply via email to