https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118638
--- Comment #8 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Uroš Bizjak from comment #7) This one is wrong: > Trying 11, 12 -> 16: > 11: r109:SI=flags:CCZ!=0 > REG_DEAD flags:CCZ > 12: r109:SI=r109:SI*0x2+r109:SI > 16: {r111:SI=sign_extract(r109:SI,0x1,0);clobber flags:CC;} > REG_DEAD r109:SI > REG_UNUSED flags:CC > Failed to match this instruction: > (parallel [ > (set (reg:SI 111 [ _9 ]) > (mult:SI (ne:SI (reg:CCZ 17 flags) > (const_int 0 [0])) > (const_int 3 [0x3]))) > (clobber (reg:CC 17 flags)) > ]) > Successfully matched this instruction: > (set (reg:SI 109 [ _11 ]) > (ne:SI (reg:CCZ 17 flags) > (const_int 0 [0]))) > Successfully matched this instruction: > (set (reg:SI 111 [ _9 ]) > (mult:SI (reg:SI 109 [ _11 ]) > (const_int 3 [0x3]))) > allowing combination of insns 11, 12 and 16 r111:SI should result in the sign-extract of the LSB of 3*r109:SI. The sign-extract part is now missing in the above RTX sequence.