On Wed, Apr 20, 2016 at 12:22 PM, Bin.Cheng <amker.ch...@gmail.com> wrote:
> On Wed, Apr 20, 2016 at 9:55 AM, Richard Biener
> <richard.guent...@gmail.com> wrote:
>> On Tue, Apr 19, 2016 at 7:00 PM, Bin Cheng <bin.ch...@arm.com> wrote:
>>> Hi,
>>> Type conversion from integer to smaller unsigned type could be transformed 
>>> into BIT_AND_EXPR in compilation.  For example,
>>>   int i;
>>>   for (i = 0; i < n; i++)
>>>     {
>>>       unsigned char uc = (unsigned char) i;  // transformed into X = i && 
>>> 255, in which both X and i are of int type.
>>>       b[uc] = 0;
>>>     }
>>> X here could a valid SCEV if we can prove that loop doesn't iterate more 
>>> than 255 times.  In other words, if 'i' is SCEV and its value is in the 
>>> range of representable set of type "unsigned char".  This information could 
>>> be available with -faggressive-loop-optimizations.
>>> This patch adds support for BIT_AND_EXPR in scalar evolution to handle such 
>>> cases, as well as two new tests.
>>>
>>> Bootstrap and test on x86_64 & AArch64.  Is it OK?
>>
>> Don't use cst_and_fits_in_hwi/int_cst_value - those are odd beasts.
>> Use tree_fits_uhwi_p / tree_to_uhwi.
>> Or just use wi::popcount and verify it against wi::clz.
> Thanks for reviewing, here is the updated patch.  Regtest ongoing,
> shouldn't be any surprise though.  Is it OK?

Ok.

Thanks,
Richard.

> Thanks,
> bin
>>
>> Richard.
>>
>>> Thanks,
>>> bin
>>>
>>> 2016-03-24  Bin Cheng  <bin.ch...@arm.com>
>>>
>>>         * tree-scalar-evolution.c (interpret_rhs_expr): Handle BIT_AND_EXPR.
>>>
>>> gcc/testsuite/ChangeLog
>>> 2016-03-24  Bin Cheng  <bin.ch...@arm.com>
>>>
>>>         * gcc.dg/tree-ssa/scev-11.c: New test.
>>>         * gcc.dg/tree-ssa/scev-12.c: New test.
>>>

Reply via email to