OSDN Git Service

2009-10-28 Paolo Bonzini <bonzini@gnu.org>
authorbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Oct 2009 12:37:30 +0000 (12:37 +0000)
committerbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Oct 2009 12:37:30 +0000 (12:37 +0000)
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

gcc/ChangeLog
gcc/df-problems.c

index db1d1c8..57a0bd7 100644 (file)
@@ -1,5 +1,18 @@
 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
        * combine.c (simplify_comparison): Use extensions to
        widen comparisons.  Try an ANDing first.
index cdbc8a1..e9896e3 100644 (file)
@@ -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;