diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 60f75a3d8443443020e436857eb1f93300561ee6..4bd66d6d0bfe11c2d7270f988d3e04bda38af37b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/gimplify.c b/gcc/gimplify.c index c704010436b4329a5e299810a019532e1a66cd0d..03f7c9ece8218fdbe6bf19fd827a18ce7bf6a34f 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -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; diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index eb1ef6c1c9a76cab11c4c0dbca6d5e5bd49fc4c0..52f0bdc71a918df5f4e7b6274e6def4972147d88 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -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); } diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index 0ddc56f832a467495daf9868cbdbd57368405f5c..19a8eca268e65191a3fd513191f013a883a137be 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -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); }