re PR rtl-optimization/88179 ([MIPS] pr84941.c ICE in lra_eliminate_reg_if_possible...
authorVladimir Makarov <vmakarov@redhat.com>
Fri, 30 Nov 2018 20:15:56 +0000 (20:15 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Fri, 30 Nov 2018 20:15:56 +0000 (20:15 +0000)
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

gcc/ChangeLog
gcc/lra-constraints.c

index 7cda0b4191a2ac58910bc61fae4354bfba6758d8..29e42c000d52f4d147bc4ac07ecd9b33d7ae3bfe 100644 (file)
@@ -1,3 +1,9 @@
+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.
+
 2018-11-30  David Malcolm  <dmalcolm@redhat.com>
 
        PR preprocessor/88257
index 88546d2138ae814f5f86f80a51c8e5227c550709..04a90723aab2faee300eb9ed33a443d92af265d7 100644 (file)
@@ -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);
     }
 }