df-problems.c (df_live_scratch): Convert to bitmap_head.

* df-problems.c (df_live_scratch): Convert to bitmap_head.
	(df_live_alloc): Initialize df_live_scratch when initializing
	problem_data.
	(df_live_transfer_function): Update uses of df_live_scratch.
	(df_live_free): Free problem_data; clear df_live_scratch before
	releasing the obstack.
	(df_md_free): Free problem data.

From-SVN: r160612
This commit is contained in:
Jan Hubicka 2010-06-11 16:33:28 +02:00 committed by Jan Hubicka
parent 7ea6b6cf97
commit d725a1a5c0
2 changed files with 19 additions and 8 deletions

View File

@ -1,3 +1,13 @@
2010-06-11 Jan Hubicka <jh@suse.cz>
* df-problems.c (df_live_scratch): Convert to bitmap_head.
(df_live_alloc): Initialize df_live_scratch when initializing
problem_data.
(df_live_transfer_function): Update uses of df_live_scratch.
(df_live_free): Free problem_data; clear df_live_scratch before
releasing the obstack.
(df_md_free): Free problem data.
2010-06-11 Jan Hubicka <jh@suse.cz> 2010-06-11 Jan Hubicka <jh@suse.cz>
* doc/invoke.texi (Wsuggest-attribute): Document. * doc/invoke.texi (Wsuggest-attribute): Document.

View File

@ -1368,7 +1368,7 @@ struct df_live_problem_data
/* Scratch var used by transfer functions. This is used to implement /* Scratch var used by transfer functions. This is used to implement
an optimization to reduce the amount of space used to compute the an optimization to reduce the amount of space used to compute the
combined lr and live analysis. */ combined lr and live analysis. */
static bitmap df_live_scratch; static bitmap_head df_live_scratch;
/* Set basic block info. */ /* Set basic block info. */
@ -1423,9 +1423,8 @@ df_live_alloc (bitmap all_blocks ATTRIBUTE_UNUSED)
problem_data->out = NULL; problem_data->out = NULL;
problem_data->in = NULL; problem_data->in = NULL;
bitmap_obstack_initialize (&problem_data->live_bitmaps); bitmap_obstack_initialize (&problem_data->live_bitmaps);
bitmap_initialize (&df_live_scratch, &problem_data->live_bitmaps);
} }
if (!df_live_scratch)
df_live_scratch = BITMAP_ALLOC (&problem_data->live_bitmaps);
df_grow_bb_info (df_live); df_grow_bb_info (df_live);
@ -1595,12 +1594,12 @@ df_live_transfer_function (int bb_index)
/* We need to use a scratch set here so that the value returned from this /* We need to use a scratch set here so that the value returned from this
function invocation properly reflects whether the sets changed in a function invocation properly reflects whether the sets changed in a
significant way; i.e. not just because the lr set was anded in. */ significant way; i.e. not just because the lr set was anded in. */
bitmap_and (df_live_scratch, gen, &bb_lr_info->out); bitmap_and (&df_live_scratch, gen, &bb_lr_info->out);
/* No register may reach a location where it is not used. Thus /* No register may reach a location where it is not used. Thus
we trim the rr result to the places where it is used. */ we trim the rr result to the places where it is used. */
bitmap_and_into (in, &bb_lr_info->in); bitmap_and_into (in, &bb_lr_info->in);
return bitmap_ior_and_compl (out, df_live_scratch, in, kill); return bitmap_ior_and_compl (out, &df_live_scratch, in, kill);
} }
@ -1643,10 +1642,10 @@ df_live_free (void)
free_alloc_pool (df_live->block_pool); free_alloc_pool (df_live->block_pool);
df_live->block_info_size = 0; df_live->block_info_size = 0;
free (df_live->block_info); free (df_live->block_info);
bitmap_clear (&df_live_scratch);
bitmap_obstack_release (&problem_data->live_bitmaps); bitmap_obstack_release (&problem_data->live_bitmaps);
free (problem_data);
if (df_live_scratch) df_live->problem_data = NULL;
BITMAP_FREE (df_live_scratch);
} }
BITMAP_FREE (df_live->out_of_date_transfer_functions); BITMAP_FREE (df_live->out_of_date_transfer_functions);
free (df_live); free (df_live);
@ -4545,6 +4544,8 @@ df_md_free (void)
bitmap_obstack_release (&problem_data->md_bitmaps); bitmap_obstack_release (&problem_data->md_bitmaps);
free_alloc_pool (df_md->block_pool); free_alloc_pool (df_md->block_pool);
free (problem_data);
df_md->problem_data = NULL;
df_md->block_info_size = 0; df_md->block_info_size = 0;
free (df_md->block_info); free (df_md->block_info);