]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR middle-end/54146
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Aug 2012 17:39:46 +0000 (17:39 +0000)
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Aug 2012 17:39:46 +0000 (17:39 +0000)
* gimpify.c (gimplify_body): Only verify_gimple_in_seq with
checking enabled.
* tree-ssa-loop-manip.c (add_exit_phis_var): Assert that var is
a gimple_reg if checking is enabled.
(find_uses_to_rename_stmt): Only look at non-virtual USE operands.
* tree-into-ssa (compute_global_livein): Change the worklist
type from an array to a VEC.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190235 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/gimplify.c
gcc/tree-into-ssa.c
gcc/tree-ssa-loop-manip.c

index 60f75a3d8443443020e436857eb1f93300561ee6..4bd66d6d0bfe11c2d7270f988d3e04bda38af37b 100644 (file)
@@ -1,3 +1,14 @@
+2012-08-08  Steven Bosscher  <steven@gcc.gnu.org>
+
+       PR middle-end/54146
+       * gimpify.c (gimplify_body): Only verify_gimple_in_seq with
+       checking enabled.
+       * tree-ssa-loop-manip.c (add_exit_phis_var): Assert that var is
+       a gimple_reg if checking is enabled.
+       (find_uses_to_rename_stmt): Only look at non-virtual USE operands.
+       * tree-into-ssa (compute_global_livein): Change the worklist
+       type from an array to a VEC.
+
 2012-08-08  Richard Guenther  <rguenther@suse.de>
 
        * tree-ssa-operands.h (virtual_operand_p): Declare.
@@ -36,7 +47,7 @@
        * combine.c (gen_lowpart_for_combine): Don't return identity
        for CONST or symbolic reference.
 
-2012-08-08 Michael Zolotukhin <michael.v.zolotukhin@intel.com>
+2012-08-08  Michael Zolotukhin  <michael.v.zolotukhin@intel.com>
 
        * common/config/i386/i386-common.c (OPTION_MASK_ISA_ADX_SET): New.
        (OPTION_MASK_ISA_ADX_UNSET): Likewise.
index c704010436b4329a5e299810a019532e1a66cd0d..03f7c9ece8218fdbe6bf19fd827a18ce7bf6a34f 100644 (file)
@@ -8200,8 +8200,10 @@ gimplify_body (tree fndecl, bool do_parms)
   pop_gimplify_context (outer_bind);
   gcc_assert (gimplify_ctxp == NULL);
 
+#ifdef ENABLE_CHECKING
   if (!seen_error ())
     verify_gimple_in_seq (gimple_bind_body (outer_bind));
+#endif
 
   timevar_pop (TV_TREE_GIMPLIFY);
   input_location = saved_location;
index eb1ef6c1c9a76cab11c4c0dbca6d5e5bd49fc4c0..52f0bdc71a918df5f4e7b6274e6def4972147d88 100644 (file)
@@ -408,26 +408,28 @@ set_current_def (tree var, tree def)
    for LIVEIN).  */
 
 void
-compute_global_livein (bitmap livein ATTRIBUTE_UNUSED, bitmap def_blocks ATTRIBUTE_UNUSED)
+compute_global_livein (bitmap livein, bitmap def_blocks)
 {
-  basic_block bb, *worklist, *tos;
   unsigned i;
   bitmap_iterator bi;
+  VEC (basic_block, heap) *worklist;
 
-  tos = worklist
-    = (basic_block *) xmalloc (sizeof (basic_block) * (last_basic_block + 1));
+  /* Normally the work list size is bounded by the number of basic
+     blocks in the largest loop.  We don't know this number, but we
+     can be fairly sure that it will be relatively small.  */
+  worklist = VEC_alloc (basic_block, heap, MAX (8, n_basic_blocks / 128));
 
   EXECUTE_IF_SET_IN_BITMAP (livein, 0, i, bi)
-    *tos++ = BASIC_BLOCK (i);
+    VEC_safe_push (basic_block, heap, worklist, BASIC_BLOCK (i));
 
   /* Iterate until the worklist is empty.  */
-  while (tos != worklist)
+  while (! VEC_empty (basic_block, worklist))
     {
       edge e;
       edge_iterator ei;
 
       /* Pull a block off the worklist.  */
-      bb = *--tos;
+      basic_block bb = VEC_pop (basic_block, worklist);
 
       /* For each predecessor block.  */
       FOR_EACH_EDGE (e, ei, bb->preds)
@@ -437,16 +439,15 @@ compute_global_livein (bitmap livein ATTRIBUTE_UNUSED, bitmap def_blocks ATTRIBU
 
          /* None of this is necessary for the entry block.  */
          if (pred != ENTRY_BLOCK_PTR
-             && ! bitmap_bit_p (livein, pred_index)
-             && ! bitmap_bit_p (def_blocks, pred_index))
+             && ! bitmap_bit_p (def_blocks, pred_index)
+             && bitmap_set_bit (livein, pred_index))
            {
-             *tos++ = pred;
-             bitmap_set_bit (livein, pred_index);
+             VEC_safe_push (basic_block, heap, worklist, pred);
            }
        }
     }
 
-  free (worklist);
+  VEC_free (basic_block, heap, worklist);
 }
 
 
index 0ddc56f832a467495daf9868cbdbd57368405f5c..19a8eca268e65191a3fd513191f013a883a137be 100644 (file)
@@ -160,10 +160,8 @@ add_exit_phis_var (tree var, bitmap livein, bitmap exits)
   basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (var));
   bitmap_iterator bi;
 
-  if (is_gimple_reg (var))
-    bitmap_clear_bit (livein, def_bb->index);
-  else
-    bitmap_set_bit (livein, def_bb->index);
+  gcc_checking_assert (is_gimple_reg (var));
+  bitmap_clear_bit (livein, def_bb->index);
 
   def = BITMAP_ALLOC (NULL);
   bitmap_set_bit (def, def_bb->index);
@@ -272,7 +270,7 @@ find_uses_to_rename_stmt (gimple stmt, bitmap *use_blocks, bitmap need_phis)
   if (is_gimple_debug (stmt))
     return;
 
-  FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_USES)
+  FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_USE)
     find_uses_to_rename_use (bb, var, use_blocks, need_phis);
 }