https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103028

--- Comment #2 from Andreas Krebbel <krebbel at gcc dot gnu.org> ---
IF-convert generates the compare *after* reload. The operands get checked for
validity only by invoking the predicates. That means everything which is
accepted by TARGET_LEGITIMATE_CONSTANT_P is ok for a general_operand. However,
we have several patterns where the union of all constraints would accept less
operands than the predicate assuming that reload is able to sort this out. The
ICE is triggered by emitting a pattern which actually would need to be fixed by
reload.

The problem could easily be avoided by e.g. enforcing operand1 to satisfy the
constraint used in the pattern. However, I'm wondering how this is supposed to
work in general. Couldn't this trigger all sorts of problems? Are we the only
backend relying on LRA sorting out these kind of issues for us?

Btw. I couldn't trigger the problem without -fharden-conditional-branches so
far.

Reply via email to