Georg-Johann Lay <a...@gjlay.de> writes: > Is insn combine allowed to match the insn because from combine's > perspective just a CONST_INT (i.e. low_io_address_operand) is moved > across the access of UDR0?
Yes. > Or is this a bug in insn combine? No. > If combine is right -- and thus the pattern is wrong -- how must the > insn be rewritten to produce respective instructions? The backend must define and use a new recog predicate which recognizes (mem:QI x) where x satisfies low_io_address_operand. The predicate should also check that its operand satisfies general_operand. E.g., something along the lines of (define_predicate "low_io_mem" (and (match_operand 0 "general_operand") (and (match_code "mem") (match_test "low_io_address_operand (XEXP (op, 0))")))) Ian