re PR middle-end/38981 (internal compiler error)

PR middle-end/38981
	* tree-ssa-coalesce.c (add_coalesce): Cap the costs of coalesce pairs
	at MUST_COALESCE_COST-1 instead of MUST_COALESCE_COST.

From-SVN: r144032
This commit is contained in:
Eric Botcazou 2009-02-09 11:09:25 +00:00 committed by Eric Botcazou
parent f060a26123
commit 4bb07c5d37
4 changed files with 77 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2009-02-09 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/38981
* tree-ssa-coalesce.c (add_coalesce): Cap the costs of coalesce pairs
at MUST_COALESCE_COST-1 instead of MUST_COALESCE_COST.
2009-02-09 Richard Guenther <rguenther@suse.de>
PR middle-end/35202

View File

@ -1,3 +1,7 @@
2009-02-09 Eric Botcazou <ebotcazou@adacore.com>
* gcc.c-torture/compile/20090209-1.c: New test.
2009-02-06 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/35147

View File

@ -0,0 +1,61 @@
/* PR middle-end/38981 */
/* Reporter: Kamaraju Kusumanchi <kamaraju@gmail.com> */
struct d_info
{
int **subs;
};
static int *
d_substitution (struct d_info *di, int prefix)
{
char c;
c='_';
if (c == '_')
{
unsigned int id;
if (c != '_')
{
do
{
unsigned int new_id;
if (new_id < id)
return 0;
id = new_id;
}
while (c != '_');
}
return di->subs[id];
}
else
{
int verbose;
int code;
int simple_len;
code=0;
simple_len=0;
verbose=0;
if (! code && prefix)
{
char peek;
peek='A';
if (peek == 'C' || peek == 'D')
verbose = 1;
}
if (verbose)
{
code = simple_len;
}
}
}

View File

@ -284,8 +284,7 @@ add_cost_one_coalesce (coalesce_list_p cl, int p1, int p2)
/* Add a coalesce between P1 and P2 in list CL with a cost of VALUE. */
static inline void
add_coalesce (coalesce_list_p cl, int p1, int p2,
int value)
add_coalesce (coalesce_list_p cl, int p1, int p2, int value)
{
coalesce_pair_p node;
@ -295,13 +294,13 @@ add_coalesce (coalesce_list_p cl, int p1, int p2,
node = find_coalesce_pair (cl, p1, p2, true);
/* Once the value is MUST_COALESCE_COST, leave it that way. */
if (node->cost != MUST_COALESCE_COST)
/* Once the value is at least MUST_COALESCE_COST - 1, leave it that way. */
if (node->cost < MUST_COALESCE_COST - 1)
{
if (value == MUST_COALESCE_COST)
node->cost = value;
else
if (value < MUST_COALESCE_COST - 1)
node->cost += value;
else
node->cost = value;
}
}