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.

Reply via email to