2012/3/15 Richard Guenther <richard.guent...@gmail.com>: > On Thu, Mar 15, 2012 at 2:08 PM, Kai Tietz <ktiet...@googlemail.com> wrote >> Hi, >> >> The solution for this PR is a mix out of different issues. First is >> of course the type-hoisting, but also >> it shows some lacks in simplifications on integer-values, and on equal >> and none-equal >> comparisons. >> The first patch adds to forward-propagation the ability to do type-hoisting >> for some conversion operations and do simplification for inner binary >> operations on it. >> Most important part is here the adjustment of constant integer-values >> in statement-lists >> for a truncation. >> I limited that patch to handle in compare_equal_optimize_1 only >> bitwise-and operations >> inner a truncation-cast. Of course for bitwise-xor/or operations some >> more simplifications >> are possible. >> This patch just does the type-hoisting part. In a second patch I add >> to compare_equal_optimize_1 >> the ability for further required simplifications for fixing this problem. > > This looks like to match unbound pattern sizes and thus does not fit > into the forwprop machinery. Instead it was suggested elsewhere > that promoting / demoting registers should be done in a separate pass > where you can compute a lattice of used bits and apply a transform > based on that lattice and target information (according to PROMOTE_MODE > for example). > > Richard.
Well, the integer truncation part might be something for a separate pass. It could then also take care that within single-use gimple-statements the integral-constant is always on right-hand-side of first statement of an +, -, |, ^, &, and mul. But the cast-hoisting code itself is not unbound AFAICS and has fixed pattern size. Regards, Kai