Commit e5bb5009 by Paolo Bonzini Committed by Paolo Bonzini

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
parent 5d49d0ea
2009-10-28 Paolo Bonzini <bonzini@gnu.org> 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.
2009-10-28 Paolo Bonzini <bonzini@gnu.org>
PR rtl-optimization/39715 PR rtl-optimization/39715
* combine.c (simplify_comparison): Use extensions to * combine.c (simplify_comparison): Use extensions to
widen comparisons. Try an ANDing first. widen comparisons. Try an ANDing first.
...@@ -4026,10 +4026,6 @@ df_simulate_finalize_forwards (basic_block bb, bitmap live) ...@@ -4026,10 +4026,6 @@ df_simulate_finalize_forwards (basic_block bb, bitmap live)
propagating the information to BB3's successors. 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. */ /* Set basic block info. */
static void static void
...@@ -4073,7 +4069,6 @@ df_md_alloc (bitmap all_blocks) ...@@ -4073,7 +4069,6 @@ df_md_alloc (bitmap all_blocks)
sizeof (struct df_md_bb_info), 50); sizeof (struct df_md_bb_info), 50);
df_grow_bb_info (df_md); df_grow_bb_info (df_md);
df_md_scratch = BITMAP_ALLOC (NULL);
EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi) EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
{ {
...@@ -4249,10 +4244,8 @@ df_md_local_compute (bitmap all_blocks) ...@@ -4249,10 +4244,8 @@ df_md_local_compute (bitmap all_blocks)
bitmap kill = df_md_get_bb_info (bb_index)->kill; bitmap kill = df_md_get_bb_info (bb_index)->kill;
EXECUTE_IF_SET_IN_BITMAP (frontiers[bb_index], 0, df_bb_index, bi2) 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)) if (bitmap_bit_p (all_blocks, df_bb_index))
bitmap_ior_and_into (df_md_get_bb_info (df_bb_index)->init, kill, bitmap_ior_into (df_md_get_bb_info (df_bb_index)->init, kill);
df_get_live_in (bb));
} }
} }
...@@ -4282,24 +4275,13 @@ df_md_reset (bitmap all_blocks) ...@@ -4282,24 +4275,13 @@ df_md_reset (bitmap all_blocks)
static bool static bool
df_md_transfer_function (int bb_index) 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); struct df_md_bb_info *bb_info = df_md_get_bb_info (bb_index);
bitmap in = bb_info->in; bitmap in = bb_info->in;
bitmap out = bb_info->out; bitmap out = bb_info->out;
bitmap gen = bb_info->gen; bitmap gen = bb_info->gen;
bitmap kill = bb_info->kill; bitmap kill = bb_info->kill;
/* We need to use a scratch set here so that the value returned from return bitmap_ior_and_compl (out, gen, in, kill);
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);
} }
/* Initialize the solution bit vectors for problem. */ /* Initialize the solution bit vectors for problem. */
...@@ -4362,7 +4344,6 @@ df_md_free (void) ...@@ -4362,7 +4344,6 @@ df_md_free (void)
} }
} }
BITMAP_FREE (df_md_scratch);
free_alloc_pool (df_md->block_pool); free_alloc_pool (df_md->block_pool);
df_md->block_info_size = 0; df_md->block_info_size = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment