mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			re PR middle-end/54146 (Very slow compile with attribute((flatten)))
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. From-SVN: r190235
This commit is contained in:
		
							parent
							
								
									a471762f68
								
							
						
					
					
						commit
						07c5a154bb
					
				|  | @ -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. | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Steven Bosscher
						Steven Bosscher