re PR target/57091 (ICE: in assign_by_spills, at lra-assigns.c:1268 with -mcmodel=large and indirect call)
2013-05-01 Vladimir Makarov <vmakarov@redhat.com> PR target/57091 * lra-constraints.c (best_small_class_operands_num): Remove. (process_alt_operands): Remove small_class_operands_num. Take small classes operands into losers and only if the operand is not matched. Modify debugging output. (curr_insn_transform): Remove best_small_class_operands_num. Print insn name. 2013-05-01 Vladimir Makarov <vmakarov@redhat.com> PR target/57091 * gcc.target/i386/pr57091.c: New test. From-SVN: r198503
This commit is contained in:
parent
36054fabf5
commit
36ff9dfbbe
4 changed files with 40 additions and 26 deletions
|
@ -1,3 +1,13 @@
|
|||
2013-05-01 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/57091
|
||||
* lra-constraints.c (best_small_class_operands_num): Remove.
|
||||
(process_alt_operands): Remove small_class_operands_num. Take
|
||||
small classes operands into losers and only if the operand is not
|
||||
matched. Modify debugging output.
|
||||
(curr_insn_transform): Remove best_small_class_operands_num.
|
||||
Print insn name.
|
||||
|
||||
2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
|
||||
|
||||
* config/aarch64/aarch64-builtins.c
|
||||
|
|
|
@ -1048,9 +1048,6 @@ static int goal_alt_number;
|
|||
/* Number of necessary reloads and overall cost reflecting the
|
||||
previous value and other unpleasantness of the best alternative. */
|
||||
static int best_losers, best_overall;
|
||||
/* Number of small register classes used for operands of the best
|
||||
alternative. */
|
||||
static int best_small_class_operands_num;
|
||||
/* Overall number hard registers used for reloads. For example, on
|
||||
some targets we need 2 general registers to reload DFmode and only
|
||||
one floating point register. */
|
||||
|
@ -1326,7 +1323,7 @@ static bool
|
|||
process_alt_operands (int only_alternative)
|
||||
{
|
||||
bool ok_p = false;
|
||||
int nop, small_class_operands_num, overall, nalt;
|
||||
int nop, overall, nalt;
|
||||
int n_alternatives = curr_static_id->n_alternatives;
|
||||
int n_operands = curr_static_id->n_operands;
|
||||
/* LOSERS counts the operands that don't fit this alternative and
|
||||
|
@ -1405,6 +1402,7 @@ process_alt_operands (int only_alternative)
|
|||
if (only_alternative >= 0 && nalt != only_alternative)
|
||||
continue;
|
||||
|
||||
|
||||
overall = losers = reject = reload_nregs = reload_sum = 0;
|
||||
for (nop = 0; nop < n_operands; nop++)
|
||||
reject += (curr_static_id
|
||||
|
@ -2006,6 +2004,9 @@ process_alt_operands (int only_alternative)
|
|||
if (! no_regs_p)
|
||||
reload_nregs
|
||||
+= ira_reg_class_max_nregs[this_alternative][mode];
|
||||
|
||||
if (SMALL_REGISTER_CLASS_P (this_alternative))
|
||||
reject += LRA_LOSER_COST_FACTOR / 2;
|
||||
}
|
||||
|
||||
/* We are trying to spill pseudo into memory. It is
|
||||
|
@ -2033,6 +2034,7 @@ process_alt_operands (int only_alternative)
|
|||
reloads. */
|
||||
if (!REG_P (op) || curr_static_id->operand[nop].type != OP_IN)
|
||||
reject++;
|
||||
|
||||
}
|
||||
|
||||
if (early_clobber_p)
|
||||
|
@ -2178,15 +2180,9 @@ process_alt_operands (int only_alternative)
|
|||
overall += LRA_LOSER_COST_FACTOR - 1;
|
||||
}
|
||||
}
|
||||
small_class_operands_num = 0;
|
||||
for (nop = 0; nop < n_operands; nop++)
|
||||
small_class_operands_num
|
||||
+= SMALL_REGISTER_CLASS_P (curr_alt[nop]) ? 1 : 0;
|
||||
|
||||
if (lra_dump_file != NULL)
|
||||
fprintf (lra_dump_file, " alt=%d,overall=%d,losers=%d,"
|
||||
"small_class_ops=%d,rld_nregs=%d\n",
|
||||
nalt, overall, losers, small_class_operands_num, reload_nregs);
|
||||
fprintf (lra_dump_file, " alt=%d,overall=%d,losers=%d,rld_nregs=%d\n",
|
||||
nalt, overall, losers, reload_nregs);
|
||||
|
||||
/* If this alternative can be made to work by reloading, and it
|
||||
needs less reloading than the others checked so far, record
|
||||
|
@ -2198,17 +2194,10 @@ process_alt_operands (int only_alternative)
|
|||
|| (best_overall == overall
|
||||
/* If the cost of the reloads is the same,
|
||||
prefer alternative which requires minimal
|
||||
number of small register classes for the
|
||||
operands. This improves chances of reloads
|
||||
for insn requiring small register
|
||||
classes. */
|
||||
&& (small_class_operands_num
|
||||
< best_small_class_operands_num
|
||||
|| (small_class_operands_num
|
||||
== best_small_class_operands_num
|
||||
&& (reload_nregs < best_reload_nregs
|
||||
|| (reload_nregs == best_reload_nregs
|
||||
&& best_reload_sum < reload_sum))))))))
|
||||
number of reload regs. */
|
||||
&& (reload_nregs < best_reload_nregs
|
||||
|| (reload_nregs == best_reload_nregs
|
||||
&& best_reload_sum < reload_sum))))))
|
||||
{
|
||||
for (nop = 0; nop < n_operands; nop++)
|
||||
{
|
||||
|
@ -2224,7 +2213,6 @@ process_alt_operands (int only_alternative)
|
|||
goal_alt_swapped = curr_swapped;
|
||||
best_overall = overall;
|
||||
best_losers = losers;
|
||||
best_small_class_operands_num = small_class_operands_num;
|
||||
best_reload_nregs = reload_nregs;
|
||||
best_reload_sum = reload_sum;
|
||||
goal_alt_number = nalt;
|
||||
|
@ -2826,7 +2814,7 @@ curr_insn_transform (void)
|
|||
operands together against the register constraints. */
|
||||
|
||||
best_losers = best_overall = INT_MAX;
|
||||
best_small_class_operands_num = best_reload_sum = 0;
|
||||
best_reload_sum = 0;
|
||||
|
||||
curr_swapped = false;
|
||||
goal_alt_swapped = false;
|
||||
|
@ -3033,7 +3021,10 @@ curr_insn_transform (void)
|
|||
for (; *p != '\0' && *p != ',' && *p != '#'; p++)
|
||||
fputc (*p, lra_dump_file);
|
||||
}
|
||||
fprintf (lra_dump_file, "\n");
|
||||
if (INSN_CODE (curr_insn) >= 0
|
||||
&& (p = get_insn_name (INSN_CODE (curr_insn))) != NULL)
|
||||
fprintf (lra_dump_file, " {%s}", p);
|
||||
fprintf (lra_dump_file, "\n");
|
||||
}
|
||||
|
||||
/* Right now, for any pair of operands I and J that are required to
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2013-05-01 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/57091
|
||||
* gcc.target/i386/pr57091.c: New test.
|
||||
|
||||
2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
|
||||
|
||||
* gcc.target/aarch64/vect-vaddv.c: New.
|
||||
|
|
8
gcc/testsuite/gcc.target/i386/pr57091.c
Normal file
8
gcc/testsuite/gcc.target/i386/pr57091.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -mcmodel=large" { target lp64 } } */
|
||||
void (*bar)();
|
||||
|
||||
void foo (void)
|
||||
{
|
||||
bar ();
|
||||
}
|
Loading…
Add table
Reference in a new issue