On 11/02/11 12:03, Eric Botcazou wrote:
if (! volatile_ok&& MEM_VOLATILE_P (op))
return 0;
.
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.
But the piece of code I quoted above is in general_regs. A (mem/v ...)
will never be a general_operand, will it?
Without that, the insn
(set (mem/s/v:QImode ...) (const_int 0))
is never matched by
(set (match_operand:QImode "nonimmediate_operand" "")
(match_operand:QImode "general_operand" ""))