LRA in the test case substituted equivalence in an insn but did not
process the insn on satisfying constraints after that. It resulted in
error "insn does not satisfy its constraints"
gcc/ChangeLog:
PR target/123092
* lra-constraints.cc (lra_constraints): Push insn on processing
stack after equivalence substitution.
gcc/testsuite/ChangeLog:
PR target/123092
* gcc.target/riscv/pr123092.c: New.
&& loc_equivalence_change_p (&PATTERN (curr_insn)))
{
lra_update_insn_regno_info (curr_insn);
+ lra_push_insn_by_uid (INSN_UID (curr_insn));
changed_p = true;
}
}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv64gc_zicbop -mabi=lp64d" } */
+struct a {
+ char *b;
+} d;
+int e;
+int c(struct a *);
+void f() {
+ __builtin_prefetch(d.b + 64);
+ if (e)
+ c(&d);
+}