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

Reply via email to