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.