re PR rtl-optimization/64110 (ICE: Max. number of generated reload insns per insn is achieved (90))

2014-12-12  Vladimir Makarov  <vmakarov@redhat.com>

	PR target/64110
	* lra-constraints.c (process_alt_operands): Refuse alternative
	when reload pseudo of given class can not hold value of given
	mode.

2014-12-12  Vladimir Makarov  <vmakarov@redhat.com>

	PR target/64110
	* gcc.target/i386/pr64110.c: New.

From-SVN: r218688
This commit is contained in:
Vladimir Makarov 2014-12-12 20:11:10 +00:00 committed by Vladimir Makarov
parent 88c7eae209
commit f66af4aa7f
4 changed files with 52 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2014-12-12 Vladimir Makarov <vmakarov@redhat.com>
PR target/64110
* lra-constraints.c (process_alt_operands): Refuse alternative
when reload pseudo of given class can not hold value of given
mode.
2014-12-12 Thomas Schwinge <thomas@codesourcery.com>
* gimple-walk.c (walk_gimple_op) <GIMPLE_OMP_FOR>: Also check

View File

@ -2267,6 +2267,29 @@ process_alt_operands (int only_alternative)
goto fail;
}
/* Alternative loses if it required class pseudo can not
hold value of required mode. Such insns can be
described by insn definitions with mode iterators.
Don't use ira_prohibited_class_mode_regs here as it
is common practice for constraints to use a class
which does not have actually enough regs to hold the
value (e.g. x86 AREG for mode requiring more one
general reg). */
if (GET_MODE (*curr_id->operand_loc[nop]) != VOIDmode
&& ! hard_reg_set_empty_p (this_alternative_set)
&& ! HARD_REGNO_MODE_OK (ira_class_hard_regs
[this_alternative][0],
GET_MODE (*curr_id->operand_loc[nop])))
{
if (lra_dump_file != NULL)
fprintf
(lra_dump_file,
" alt=%d: reload pseudo for op %d "
" can not hold the mode value -- refuse\n",
nalt, nop);
goto fail;
}
/* Check strong discouragement of reload of non-constant
into class THIS_ALTERNATIVE. */
if (! CONSTANT_P (op) && ! no_regs_p

View File

@ -1,3 +1,8 @@
2014-12-12 Vladimir Makarov <vmakarov@redhat.com>
PR target/64110
* gcc.target/i386/pr64110.c: New.
2014-12-12 Thomas Schwinge <thomas@codesourcery.com>
* c-c++-common/gomp/nesting-1.c: New file.

View File

@ -0,0 +1,17 @@
/* { dg-do compile } */
/* { dg-options "-O3 -march=core-avx2" } */
int foo (void);
int a;
short *b;
void
bar (short x)
{
while (a--)
{
int i, j = foo ();
for (i = 0; i < j; ++i)
*b++ = x;
}
}