Commit 1bc695cd by Jeff Law

pa.c (emit_move_sequence): Check both reload_in_progress and reload_completed when...

	* pa.c (emit_move_sequence): Check both reload_in_progress and
	reload_completed when choosing a scratch/temporary register.

From-SVN: r5180
parent 44552b6a
...@@ -842,7 +842,7 @@ emit_move_sequence (operands, mode, scratch_reg) ...@@ -842,7 +842,7 @@ emit_move_sequence (operands, mode, scratch_reg)
emit_insn (gen_rtx (SET, VOIDmode, operand0, operand1)); emit_insn (gen_rtx (SET, VOIDmode, operand0, operand1));
return 1; return 1;
} }
if (! reload_in_progress) if (! (reload_in_progress || reload_completed))
{ {
operands[0] = validize_mem (operand0); operands[0] = validize_mem (operand0);
operands[1] = operand1 = force_reg (mode, operand1); operands[1] = operand1 = force_reg (mode, operand1);
...@@ -865,7 +865,13 @@ emit_move_sequence (operands, mode, scratch_reg) ...@@ -865,7 +865,13 @@ emit_move_sequence (operands, mode, scratch_reg)
{ {
if (flag_pic) if (flag_pic)
{ {
rtx temp = reload_in_progress ? operand0 : gen_reg_rtx (Pmode); rtx temp;
if (reload_in_progress || reload_completed)
temp = operand0;
else
temp = gen_reg_rtx (Pmode);
operands[1] = legitimize_pic_address (operand1, mode, temp); operands[1] = legitimize_pic_address (operand1, mode, temp);
emit_insn (gen_rtx (SET, VOIDmode, operand0, operands[1])); emit_insn (gen_rtx (SET, VOIDmode, operand0, operands[1]));
} }
...@@ -876,7 +882,7 @@ emit_move_sequence (operands, mode, scratch_reg) ...@@ -876,7 +882,7 @@ emit_move_sequence (operands, mode, scratch_reg)
{ {
rtx temp, set; rtx temp, set;
if (reload_in_progress) if (reload_in_progress || reload_completed)
temp = scratch_reg ? scratch_reg : operand0; temp = scratch_reg ? scratch_reg : operand0;
else else
temp = gen_reg_rtx (mode); temp = gen_reg_rtx (mode);
...@@ -893,8 +899,13 @@ emit_move_sequence (operands, mode, scratch_reg) ...@@ -893,8 +899,13 @@ emit_move_sequence (operands, mode, scratch_reg)
gen_rtx (HIGH, mode, operand1))); gen_rtx (HIGH, mode, operand1)));
if (function_label_operand (operand1, mode)) if (function_label_operand (operand1, mode))
{ {
rtx temp = reload_in_progress ? scratch_reg rtx temp;
: gen_reg_rtx (mode);
if (reload_in_progress || reload_completed)
temp = scratch_reg;
else
temp = gen_reg_rtx (mode);
if (!temp) if (!temp)
abort (); abort ();
emit_insn (gen_rtx (PARALLEL, VOIDmode, emit_insn (gen_rtx (PARALLEL, VOIDmode,
...@@ -912,7 +923,13 @@ emit_move_sequence (operands, mode, scratch_reg) ...@@ -912,7 +923,13 @@ emit_move_sequence (operands, mode, scratch_reg)
else if (GET_CODE (operand1) != CONST_INT else if (GET_CODE (operand1) != CONST_INT
|| ! cint_ok_for_move (INTVAL (operand1))) || ! cint_ok_for_move (INTVAL (operand1)))
{ {
rtx temp = reload_in_progress ? operand0 : gen_reg_rtx (mode); rtx temp;
if (reload_in_progress || reload_completed)
temp = operand0;
else
temp = gen_reg_rtx (mode);
emit_insn (gen_rtx (SET, VOIDmode, temp, emit_insn (gen_rtx (SET, VOIDmode, temp,
gen_rtx (HIGH, mode, operand1))); gen_rtx (HIGH, mode, operand1)));
operands[1] = gen_rtx (LO_SUM, mode, temp, operand1); operands[1] = gen_rtx (LO_SUM, mode, temp, operand1);
......
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