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

--- Comment #3 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Andrew Pinski from comment #2)
> Trying 7 -> 8:
>     7: {r87:DI=r89:DI>>0x3;clobber flags:CC;}
>       REG_DEAD r89:DI
>       REG_UNUSED flags:CC
>     8: r88:DF=[r87:DI*0x8+`mem']
>       REG_DEAD r87:DI
> Failed to match this instruction:
> (set (reg:DF 88 [ mem[_1] ])
>     (mem:DF (plus:DI (and:DI (reg:DI 89)
>                 (const_int -8 [0xfffffffffffffff8]))
>             (symbol_ref:DI ("mem") [flags 0x2]  <var_decl 0x7f6b6efd9c60
> mem>)) [1 mem[_1]+0 S8 A64]))
> 
> We have 2->2 combine now but it looks like we don't try to split inside a
> mem ...

This address looks similar to how Alpha implemented unaligned load. It looks
like combine tries to synthesize AND address.

Reply via email to