http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48496
--- Comment #22 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2012-04-10 15:29:46 UTC --- > > ;; Note that while this accepts mem, it only accepts non-volatile mem, > > ;; and so cannot be "fixed" by adjusting the address. Thus it cannot > > ;; and does not use define_memory_constraint. > > (define_constraint "Q" > > "Non-volatile memory for FP_REG loads/stores" > > (and (match_operand 0 "memory_operand") > > (match_test "!MEM_VOLATILE_P (op)"))) > > Ah, I see. So the fix would probably be to simply add an equivalent "if > reload_in_progress, accept pseudos" (since pseudo stack slots are never > volatile) to this constrains ... Quite ugly, but probably the most reasonable approach. While we are at it, do you have an opinion as to how we should fix the MEM_VOLATILE_P problem? It turns out that memory_operand doesn't accept only MEMs, but also SUBREGs of MEMs, and it is therefore invalid to directly access MEM_VOLATILE_P. I'm going to test the obvious restriction in any case.