diff options
author | bonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-10-28 12:37:30 +0000 |
---|---|---|
committer | bonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-10-28 12:37:30 +0000 |
commit | fb38e0129d2a65c55f38ace3204defa0ae0a59ff (patch) | |
tree | 2d474fa2ac6022314b94c2109f3b9f7bfedd29e8 /gcc/df-problems.c | |
parent | 538fa3ee20fea8d19b6ea2f7927c6cea844bb61b (diff) | |
download | gcc-fb38e0129d2a65c55f38ace3204defa0ae0a59ff.tar.gz |
2009-10-28 Paolo Bonzini <bonzini@gnu.org>
PR rtl-optimization/41812
Revert:
2009-06-27 Paolo Bonzini <bonzini@gnu.org>
* df-problems.c (df_md_scratch): New.
(df_md_alloc, df_md_free): Allocate/free it.
(df_md_local_compute): Only include live registers in init.
(df_md_transfer_function): Prune the in-set computed by
the confluence function, and the gen-set too.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153652 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/df-problems.c')
-rw-r--r-- | gcc/df-problems.c | 23 |
1 files changed, 2 insertions, 21 deletions
diff --git a/gcc/df-problems.c b/gcc/df-problems.c index cdbc8a19d9d..e9896e311d1 100644 --- a/gcc/df-problems.c +++ b/gcc/df-problems.c @@ -4026,10 +4026,6 @@ df_simulate_finalize_forwards (basic_block bb, bitmap live) propagating the information to BB3's successors. ---------------------------------------------------------------------------*/ -/* Scratch var used by transfer functions. This is used to do md analysis - only for live registers. */ -static bitmap df_md_scratch; - /* Set basic block info. */ static void @@ -4073,7 +4069,6 @@ df_md_alloc (bitmap all_blocks) sizeof (struct df_md_bb_info), 50); df_grow_bb_info (df_md); - df_md_scratch = BITMAP_ALLOC (NULL); EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi) { @@ -4249,10 +4244,8 @@ df_md_local_compute (bitmap all_blocks) bitmap kill = df_md_get_bb_info (bb_index)->kill; EXECUTE_IF_SET_IN_BITMAP (frontiers[bb_index], 0, df_bb_index, bi2) { - basic_block bb = BASIC_BLOCK (df_bb_index); if (bitmap_bit_p (all_blocks, df_bb_index)) - bitmap_ior_and_into (df_md_get_bb_info (df_bb_index)->init, kill, - df_get_live_in (bb)); + bitmap_ior_into (df_md_get_bb_info (df_bb_index)->init, kill); } } @@ -4282,24 +4275,13 @@ df_md_reset (bitmap all_blocks) static bool df_md_transfer_function (int bb_index) { - basic_block bb = BASIC_BLOCK (bb_index); struct df_md_bb_info *bb_info = df_md_get_bb_info (bb_index); bitmap in = bb_info->in; bitmap out = bb_info->out; bitmap gen = bb_info->gen; bitmap kill = bb_info->kill; - /* We need to use a scratch set here so that the value returned from - this function invocation properly reflects if the sets changed in - a significant way; i.e. not just because the live set was anded - in. */ - bitmap_and (df_md_scratch, gen, df_get_live_out (bb)); - - /* Multiple definitions of a register are not relevant if it is not - used. Thus we trim the result to the places where it is live. */ - bitmap_and_into (in, df_get_live_in (bb)); - - return bitmap_ior_and_compl (out, df_md_scratch, in, kill); + return bitmap_ior_and_compl (out, gen, in, kill); } /* Initialize the solution bit vectors for problem. */ @@ -4362,7 +4344,6 @@ df_md_free (void) } } - BITMAP_FREE (df_md_scratch); free_alloc_pool (df_md->block_pool); df_md->block_info_size = 0; |