Commit 2edc8d65 by Richard Kenner

(reload_reg_free_p, reloads_conflict): RELOAD_OTHER and

RELOAD_FOR_OTHER_ADDRESS conflict.

From-SVN: r12980
parent 8a892040
...@@ -4301,20 +4301,15 @@ reload_reg_free_p (regno, opnum, type) ...@@ -4301,20 +4301,15 @@ reload_reg_free_p (regno, opnum, type)
{ {
int i; int i;
/* In use for a RELOAD_OTHER means it's not available for anything except /* In use for a RELOAD_OTHER means it's not available for anything. */
RELOAD_FOR_OTHER_ADDRESS. Recall that RELOAD_FOR_OTHER_ADDRESS is known if (TEST_HARD_REG_BIT (reload_reg_used, regno))
to be used only for inputs. */
if (type != RELOAD_FOR_OTHER_ADDRESS
&& TEST_HARD_REG_BIT (reload_reg_used, regno))
return 0; return 0;
switch (type) switch (type)
{ {
case RELOAD_OTHER: case RELOAD_OTHER:
/* In use for anything except RELOAD_FOR_OTHER_ADDRESS means /* In use for anything means we can't use it for RELOAD_OTHER. */
we can't use it for RELOAD_OTHER. */ if (TEST_HARD_REG_BIT (reload_reg_used_in_other_addr, regno)
if (TEST_HARD_REG_BIT (reload_reg_used, regno)
|| TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno) || TEST_HARD_REG_BIT (reload_reg_used_in_op_addr, regno)
|| TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)) || TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno))
return 0; return 0;
...@@ -4665,10 +4660,8 @@ reloads_conflict (r1, r2) ...@@ -4665,10 +4660,8 @@ reloads_conflict (r1, r2)
int r1_opnum = reload_opnum[r1]; int r1_opnum = reload_opnum[r1];
int r2_opnum = reload_opnum[r2]; int r2_opnum = reload_opnum[r2];
/* RELOAD_OTHER conflicts with everything except /* RELOAD_OTHER conflicts with everything. */
RELOAD_FOR_OTHER_ADDRESS. */ if (r2_type == RELOAD_OTHER)
if (r2_type == RELOAD_OTHER && r1_type != RELOAD_FOR_OTHER_ADDRESS)
return 1; return 1;
/* Otherwise, check conflicts differently for each type. */ /* Otherwise, check conflicts differently for each type. */
...@@ -4712,7 +4705,7 @@ reloads_conflict (r1, r2) ...@@ -4712,7 +4705,7 @@ reloads_conflict (r1, r2)
return r2_type == RELOAD_FOR_OTHER_ADDRESS; return r2_type == RELOAD_FOR_OTHER_ADDRESS;
case RELOAD_OTHER: case RELOAD_OTHER:
return r2_type != RELOAD_FOR_OTHER_ADDRESS; return 1;
default: default:
abort (); abort ();
...@@ -6508,7 +6501,7 @@ emit_reload_insns (insn) ...@@ -6508,7 +6501,7 @@ emit_reload_insns (insn)
RELOAD_FOR_OTHER_ADDRESS reloads for input addresses. RELOAD_FOR_OTHER_ADDRESS reloads for input addresses.
RELOAD_OTHER reloads, output in ascending order by reload number. RELOAD_OTHER reloads.
For each operand, any RELOAD_FOR_INPUT_ADDRESS reloads followed by For each operand, any RELOAD_FOR_INPUT_ADDRESS reloads followed by
the RELOAD_FOR_INPUT reload for the operand. the RELOAD_FOR_INPUT reload for the operand.
......
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