re PR rtl-optimization/25799 (cc1 stalled with -O1 -fmodulo-sched)

2005-01-19  Kenneth Zadeck <zadeck@naturalbridge.com>

	PR rtl-optimization/25799 
	* df-problems.c (df_ru_confluence_n, df_rd_confluence_n):
	Corrected confluence operator to remove bits from op2 before oring
	with op1 rather than removing bits from op1.
        * (df_ru_transfer_function): Corrected test on wrong bitmap which
	caused infinite loop.  Both of these problems were introduced in
	the dataflow rewrite.

From-SVN: r110007
This commit is contained in:
Kenneth Zadeck 2006-01-20 01:24:00 +00:00 committed by Kenneth Zadeck
parent ff182b5cf7
commit 59c52af442
2 changed files with 27 additions and 5 deletions

View File

@ -1,3 +1,13 @@
2005-01-19 Kenneth Zadeck <zadeck@naturalbridge.com>
PR rtl-optimization/25799
* df-problems.c (df_ru_confluence_n, df_rd_confluence_n):
Corrected confluence operator to remove bits from op2 before oring
with op1 rather than removing bits from op1.
* (df_ru_transfer_function): Corrected test on wrong bitmap which
caused infinite loop. Both of these problems were introduced in
the dataflow rewrite.
2006-01-19 DJ Delorie <dj@redhat.com>
* reload1.c (find_reload_regs): Note the details of reload

View File

@ -616,13 +616,19 @@ df_ru_confluence_n (struct dataflow *dflow, edge e)
struct df *df = dflow->df;
bitmap_iterator bi;
unsigned int regno;
bitmap_ior_and_compl_into (op1, op2, dense_invalidated);
bitmap tmp = BITMAP_ALLOC (NULL);
bitmap_copy (tmp, op2);
bitmap_and_compl_into (tmp, dense_invalidated);
EXECUTE_IF_SET_IN_BITMAP (sparse_invalidated, 0, regno, bi)
{
bitmap_clear_range (op1,
bitmap_clear_range (tmp,
DF_REG_USE_GET (df, regno)->begin,
DF_REG_USE_GET (df, regno)->n_refs);
}
bitmap_ior_into (op1, tmp);
BITMAP_FREE (tmp);
}
else
bitmap_ior_into (op1, op2);
@ -659,7 +665,7 @@ df_ru_transfer_function (struct dataflow *dflow, int bb_index)
}
bitmap_and_compl_into (tmp, kill);
bitmap_ior_into (tmp, gen);
changed = !bitmap_equal_p (tmp, out);
changed = !bitmap_equal_p (tmp, in);
if (changed)
{
BITMAP_FREE (out);
@ -1097,13 +1103,19 @@ df_rd_confluence_n (struct dataflow *dflow, edge e)
struct df *df = dflow->df;
bitmap_iterator bi;
unsigned int regno;
bitmap_ior_and_compl_into (op1, op2, dense_invalidated);
bitmap tmp = BITMAP_ALLOC (NULL);
bitmap_copy (tmp, op2);
bitmap_and_compl_into (tmp, dense_invalidated);
EXECUTE_IF_SET_IN_BITMAP (sparse_invalidated, 0, regno, bi)
{
bitmap_clear_range (op1,
bitmap_clear_range (tmp,
DF_REG_DEF_GET (df, regno)->begin,
DF_REG_DEF_GET (df, regno)->n_refs);
}
bitmap_ior_into (op1, tmp);
BITMAP_FREE (tmp);
}
else
bitmap_ior_into (op1, op2);