https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118638
--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The wrong combination is the Trying 9, 10 -> 17: 9: r107:SI=flags:CCZ!=0 REG_DEAD flags:CCZ 10: r107:SI=r107:SI*0x2+r107:SI 17: {r111:SI=sign_extract(r107:SI,0x1,0);clobber flags:CC;} REG_DEAD r107:SI REG_UNUSED flags:CC Failed to match this instruction: (parallel [ (set (reg:SI 111 [ _10 ]) (mult:SI (ne:SI (reg:CCZ 17 flags) (const_int 0 [0])) (const_int 3 [0x3]))) (clobber (reg:CC 17 flags)) ]) one (while it failed, as can be seen, the attempted expression is not equivalent to the original ones and we then split it and match the two split parts).