diff options
author | Vladimir N. Makarov <vmakarov@redhat.com> | 2021-01-21 17:27:01 -0500 |
---|---|---|
committer | Vladimir N. Makarov <vmakarov@redhat.com> | 2021-01-21 18:06:49 -0500 |
commit | 68ba1039c7daf0485b167fe199ed7e8031158091 (patch) | |
tree | 8e772cc2843b097a3ce590403ed20d0b5b0e4032 /gcc/lra-eliminations.c | |
parent | efb6bc55a93a1b8a719e0dab344c0a21344a67a9 (diff) | |
download | gcc-68ba1039c7daf0485b167fe199ed7e8031158091.zip gcc-68ba1039c7daf0485b167fe199ed7e8031158091.tar.gz gcc-68ba1039c7daf0485b167fe199ed7e8031158091.tar.bz2 |
[PR98777] LRA: Use preliminary created pseudo for in LRA elimination subpass
LRA did not extend ira_reg_equiv after generation of a pseudo in
eliminate_regs_in_insn which might results in LRA crash. It is better not
to extend ira_reg_equiv but to use preliminary generated pseudo. The
patch implements it.
gcc/ChangeLog:
PR rtl-optimization/98777
* lra-int.h (lra_pmode_pseudo): New extern.
* lra.c (lra_pmode_pseudo): New global.
(lra): Set it up.
* lra-eliminations.c (eliminate_regs_in_insn): Use it.
gcc/testsuite/ChangeLog:
PR rtl-optimization/98777
* gcc.target/riscv/pr98777.c: New.
Diffstat (limited to 'gcc/lra-eliminations.c')
-rw-r--r-- | gcc/lra-eliminations.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/lra-eliminations.c b/gcc/lra-eliminations.c index 5b97175..c97f9ca 100644 --- a/gcc/lra-eliminations.c +++ b/gcc/lra-eliminations.c @@ -1059,7 +1059,7 @@ eliminate_regs_in_insn (rtx_insn *insn, bool replace_p, bool first_p, && REGNO (reg1) < FIRST_PSEUDO_REGISTER && REGNO (reg2) >= FIRST_PSEUDO_REGISTER && GET_MODE (reg1) == Pmode - && !have_addptr3_insn (gen_reg_rtx (Pmode), reg1, + && !have_addptr3_insn (lra_pmode_pseudo, reg1, XEXP (XEXP (SET_SRC (set), 0), 1))) { XEXP (XEXP (SET_SRC (set), 0), 0) = op2; |