------- Comment #2 from jakub at gcc dot gnu dot org 2009-03-24 12:54 ------- The reason for forcing the MEM addresses in "m"/"=m" into register is: /* By passing constant addresses through registers we get a chance to cse them. */ if (! cse_not_expected && CONSTANT_P (x) && CONSTANT_ADDRESS_P (x)) x = force_reg (Pmode, x); in memory_address. On a simple s0[0] = 0; s0[4] = 0; s0[8] = 0; s0[12] = 0; the addresses are propagated back into the MEMs during fwprop1 (or during combine for -fno-forward-propagate), but this for some reason doesn't happen for the asm operands. Either we need to disable this kind of forcing into register for (constant) memory operands, or better find out and fix why neither fwprop nor combiner merges the memory operands back.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39543