Hi, On Wed, 30 Nov 2016, Segher Boessenkool wrote:
> > I don't think mode-changing _extracts are valid in this context. From the > > docu: > > > > `(sign_extract:M LOC SIZE POS)' > > ... > > The mode M is the same as the mode that would be used for LOC if > > it were a register. > > > > Probably it could be made to work just fine, but I'm not sure it'd be > > worth much, as then the targets would need to care for mode-changes > > occuring not just through subregs as usual, but also through extracts. > > The patch https://gcc.gnu.org/ml/gcc-patches/2016-11/msg02987.html I > submitted yesterday deals with this same issue, FWIW -- some ports > apparently already do mode-changing extracts. Yeah, saw that a bit later. So, hmmm. I'm not sure what to make of it, if the targets choose to use mode-changing extracts I guess that's fine, as they presumably will have written patterns that recognize them. But I don't think we should willy-nilly generate such patterns as we can't know if the target deals with them or not. We could of course always generate both variants: (subreg:M1 (extract:M2 (object:M2)) and (extract:M1 (object:M2)) and see if either matches, but that seems a bit too much work. Ciao, Michael.