[gcc r16-6821] [PR123092, LRA]: Reprocess insn after equivalence substitution
Vladimir Makarov
vmakarov@gcc.gnu.org
Fri Jan 16 15:12:44 GMT 2026
https://gcc.gnu.org/g:538177d9b4c48321e07e1fd5647ed960049288f8
commit r16-6821-g538177d9b4c48321e07e1fd5647ed960049288f8
Author: Vladimir N. Makarov <vmakarov@redhat.com>
Date: Fri Jan 16 10:09:52 2026 -0500
[PR123092, LRA]: Reprocess insn after equivalence substitution
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.
Diff:
---
gcc/lra-constraints.cc | 1 +
gcc/testsuite/gcc.target/riscv/pr123092.c | 12 ++++++++++++
2 files changed, 13 insertions(+)
diff --git a/gcc/lra-constraints.cc b/gcc/lra-constraints.cc
index ba7342f3ed27..e3cee9472431 100644
--- a/gcc/lra-constraints.cc
+++ b/gcc/lra-constraints.cc
@@ -5664,6 +5664,7 @@ lra_constraints (bool first_p)
&& 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;
}
}
diff --git a/gcc/testsuite/gcc.target/riscv/pr123092.c b/gcc/testsuite/gcc.target/riscv/pr123092.c
new file mode 100644
index 000000000000..ebcf177a1218
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr123092.c
@@ -0,0 +1,12 @@
+/* { 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);
+}
More information about the Gcc-cvs
mailing list