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" ""))

Reply via email to