https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87763
--- Comment #59 from Segher Boessenkool <segher at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #58) > (In reply to Jeffrey A. Law from comment #39) > > Failed to match this instruction: > > (set (reg/i:DI 0 x0) > > (ior:DI (and:DI (reg:DI 95) > > (const_int -256 [0xffffffffffffff00])) > > (reg:DI 93))) > I have been thinking about how to fix this for the last 6 years :). It > would be useful if we could produce the following two instructions: > zero_extract(r95:DI,0x8,0)=r93 > x0=r95 > > But I have not figured out how to produce that. You either do a define_split (splitting the above ior thing into the two insns you want, during combine itself), or you do a define_insn_and_split, allowing this whole thing as a single rtl insn (perhaps only before split1, or whatever works best).