On Wed, Nov 30, 2016 at 02:43:12PM +0100, Michael Matz wrote: > > Shouldn't this be simply > > > > ... > > (ior:SI (zero_extract:SI (reg:DI) (16) (0))) > > ... > > 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. Segher