2011/6/27 Richard Guenther <[email protected]>:
> On Mon, Jun 27, 2011 at 3:46 PM, Kai Tietz <[email protected]> wrote:
>> Hello,
>>
>> this patch sink type conversions in forward-propagate for the following
>> patterns:
>> - ((type) X) op ((type) Y): If X and Y have compatible types.
>> - ((type) X) op CST: If the conversion of (type) ((type-x) CST) == CST and X
>> has integral type.
>> - CST op ((type) X): If the conversion of (type) ((type-x) CST) == CST and X
>> has integral type.
>
> See IRC comments.
See IRC comments, too. int_fits_type_p isn't suitable here, as for
bitwise operations and/or/xor casts to/from sign for same precision
don't matter. Nevertheless it is of course important to handle
sign-extension proper for operands with different precisions.
Eg: int foo (char c) { return ((int) c & 0xf0f); }.
>> Additionally it fixes another issue shown by this type-sinking in bswap
>> detection. The bswap pattern matching algorithm goes for the first hit, and
>> not tries to seek for best hit. So we search here two times. First for di
>> case (if present) and then for si mode case.
>
> Please split this piece out. I suppose either walking over stmts backwards
> or simply handling __builtin_bswap in find_bswap_1 would be a better
> fix than yours.
Ok, I'll do.
> Richard.
>
>> ChangeLog
>>
>> 2011-06-27 Kai Tietz <[email protected]>
>>
>> * tree-ssa-forwprop.c (simplify_bitwise_binary): Improve
>> type sinking.
>> * tree-ssa-math-opts.c (execute_optimize_bswap): Separate
>> search for di/si mode patterns for finding widest match.
>>
>> Bootstrapped and regression tested for x86_64-pc-linux-gnu. Ok for apply?
Regards,
Kai