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.

Reply via email to