https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78390
--- Comment #21 from Dominik Vogt <vogt at linux dot vnet.ibm.com> --- (In reply to Michael Matz from comment #16) > Uhh: > > Successfully matched this instruction: > (set (subreg:DI (reg:SI 73) 0) > - (lshiftrt:DI (reg/v:DI 63 [ X ]) > - (const_int 56 [0x38]))) > + (zero_extract:DI (reg/v:DI 63 [ X ]) > + (const_int 32 [0x20]) > + (const_int -24 [0xffffffffffffffe8]))) Why does it do this, shouldn't be this just "(zero_extract (reg) (8) (0))"? Zero extending that to 32 or 64 bits is built into "zero_extract", it's not necessary to code it into SIZE and POS.