Commit c61fe0cc by Kito Cheng Committed by Bin Cheng

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
parent a8e67466
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> 2015-01-08 John David Anglin <danglin@gcc.gnu.org>
PR gcov-profile/61790 PR gcov-profile/61790
......
...@@ -4918,15 +4918,14 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn, ...@@ -4918,15 +4918,14 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
reg_renumber[REGNO (new_reg)] = hard_regno; reg_renumber[REGNO (new_reg)] = hard_regno;
} }
save = emit_spill_move (true, new_reg, original_reg); 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) if (lra_dump_file != NULL)
{ {
fprintf fprintf
(lra_dump_file, (lra_dump_file,
" Rejecting split %d->%d resulting in > 2 %s save insns:\n", " Rejecting split %d->%d resulting in > 2 save insns:\n",
original_regno, REGNO (new_reg), call_save_p ? "call" : ""); original_regno, REGNO (new_reg));
dump_rtl_slim (lra_dump_file, save, NULL, -1, 0); dump_rtl_slim (lra_dump_file, save, NULL, -1, 0);
fprintf (lra_dump_file, fprintf (lra_dump_file,
" ))))))))))))))))))))))))))))))))))))))))))))))))\n"); " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
...@@ -4934,15 +4933,14 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn, ...@@ -4934,15 +4933,14 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
return false; return false;
} }
restore = emit_spill_move (false, new_reg, original_reg); 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) if (lra_dump_file != NULL)
{ {
fprintf (lra_dump_file, fprintf (lra_dump_file,
" Rejecting split %d->%d " " Rejecting split %d->%d "
"resulting in > 2 %s restore insns:\n", "resulting in > 2 restore insns:\n",
original_regno, REGNO (new_reg), call_save_p ? "call" : ""); original_regno, REGNO (new_reg));
dump_rtl_slim (lra_dump_file, restore, NULL, -1, 0); dump_rtl_slim (lra_dump_file, restore, NULL, -1, 0);
fprintf (lra_dump_file, fprintf (lra_dump_file,
" ))))))))))))))))))))))))))))))))))))))))))))))))\n"); " ))))))))))))))))))))))))))))))))))))))))))))))))\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment