My question is this: Is it allowed in non-strict RTL that a register_operand contains a REG_P register that doesn't satisfy the constraint of the operand? Given that the REG meets register_operand of course, and that the machine mode matches.
To all of my knowledge, the answer is "yes": Prior to register allocation, what matters are the insn predicates, not the insn constraints. In particular, a pass that operates on non-strict RTL map propagate a (hard) register into a register_operand provided the predicate is true, even in cases where the constraint doesn't match. It's clear that such a transformation makes the register allocator's life harder, but RA is supposed to handle that. Correct? Context is that I am getting ICEs from RA for some __RTL test cases that start at "ira". Kind regards, Johann
