This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Take 2: Avoid dumping unused variables.


I found some more errors in the patch after using it for a few days.
Still it reduces dump file size dramatically for me.

Re-bootstrapped on i686-pc-linux-gnu.

Ok for mainline?

Thanks,
Richard.

:ADDPATCH:

2005-08-05  Richard Guenther  <rguenther@suse.de>

	* tree-cfg.c (mark_used_vars): New function.
	(dump_function_to_file): Dump only used VAR_DECLs.

Index: tree-cfg.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-cfg.c,v
retrieving revision 2.214
diff -c -3 -p -r2.214 tree-cfg.c
*** tree-cfg.c	4 Aug 2005 18:16:27 -0000	2.214
--- tree-cfg.c	5 Aug 2005 10:12:59 -0000
*************** tree_duplicate_sese_region (edge entry, 
*** 4384,4389 ****
--- 4384,4409 ----
  }
  
  
+ static tree
+ mark_used_vars (tree *tp, int *walk_subtrees, void *used_vars_)
+ {
+   bitmap *used_vars = (bitmap *)used_vars_;
+ 
+   if (walk_subtrees
+       && IS_TYPE_OR_DECL_P (*tp))
+     *walk_subtrees = 0;
+ 
+   if (!SSA_VAR_P (*tp))
+     return NULL_TREE;
+ 
+   if (TREE_CODE (*tp) == SSA_NAME)
+     bitmap_set_bit (*used_vars, DECL_UID (SSA_NAME_VAR (*tp)));
+   else
+     bitmap_set_bit (*used_vars, DECL_UID (*tp));
+ 
+   return NULL_TREE;
+ }
+ 
  /* Dump FUNCTION_DECL FN to file FILE using FLAGS (see TDF_* in tree.h)  */
  
  void
*************** dump_function_to_file (tree fn, FILE *fi
*** 4418,4435 ****
--- 4438,4484 ----
       BIND_EXPRs, so display them separately.  */
    if (cfun && cfun->decl == fn && cfun->unexpanded_var_list)
      {
+       bitmap used_vars = BITMAP_ALLOC (NULL);
        ignore_topmost_bind = true;
  
+       /* Record vars we'll use dumping the functions tree.  */
+       if (cfun->cfg && basic_block_info)
+ 	{
+ 	  FOR_EACH_BB (bb)
+ 	    {
+ 	      block_stmt_iterator bsi;
+ 	      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
+ 	        walk_tree (bsi_stmt_ptr (bsi), mark_used_vars,
+ 			   &used_vars, NULL);
+ 	    }
+ 	  for (vars = cfun->unexpanded_var_list; vars;
+ 	       vars = TREE_CHAIN (vars))
+ 	    {
+ 	      var = TREE_VALUE (vars);
+ 	      if (TREE_CODE (var) == VAR_DECL
+ 		  && DECL_INITIAL (var)
+ 		  && bitmap_bit_p (used_vars, DECL_UID (var)))
+ 		walk_tree (&DECL_INITIAL (var), mark_used_vars,
+ 			   &used_vars, NULL);
+ 	    }
+ 	}
+ 
+       /* Dump used vars.  */
        fprintf (file, "{\n");
        for (vars = cfun->unexpanded_var_list; vars; vars = TREE_CHAIN (vars))
  	{
  	  var = TREE_VALUE (vars);
+ 	  if (cfun->cfg && basic_block_info
+ 	      && !bitmap_bit_p (used_vars, DECL_UID (var)))
+             continue;
  
  	  print_generic_decl (file, var, flags);
  	  fprintf (file, "\n");
  
  	  any_var = true;
  	}
+ 
+       BITMAP_FREE (used_vars);
      }
  
    if (cfun && cfun->decl == fn && cfun->cfg && basic_block_info)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]