Hi Dominik, On Fri, Dec 09, 2016 at 04:23:44PM +0100, Dominik Vogt wrote: > 0001-* > > Deal with mode expanding zero_extracts in change_zero_ext. The > patch looks good to me, but not sure whether endianness is > handled properly. Is the second argument of gen_rtx_SUBREG > correct?
This we can do; I'll look in detail later. > 0002-* > > This is a work in progress with the goal of fixing the first > problem and similar ones by calling simplify_set after > change_zero_ext to get rid of the overly complex code. That > works fine in principle, but replaces back the (and (lshiftrt > ...) ...) that change_zero_ext generates back into zero_extract > form. Fiddling with simplify_set and make_compound_operation* a > bit, trying to suppress undoing the transformations that > change_zero_ext has just done, resulted in the (unfinished) > patch. This we cannot do: we cannot call simplify* here. The problem is combine can reuse the old target reg of an insn it combines but the simplify* will still see the old nonzero_bits for that register. The best solution to that is to not reuse registers at all, but that will have to wait until GCC 8. > As it's not clear to me whether this is a valid approach I'd > appreciate any advice on the patch or alternative ways of doing > that. Currently I just handle all cases manually in change_zero_ext, but that is not nice at all for your case. Segher