This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Volatile memory is not general operand


> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]