re PR target/88457 (ICE: Max. number of generated reload insns per insn is achieved (90))

2018-12-20  Vladimir Makarov  <vmakarov@redhat.com>

	PR target/88457
	* ira-color.c (fast_allocation): Choose the best cost hard reg.

2018-12-20  Vladimir Makarov  <vmakarov@redhat.com>

	PR target/88457
	* ira-color.c (fast_allocation): Choose the best cost hard reg.

From-SVN: r267307
This commit is contained in:
Vladimir Makarov 2018-12-20 18:07:51 +00:00 committed by Vladimir Makarov
parent 2694cacbc0
commit 159fdc3966
4 changed files with 48 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2018-12-20 Vladimir Makarov <vmakarov@redhat.com>
PR target/88457
* ira-color.c (fast_allocation): Choose the best cost hard reg.
2018-12-20 Richard Sandiford <richard.sandiford@arm.com>
* config/aarch64/iterators.md (SVE_INT_UNARY, fp_int_op): Add abs.

View File

@ -4852,7 +4852,8 @@ color (void)
static void
fast_allocation (void)
{
int i, j, k, num, class_size, hard_regno;
int i, j, k, num, class_size, hard_regno, best_hard_regno, cost, min_cost;
int *costs;
#ifdef STACK_REGS
bool no_stack_reg_p;
#endif
@ -4903,6 +4904,9 @@ fast_allocation (void)
no_stack_reg_p = ALLOCNO_NO_STACK_REG_P (a);
#endif
class_size = ira_class_hard_regs_num[aclass];
costs = ALLOCNO_HARD_REG_COSTS (a);
min_cost = INT_MAX;
best_hard_regno = -1;
for (j = 0; j < class_size; j++)
{
hard_regno = ira_class_hard_regs[aclass][j];
@ -4915,16 +4919,28 @@ fast_allocation (void)
|| (TEST_HARD_REG_BIT
(ira_prohibited_class_mode_regs[aclass][mode], hard_regno)))
continue;
ALLOCNO_HARD_REGNO (a) = hard_regno;
for (l = 0; l < nr; l++)
if (costs == NULL)
{
ira_object_t obj = ALLOCNO_OBJECT (a, l);
for (r = OBJECT_LIVE_RANGES (obj); r != NULL; r = r->next)
for (k = r->start; k <= r->finish; k++)
IOR_HARD_REG_SET (used_hard_regs[k],
ira_reg_mode_hard_regset[hard_regno][mode]);
best_hard_regno = hard_regno;
break;
}
break;
cost = costs[j];
if (min_cost > cost)
{
min_cost = cost;
best_hard_regno = hard_regno;
}
}
if (best_hard_regno < 0)
continue;
ALLOCNO_HARD_REGNO (a) = hard_regno = best_hard_regno;
for (l = 0; l < nr; l++)
{
ira_object_t obj = ALLOCNO_OBJECT (a, l);
for (r = OBJECT_LIVE_RANGES (obj); r != NULL; r = r->next)
for (k = r->start; k <= r->finish; k++)
IOR_HARD_REG_SET (used_hard_regs[k],
ira_reg_mode_hard_regset[hard_regno][mode]);
}
}
ira_free (sorted_allocnos);

View File

@ -1,3 +1,8 @@
2018-12-20 Vladimir Makarov <vmakarov@redhat.com>
PR target/88457
* gcc.target/powerpc/pr88457.c: New.
2018-12-20 Jakub Jelinek <jakub@redhat.com>
PR c++/88180

View File

@ -0,0 +1,13 @@
/* { dg-do compile { target { powerpc64*-*-* } } } */
/* { dg-options "-m32 -mcpu=power7 -O1 -fexpensive-optimizations --param ira-max-conflict-table-size=0 --param max-cse-insns=3 -c -mcpu=e300c3" } */
__attribute__((target_clones("cpu=power9,default")))
long mod_func (long a, long b)
{
return a % b;
}
long mod_func_or (long a, long b, long c)
{
return mod_func (a, b) | c;
}