diff options
author | Kito Cheng <kito@0xlab.org> | 2015-01-09 06:19:32 +0000 |
---|---|---|
committer | Bin Cheng <amker@gcc.gnu.org> | 2015-01-09 06:19:32 +0000 |
commit | c61fe0cc565a305a3014129b197aa042ce86030f (patch) | |
tree | 8aba64f42e3342a88964e81f7574bd184e77d1fe | |
parent | a8e67466d35f12aa7997363984f97a35e2a40eba (diff) | |
download | gcc-c61fe0cc565a305a3014129b197aa042ce86030f.zip gcc-c61fe0cc565a305a3014129b197aa042ce86030f.tar.gz gcc-c61fe0cc565a305a3014129b197aa042ce86030f.tar.bz2 |
re PR target/64348 (Case scal-to-vec1.c failed on arm-linux-gnueabi with -fPIC)
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lra-constraints.c | 14 |
2 files changed, 12 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c38f07a..e1db810 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 96b10a1..f8bc12f 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -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"); |