Mercurial > hg > CbC > CbC_gcc
diff gcc/tree-ssanames.c @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children | 04ced10e8804 |
line wrap: on
line diff
--- a/gcc/tree-ssanames.c Tue May 25 18:58:51 2010 +0900 +++ b/gcc/tree-ssanames.c Tue Mar 22 17:18:12 2011 +0900 @@ -1,5 +1,5 @@ /* Generic routines for manipulating SSA_NAME expressions - Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009 + Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -240,21 +240,30 @@ } } -/* Creates a duplicate of a ssa name NAME defined in statement STMT. */ -tree -duplicate_ssa_name (tree name, gimple stmt) +/* Return the alias information associated with pointer T. It creates a + new instance if none existed. */ + +struct ptr_info_def * +get_ptr_info (tree t) { - tree new_name = make_ssa_name (SSA_NAME_VAR (name), stmt); - struct ptr_info_def *old_ptr_info = SSA_NAME_PTR_INFO (name); + struct ptr_info_def *pi; + + gcc_assert (POINTER_TYPE_P (TREE_TYPE (t))); - if (old_ptr_info) - duplicate_ssa_name_ptr_info (new_name, old_ptr_info); + pi = SSA_NAME_PTR_INFO (t); + if (pi == NULL) + { + pi = ggc_alloc_cleared_ptr_info_def (); + pt_solution_reset (&pi->pt); + pi->align = 1; + pi->misalign = 0; + SSA_NAME_PTR_INFO (t) = pi; + } - return new_name; + return pi; } - /* Creates a duplicate of the ptr_info_def at PTR_INFO for use by the SSA name NAME. */ @@ -269,13 +278,28 @@ if (!ptr_info) return; - new_ptr_info = GGC_NEW (struct ptr_info_def); + new_ptr_info = ggc_alloc_ptr_info_def (); *new_ptr_info = *ptr_info; SSA_NAME_PTR_INFO (name) = new_ptr_info; } +/* Creates a duplicate of a ssa name NAME tobe defined by statement STMT. */ + +tree +duplicate_ssa_name (tree name, gimple stmt) +{ + tree new_name = make_ssa_name (SSA_NAME_VAR (name), stmt); + struct ptr_info_def *old_ptr_info = SSA_NAME_PTR_INFO (name); + + if (old_ptr_info) + duplicate_ssa_name_ptr_info (new_name, old_ptr_info); + + return new_name; +} + + /* Release all the SSA_NAMEs created by STMT. */ void @@ -314,9 +338,9 @@ int n = 0; referenced_var_iterator rvi; - /* Current defs point to various dead SSA names that in turn points to dead - statements so bunch of dead memory is held from releasing. */ - FOR_EACH_REFERENCED_VAR (t, rvi) + /* Current defs point to various dead SSA names that in turn point to + eventually dead variables so a bunch of memory is held live. */ + FOR_EACH_REFERENCED_VAR (cfun, t, rvi) set_current_def (t, NULL); /* Now release the freelist. */ for (t = FREE_SSANAMES (cfun); t; t = next) @@ -332,12 +356,10 @@ } FREE_SSANAMES (cfun) = NULL; - /* Cgraph edges has been invalidated and point to dead statement. We need to - remove them now and will rebuild it before next IPA pass. */ - cgraph_node_remove_callees (cgraph_node (current_function_decl)); - + statistics_counter_event (cfun, "SSA names released", n); if (dump_file) - fprintf (dump_file, "Released %i names, %.2f%%\n", n, n * 100.0 / num_ssa_names); + fprintf (dump_file, "Released %i names, %.2f%%\n", + n, n * 100.0 / num_ssa_names); return 0; } @@ -351,7 +373,7 @@ NULL, /* sub */ NULL, /* next */ 0, /* static_pass_number */ - TV_NONE, /* tv_id */ + TV_TREE_SSA_OTHER, /* tv_id */ PROP_ssa, /* properties_required */ 0, /* properties_provided */ 0, /* properties_destroyed */