]> git.ipfire.org Git - thirdparty/gcc.git/commit
[PR111497][LRA]: Copy substituted equivalence
authorVladimir N. Makarov <vmakarov@redhat.com>
Mon, 25 Sep 2023 20:19:50 +0000 (16:19 -0400)
committerVladimir N. Makarov <vmakarov@redhat.com>
Mon, 25 Sep 2023 20:20:09 +0000 (16:20 -0400)
commit3c23defed384cf17518ad6c817d94463a445d21b
treeb777ee78775055a3fe170d9ffc09403f82d2b6ba
parent19df06f67c982b4e5427c4a056319d6a51c03481
[PR111497][LRA]: Copy substituted equivalence

When we substitute the equivalence and it becomes shared, we can fail
to correctly update reg info used by LRA.  This can result in wrong
code generation, e.g. because of incorrect live analysis.  It can also
result in compiler crash as the pseudo survives RA.  This is what
exactly happened for the PR.  This patch solves this problem by
unsharing substituted equivalences.

gcc/ChangeLog:

PR middle-end/111497
* lra-constraints.cc (lra_constraints): Copy substituted
equivalence.
* lra.cc (lra): Change comment for calling unshare_all_rtl_again.

gcc/testsuite/ChangeLog:

PR middle-end/111497
* g++.target/i386/pr111497.C: new test.
gcc/lra-constraints.cc
gcc/lra.cc
gcc/testsuite/g++.target/i386/pr111497.C [new file with mode: 0644]