aboutsummaryrefslogtreecommitdiff
path: root/gcc/df-problems.c
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2009-10-28 12:37:30 +0000
committerPaolo Bonzini <bonzini@gcc.gnu.org>2009-10-28 12:37:30 +0000
commite5bb5009e45d12c013d6080fa76f9e09647de117 (patch)
tree2d474fa2ac6022314b94c2109f3b9f7bfedd29e8 /gcc/df-problems.c
parent5d49d0ea6c8f48d3bf36fc3d4e7c3984a7bf8157 (diff)
downloadgcc-e5bb5009e45d12c013d6080fa76f9e09647de117.zip
gcc-e5bb5009e45d12c013d6080fa76f9e09647de117.tar.gz
gcc-e5bb5009e45d12c013d6080fa76f9e09647de117.tar.bz2
re PR rtl-optimization/41812 (test 20071030-1.c fails execution on powerpc64)
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. From-SVN: r153652
Diffstat (limited to 'gcc/df-problems.c')
-rw-r--r--gcc/df-problems.c23
1 files changed, 2 insertions, 21 deletions
diff --git a/gcc/df-problems.c b/gcc/df-problems.c
index cdbc8a1..e9896e3 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;