[LRA] Relax one gcc_assert in lra-eliminate for fixed register
authorJiong Wang <jiong.wang@arm.com>
Tue, 18 Nov 2014 09:30:08 +0000 (09:30 +0000)
committerJiong Wang <jiwang@gcc.gnu.org>
Tue, 18 Nov 2014 09:30:08 +0000 (09:30 +0000)
  gcc/
    * lra-eliminations.c (update_reg_eliminate): Relax gcc_assert for fixed
    registers.

From-SVN: r217691

gcc/ChangeLog
gcc/lra-eliminations.c

index 4877dc977479c08340f786106fc4f07700a58beb..b303164e248249f9d46a3c83c14b3312470a6faf 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-18  Jiong Wang  <jiong.wang@arm.com>
+
+       * lra-eliminations.c (update_reg_eliminate): Relax gcc_assert for fixed
+       registers.
+
 2014-11-18  Marat Zakirov  <m.zakirov@samsung.com>
 
        * opts.c (finish_options): Disable aggressive opts for sanitizer.  
index 8ab0222ae501fe6bb8c61f4bb5b68b76077c64bc..aeae27c37104b5616de90dcd01b4d6c0d5a95928 100644 (file)
@@ -1199,7 +1199,9 @@ update_reg_eliminate (bitmap insns_with_changed_offsets)
                     ep->from, ep->to);
          /* If after processing RTL we decides that SP can be used as
             a result of elimination, it can not be changed.  */
-         gcc_assert (ep->to_rtx != stack_pointer_rtx);
+         gcc_assert ((ep->to_rtx != stack_pointer_rtx)
+                     || (ep->from < FIRST_PSEUDO_REGISTER
+                         && fixed_regs [ep->from]));
          /* Mark that is not eliminable anymore.  */
          elimination_map[ep->from] = NULL;
          for (ep1 = ep + 1; ep1 < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep1++)