Volatile memory is not general operand
Eric Botcazou
ebotcazou@adacore.com
Fri Feb 11 12:06:00 GMT 2011
> I just noticed something very surprising. There's a clause in
> general_operand (recog.c):
>
> if (! volatile_ok && MEM_VOLATILE_P (op))
> return 0;
>
> Oh... so, a MEM_VOLATILE_P is _not_ a general operand? Why? This is also
> not referred to in the documentation of general operand so it kind of
> caught me by surprise.
It's more of the other way around: MEM_VOLATILE_P is a general operand unless
explicitly requested via init_recog_no_volatile. Some passes, like combine,
don't track the volatileness of operands precisely, so they disable their
manipulation altogether to avoid generating wrong code.
--
Eric Botcazou
More information about the Gcc
mailing list