Commit f4581282 by Vladimir Makarov Committed by Vladimir Makarov

re PR rtl-optimization/60650 ([ARM] LRA ICE in assign_by_spills)

2014-04-02  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/60650
	* lra-constraints.c (process_alt_operands): Decrease reject for
	earlyclobber matching.

2014-04-02  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/60650
	* gcc.target/arm/pr60650-2.c: New.

From-SVN: r209038
parent ab18f2f5
2014-04-02 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/60650
* lra-constraints.c (process_alt_operands): Decrease reject for
earlyclobber matching.
2014-04-02 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> 2014-04-02 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.c (s390_expand_insv): Use GET_MODE_BITSIZE. * config/s390/s390.c (s390_expand_insv): Use GET_MODE_BITSIZE.
...@@ -280,7 +286,7 @@ ...@@ -280,7 +286,7 @@
2014-03-27 Vladimir Makarov <vmakarov@redhat.com> 2014-03-27 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/60650 PR rtl-optimization/60650
* lra-asign.c (find_hard_regno_for, spill_for): Add parameter * lra-assign.c (find_hard_regno_for, spill_for): Add parameter
first_p. Use it. first_p. Use it.
(find_spills_for): New. (find_spills_for): New.
(assign_by_spills): Pass the new parameter to find_hard_regno_for. (assign_by_spills): Pass the new parameter to find_hard_regno_for.
......
...@@ -1747,12 +1747,27 @@ process_alt_operands (int only_alternative) ...@@ -1747,12 +1747,27 @@ process_alt_operands (int only_alternative)
[GET_MODE (*curr_id->operand_loc[m])]); [GET_MODE (*curr_id->operand_loc[m])]);
} }
/* We prefer no matching alternatives because /* Prefer matching earlyclobber alternative as
it gives more freedom in RA. */ it results in less hard regs required for
if (operand_reg[nop] == NULL_RTX the insn than a non-matching earlyclobber
|| (find_regno_note (curr_insn, REG_DEAD, alternative. */
REGNO (operand_reg[nop])) if (curr_static_id->operand[m].early_clobber)
== NULL_RTX)) {
if (lra_dump_file != NULL)
fprintf
(lra_dump_file,
" %d Matching earlyclobber alt:"
" reject--\n",
nop);
reject--;
}
/* Otherwise we prefer no matching
alternatives because it gives more freedom
in RA. */
else if (operand_reg[nop] == NULL_RTX
|| (find_regno_note (curr_insn, REG_DEAD,
REGNO (operand_reg[nop]))
== NULL_RTX))
{ {
if (lra_dump_file != NULL) if (lra_dump_file != NULL)
fprintf fprintf
...@@ -2143,7 +2158,7 @@ process_alt_operands (int only_alternative) ...@@ -2143,7 +2158,7 @@ process_alt_operands (int only_alternative)
} }
/* If the operand is dying, has a matching constraint, /* If the operand is dying, has a matching constraint,
and satisfies constraints of the matched operand and satisfies constraints of the matched operand
which failed to satisfy the own constraints, probably which failed to satisfy the own constraints, most probably
the reload for this operand will be gone. */ the reload for this operand will be gone. */
if (this_alternative_matches >= 0 if (this_alternative_matches >= 0
&& !curr_alt_win[this_alternative_matches] && !curr_alt_win[this_alternative_matches]
......
2014-04-02 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/60650
* gcc.target/arm/pr60650-2.c: New.
2014-04-02 Joseph Myers <joseph@codesourcery.cmo> 2014-04-02 Joseph Myers <joseph@codesourcery.cmo>
* gcc.target/i386/avx2-vpand-3.c, * gcc.target/i386/avx2-vpand-3.c,
......
/* { dg-do compile } */
/* { dg-options "-O2 -fno-omit-frame-pointer -march=armv7-a" } */
int a, h, j;
long long d, e, i;
int f;
fn1 (void *p1, int p2)
{
switch (p2)
case 8:
{
register b = *(long long *) p1, c asm ("r2");
asm ("%0": "=r" (a), "=r" (c):"r" (b), "r" (0));
*(long long *) p1 = c;
}
}
fn2 ()
{
int k;
k = f;
while (1)
{
fn1 (&i, sizeof i);
e = d + k;
switch (d)
case 0:
(
{
register l asm ("r4");
register m asm ("r0");
asm (" .err .endif\n\t": "=r" (h), "=r" (j):"r" (m),
"r"
(l));;
});
}
}
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