re PR rtl-optimization/87759 (ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maximum number of LRA assignment passes is achieved (30), or compile-time hog)

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

	PR rtl-optimization/87759
	* lra-assigns.c (lra_split_hard_reg_for): Recalculate
	non_reload_pseudos.

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

	PR rtl-optimization/87759
	* gcc.target/i386/pr87759.c: New.

From-SVN: r267244
This commit is contained in:
Vladimir Makarov 2018-12-18 21:20:16 +00:00 committed by Vladimir Makarov
parent dc5b05a075
commit 003cd04c4b
4 changed files with 55 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2018-12-18 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/87759
* lra-assigns.c (lra_split_hard_reg_for): Recalculate
non_reload_pseudos.
2018-12-18 Jakub Jelinek <jakub@redhat.com>
PR target/88464

View File

@ -1758,6 +1758,10 @@ lra_split_hard_reg_for (void)
"\n****** Splitting a hard reg after assignment #%d: ******\n\n",
lra_assignment_iter);
bitmap_initialize (&failed_reload_pseudos, &reg_obstack);
bitmap_initialize (&non_reload_pseudos, &reg_obstack);
bitmap_ior (&non_reload_pseudos, &lra_inheritance_pseudos, &lra_split_regs);
bitmap_ior_into (&non_reload_pseudos, &lra_subreg_reload_pseudos);
bitmap_ior_into (&non_reload_pseudos, &lra_optional_reload_pseudos);
for (i = lra_constraint_new_regno_start; i < max_regno; i++)
if (reg_renumber[i] < 0 && lra_reg_info[i].nrefs != 0
&& (rclass = lra_get_allocno_class (i)) != NO_REGS
@ -1772,6 +1776,7 @@ lra_split_hard_reg_for (void)
}
bitmap_set_bit (&failed_reload_pseudos, i);
}
bitmap_clear (&non_reload_pseudos);
bitmap_initialize (&failed_reload_insns, &reg_obstack);
EXECUTE_IF_SET_IN_BITMAP (&failed_reload_pseudos, 0, u, bi)
{

View File

@ -1,3 +1,8 @@
2018-12-18 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/87759
* gcc.target/i386/pr87759.c: New.
2018-12-18 Jakub Jelinek <jakub@redhat.com>
PR target/88464

View File

@ -0,0 +1,39 @@
/* PR rtl-optimization/87759 */
/* { dg-do compile } */
/* { dg-options "-O2 -w -fschedule-insns -fselective-scheduling -ftrapv -fno-dce -fno-expensive-optimizations -fno-ipa-ra -fno-tree-dce -fno-tree-ter" } */
int cc;
void
rc (__int128 *oi)
{
__int128 qz = (__int128)2 << cc;
if (qz != 0)
{
if (cc != 0)
{
__int128 zp = 1;
for (;;)
{
unsigned __int128 *ar = &cc;
int y5;
if (oi != 0)
{
y3:
zp = *oi + *ar;
}
y5 = (cc + 1) == ((*ar /= *oi) << ((zp >>= 128) / cc));
qz += !!y5 ? 1 : qz == (*ar ^ zp + 1);
++*oi;
}
}
else
++qz;
}
goto y3;
}