https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78390
--- Comment #16 from Michael Matz <matz at gcc dot gnu.org> --- 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]))) allowing combination of insns 22 and 23 original costs 4 + 4 = 8 replacement cost 4 deferring deletion of insn with uid = 22. -modifying insn i3 23: r73:SI#0=r63:DI 0>>0x38 +modifying insn i3 23: r73:SI#0=zero_extract(r63:DI,0x20,0xffffffffffffffe8) Note the "-24" for the position of the extract!