re PR target/64348 (Case scal-to-vec1.c failed on arm-linux-gnueabi with -fPIC)
authorKito Cheng <kito@0xlab.org>
Fri, 9 Jan 2015 06:19:32 +0000 (06:19 +0000)
committerBin Cheng <amker@gcc.gnu.org>
Fri, 9 Jan 2015 06:19:32 +0000 (06:19 +0000)
2015-01-09  Kito Cheng  <kito@0xlab.org>

PR rtl-optimization/64348
* lra-constraints.c (split_reg): Fix caller-save store/restore
instruction generation.

From-SVN: r219375

gcc/ChangeLog
gcc/lra-constraints.c

index c38f07aca591c118d9dcc33fb40ea496ff8e76f1..e1db810abf893338f807e1f09ae31f87f2c74518 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-09  Kito Cheng  <kito@0xlab.org>
+
+       PR rtl-optimization/64348
+       * lra-constraints.c (split_reg): Fix caller-save store/restore
+       instruction generation.
+
 2015-01-08  John David Anglin  <danglin@gcc.gnu.org>
 
        PR gcov-profile/61790
index 96b10a19cb5011328519028cc5589cba68205213..f8bc12fbfdfff433b95f63608ddd33098ae9719a 100644 (file)
@@ -4918,15 +4918,14 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
       reg_renumber[REGNO (new_reg)] = hard_regno;
     }
   save = emit_spill_move (true, new_reg, original_reg);
-  if (NEXT_INSN (save) != NULL_RTX)
+  if (NEXT_INSN (save) != NULL_RTX && !call_save_p)
     {
-      lra_assert (! call_save_p);
       if (lra_dump_file != NULL)
        {
          fprintf
            (lra_dump_file,
-            "    Rejecting split %d->%d resulting in > 2 %s save insns:\n",
-            original_regno, REGNO (new_reg), call_save_p ? "call" : "");
+            "    Rejecting split %d->%d resulting in > 2 save insns:\n",
+            original_regno, REGNO (new_reg));
          dump_rtl_slim (lra_dump_file, save, NULL, -1, 0);
          fprintf (lra_dump_file,
                   "    ))))))))))))))))))))))))))))))))))))))))))))))))\n");
@@ -4934,15 +4933,14 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
       return false;
     }
   restore = emit_spill_move (false, new_reg, original_reg);
-  if (NEXT_INSN (restore) != NULL_RTX)
+  if (NEXT_INSN (restore) != NULL_RTX && !call_save_p)
     {
-      lra_assert (! call_save_p);
       if (lra_dump_file != NULL)
        {
          fprintf (lra_dump_file,
                   "    Rejecting split %d->%d "
-                  "resulting in > 2 %s restore insns:\n",
-                  original_regno, REGNO (new_reg), call_save_p ? "call" : "");
+                  "resulting in > 2 restore insns:\n",
+                  original_regno, REGNO (new_reg));
          dump_rtl_slim (lra_dump_file, restore, NULL, -1, 0);
          fprintf (lra_dump_file,
                   "    ))))))))))))))))))))))))))))))))))))))))))))))))\n");