Commit 6d078c9a by Vladimir Makarov Committed by Vladimir Makarov

re PR target/88207 (gcc.target/i386/pr22076.c etc. FAIL)

2018-11-28  Vladimir Makarov  <vmakarov@redhat.com>

	PR target/88207
	* ira-costs.c (scan_one_insn): Process subregs when updating costs
	for pseudos and allocnos from insn.

From-SVN: r266582
parent bdd0bd5c
2018-11-28 Vladimir Makarov <vmakarov@redhat.com>
PR target/88207
* ira-costs.c (scan_one_insn): Process subregs when updating costs
for pseudos and allocnos from insn.
2018-11-28 David Edelsohn <dje.gcc@gmail.com> 2018-11-28 David Edelsohn <dje.gcc@gmail.com>
* config/rs6000/aix72.h: Update to match aix71.h changes. * config/rs6000/aix72.h: Update to match aix71.h changes.
...@@ -1535,36 +1535,40 @@ scan_one_insn (rtx_insn *insn) ...@@ -1535,36 +1535,40 @@ scan_one_insn (rtx_insn *insn)
/* Now add the cost for each operand to the total costs for its /* Now add the cost for each operand to the total costs for its
allocno. */ allocno. */
for (i = 0; i < recog_data.n_operands; i++) for (i = 0; i < recog_data.n_operands; i++)
if (REG_P (recog_data.operand[i]) {
&& REGNO (recog_data.operand[i]) >= FIRST_PSEUDO_REGISTER) rtx op = recog_data.operand[i];
{
int regno = REGNO (recog_data.operand[i]); if (GET_CODE (op) == SUBREG)
struct costs *p = COSTS (costs, COST_INDEX (regno)); op = SUBREG_REG (op);
struct costs *q = op_costs[i]; if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER)
int *p_costs = p->cost, *q_costs = q->cost; {
cost_classes_t cost_classes_ptr = regno_cost_classes[regno]; int regno = REGNO (op);
int add_cost; struct costs *p = COSTS (costs, COST_INDEX (regno));
struct costs *q = op_costs[i];
/* If the already accounted for the memory "cost" above, don't int *p_costs = p->cost, *q_costs = q->cost;
do so again. */ cost_classes_t cost_classes_ptr = regno_cost_classes[regno];
if (!counted_mem) int add_cost;
{
add_cost = q->mem_cost; /* If the already accounted for the memory "cost" above, don't
if (add_cost > 0 && INT_MAX - add_cost < p->mem_cost) do so again. */
p->mem_cost = INT_MAX; if (!counted_mem)
else {
p->mem_cost += add_cost; add_cost = q->mem_cost;
} if (add_cost > 0 && INT_MAX - add_cost < p->mem_cost)
for (k = cost_classes_ptr->num - 1; k >= 0; k--) p->mem_cost = INT_MAX;
{ else
add_cost = q_costs[k]; p->mem_cost += add_cost;
if (add_cost > 0 && INT_MAX - add_cost < p_costs[k]) }
p_costs[k] = INT_MAX; for (k = cost_classes_ptr->num - 1; k >= 0; k--)
else {
p_costs[k] += add_cost; add_cost = q_costs[k];
} if (add_cost > 0 && INT_MAX - add_cost < p_costs[k])
} p_costs[k] = INT_MAX;
else
p_costs[k] += add_cost;
}
}
}
return insn; return insn;
} }
......
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