Commit e150ae4f by Torbjorn Granlund

(pa_adjust_cost): Replace, the function of Mar 2 was an old version.

(output_fp_move_double): Use %r syntax for registers.

From-SVN: r3621
parent d36d70cc
...@@ -1129,7 +1129,7 @@ output_fp_move_double (operands) ...@@ -1129,7 +1129,7 @@ output_fp_move_double (operands)
xoperands[1] = operands[1]; xoperands[1] = operands[1];
xoperands[2] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1); xoperands[2] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
output_asm_insn output_asm_insn
("stw %1,-16(0,30)\n\tstw %2,-12(0,30)\n\tfldds -16(0,30),%0", ("stw %1,-16(0,%%r30)\n\tstw %2,-12(0,%%r30)\n\tfldds -16(0,%%r30),%0",
xoperands); xoperands);
} }
else else
...@@ -1144,7 +1144,7 @@ output_fp_move_double (operands) ...@@ -1144,7 +1144,7 @@ output_fp_move_double (operands)
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1); xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
xoperands[0] = operands[0]; xoperands[0] = operands[0];
output_asm_insn output_asm_insn
("fstds %2,-16(0,30)\n\tldw -12(0,30),%1\n\tldw -16(0,30),%0", ("fstds %2,-16(0,%%r30)\n\tldw -12(0,%%r30),%1\n\tldw -16(0,%%r30),%0",
xoperands); xoperands);
} }
else else
...@@ -2071,9 +2071,8 @@ pa_adjust_cost (insn, link, dep_insn, cost) ...@@ -2071,9 +2071,8 @@ pa_adjust_cost (insn, link, dep_insn, cost)
rtx dep_insn; rtx dep_insn;
int cost; int cost;
{ {
/* If the dependence is an anti-dependence, there is no cost. For an if (! recog_memoized (insn))
output dependence, there is sometimes a cost, but it doesn't seem return 0;
worth handling those few cases. */
if (REG_NOTE_KIND (link) == 0) if (REG_NOTE_KIND (link) == 0)
{ {
...@@ -2082,16 +2081,24 @@ pa_adjust_cost (insn, link, dep_insn, cost) ...@@ -2082,16 +2081,24 @@ pa_adjust_cost (insn, link, dep_insn, cost)
if (get_attr_type (insn) == TYPE_FPSTORE) if (get_attr_type (insn) == TYPE_FPSTORE)
{ {
if (GET_CODE (PATTERN (insn)) != SET rtx pat = PATTERN (insn);
|| GET_CODE (PATTERN (dep_insn)) != SET) rtx dep_pat = PATTERN (dep_insn);
if (GET_CODE (pat) == PARALLEL)
{
/* This happens for the fstXs,mb patterns. */
pat = XVECEXP (pat, 0, 0);
}
if (GET_CODE (pat) != SET || GET_CODE (dep_pat) != SET)
/* If this happens, we have to extend this to schedule /* If this happens, we have to extend this to schedule
optimally. */ optimally. Return 0 for now. */
abort(); return 0;
if (rtx_equal_p (SET_DEST (PATTERN (dep_insn)), SET_SRC (PATTERN (insn)))) if (rtx_equal_p (SET_DEST (dep_pat), SET_SRC (pat)))
{ {
/* INSN is a fp store and DEP_INSN is writing to the register if (! recog_memoized (dep_insn))
being stored. */ return 0;
/* DEP_INSN is writing its result to the register
being stored in the fpstore INSN. */
switch (get_attr_type (dep_insn)) switch (get_attr_type (dep_insn))
{ {
case TYPE_FPLOAD: case TYPE_FPLOAD:
...@@ -2125,14 +2132,22 @@ pa_adjust_cost (insn, link, dep_insn, cost) ...@@ -2125,14 +2132,22 @@ pa_adjust_cost (insn, link, dep_insn, cost)
if (get_attr_type (insn) == TYPE_FPLOAD) if (get_attr_type (insn) == TYPE_FPLOAD)
{ {
if (GET_CODE (PATTERN (insn)) != SET rtx pat = PATTERN (insn);
|| GET_CODE (PATTERN (dep_insn)) != SET) rtx dep_pat = PATTERN (dep_insn);
if (GET_CODE (pat) == PARALLEL)
{
/* This happens for the fldXs,mb patterns. */
pat = XVECEXP (pat, 0, 0);
}
if (GET_CODE (pat) != SET || GET_CODE (dep_pat) != SET)
/* If this happens, we have to extend this to schedule /* If this happens, we have to extend this to schedule
optimally. */ optimally. Return 0 for now. */
abort(); return 0;
if (rtx_equal_p (SET_SRC (PATTERN (dep_insn)), SET_DEST (PATTERN (insn)))) if (reg_mentioned_p (SET_DEST (pat), SET_SRC (dep_pat)))
{ {
if (! recog_memoized (dep_insn))
return 0;
switch (get_attr_type (dep_insn)) switch (get_attr_type (dep_insn))
{ {
case TYPE_FPALU: case TYPE_FPALU:
...@@ -2141,6 +2156,10 @@ pa_adjust_cost (insn, link, dep_insn, cost) ...@@ -2141,6 +2156,10 @@ pa_adjust_cost (insn, link, dep_insn, cost)
case TYPE_FPDIVDBL: case TYPE_FPDIVDBL:
case TYPE_FPSQRTSGL: case TYPE_FPSQRTSGL:
case TYPE_FPSQRTDBL: case TYPE_FPSQRTDBL:
/* A fpload can't be issued until one cycle before a
preceeding arithmetic operation has finished, if
the target of the fpload is any of the sources
(or destination) of the arithmetic operation. */
return cost - 1; return cost - 1;
default: default:
...@@ -2153,9 +2172,8 @@ pa_adjust_cost (insn, link, dep_insn, cost) ...@@ -2153,9 +2172,8 @@ pa_adjust_cost (insn, link, dep_insn, cost)
return 0; return 0;
} }
/* For all other cases of anti dependency and all cases of output /* For output dependencies, the cost is often one too high. */
dependence the md is correct enough for the PA7000. */ return cost - 1;
return cost;
} }
/* Print operand X (an rtx) in assembler syntax to file FILE. /* Print operand X (an rtx) in assembler syntax to file FILE.
......
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