aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c2
-rw-r--r--gcc/tree-cfg.c49
4 files changed, 59 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b583ee5..c949c5f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2005-12-02 Richard Guenther <rguenther@suse.de>
+ * tree-cfg.c (mark_used_vars): New function.
+ (dump_function_to_file): Dump only used VAR_DECLs.
+
+2005-12-02 Richard Guenther <rguenther@suse.de>
+
* convert.c (convert_to_integer): Fix compare for nonpositive
constant to use tree_int_cst_sgn <= 0.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b5d0daa..27a310f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2005-12-02 Richard Guenther <rguenther@suse.de>
+
+ * gcc.dg/tree-ssa/20031106-6.c: Remove XFAIL.
+
2005-12-02 Gabriel Dos Reis <gdr@integrable-solutions.net>
* gcc.dg/lvalue-2.c (f0): Put "error: " marker back.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c b/gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c
index 6d15c7b..8708fe1 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c
@@ -25,5 +25,5 @@ struct s foo (struct s r)
/* There should be no references to any of "temp_struct*"
temporaries. */
-/* { dg-final { scan-tree-dump-times "temp_struct" 0 "optimized" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "temp_struct" 0 "optimized" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 13868e9..497715a 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -4425,6 +4425,26 @@ tree_duplicate_sese_region (edge entry, edge exit,
}
+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
@@ -4459,18 +4479,47 @@ dump_function_to_file (tree fn, FILE *file, int flags)
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)