http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48496
--- Comment #18 from Ulrich Weigand <uweigand at gcc dot gnu.org> 2012-04-08 17:32:23 UTC --- According to Vlad's comment #4, the validity check fails because a reload insn contains a spilled pseudo that will later be replaced by a MEM. However, recog.c contains in various places checks that will *accept* -during reload- a pseudo in places where a memory constraint is required; exactly because such pseudos will actually get replaced by a MEM: case TARGET_MEM_CONSTRAINT: [snip] /* During reload, accept a pseudo */ else if (reload_in_progress && REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER) win = 1; Note that those checks were originally added in the same patch that added this asm validity check ... So really that validity check shouldn't have failed just because of the presence of a spilled pseudo. The question is, why doesn't this work for the ia64 test case as expected?