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. >>>