https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87763

--- Comment #58 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Jeffrey A. Law from comment #39)
> We've actually got an RMW insn when combine starts.  But...
> Trying 17, 7 -> 13:
>    17: r92:DI=r95:DI
>       REG_DEAD r95:DI
>     7: zero_extract(r92:DI,0x8,0)=r93:DI
>       REG_DEAD r93:DI
>    13: x0:DI=r92:DI
>       REG_DEAD r92:DI
> Failed to match this instruction:
> (set (reg/i:DI 0 x0)
>     (ior:DI (and:DI (reg:DI 95)
>             (const_int -256 [0xffffffffffffff00]))
>         (reg:DI 93)))
> 
> We've torn the damn thing apart via expand_field_assignment.  Worse yet,
> that naturally splits and results in:

I have been thinking about how to fix this for the last 6 years :).  It would
be useful if we could produce the following two instructions:
zero_extract(r95:DI,0x8,0)=r93
x0=r95

But I have not figured out how to produce that.

Reply via email to