https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89752
--- Comment #10 from Wilco <wilco at gcc dot gnu.org> --- It seems that rewriting "+rm" into "=rm" and "0" is not equivalent. Eg. __asm__ ("" : [a0] "=m" (A0) : "0" (A0)); gives a million warnings "matching constraint does not allow a register", so "0" appears to imply a register operand. Reload seems to deal with "=rm" and "rm" or "=rm" and "0m", but a single "0" prefers a register and that's why it tries to insert an incorrect BLK move.