aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2018-11-30 20:15:56 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2018-11-30 20:15:56 +0000
commit9cb95c07fae669d450a0d29579e300ff52b45822 (patch)
treedcaf0b373a2f1c955e18ce034d8c0952bda239bb /gcc/lra-constraints.c
parent8863a902b2c07b9168f68a2808a6e9c1e14b947a (diff)
downloadgcc-9cb95c07fae669d450a0d29579e300ff52b45822.zip
gcc-9cb95c07fae669d450a0d29579e300ff52b45822.tar.gz
gcc-9cb95c07fae669d450a0d29579e300ff52b45822.tar.bz2
re PR rtl-optimization/88179 ([MIPS] pr84941.c ICE in lra_eliminate_reg_if_possible at lra-eliminations.c:1393 start with r266385)
2018-11-30 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/88179 * lra-constraints.c (address_eliminator::address_eliminator): Don't eleminate regs in illegitimate address. From-SVN: r266682
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r--gcc/lra-constraints.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 88546d2..04a9072 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -359,14 +359,20 @@ address_eliminator::address_eliminator (struct address_info *ad)
if (m_base_loc != NULL)
{
m_base_reg = *m_base_loc;
- lra_eliminate_reg_if_possible (m_base_loc);
+ /* If we have non-legitimate address which is decomposed not in
+ the way we expected, don't do elimination here. In such case
+ the address will be reloaded and elimination will be done in
+ reload insn finally. */
+ if (REG_P (m_base_reg))
+ lra_eliminate_reg_if_possible (m_base_loc);
if (m_ad->base_term2 != NULL)
*m_ad->base_term2 = *m_ad->base_term;
}
if (m_index_loc != NULL)
{
m_index_reg = *m_index_loc;
- lra_eliminate_reg_if_possible (m_index_loc);
+ if (REG_P (m_index_reg))
+ lra_eliminate_reg_if_possible (m_index_loc);
}
}