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.