This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Some PTA cleanups
- From: Richard Guenther <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 23 Jun 2009 12:00:58 +0200 (CEST)
- Subject: [PATCH] Some PTA cleanups
This simplifies creation of new varinfos and removes the global
trees / varinfos for the artificial variables.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
Richard.
2009-06-23 Richard Guenther <rguenther@suse.de>
* tree-ssa-structalias.c (struct variable_info): Add is_global_var
member.
(var_anything, anything_tree, var_nothing, nothing_tree, var_readonly,
readonly_tree, var_escaped, escaped_tree, var_nonlocal, nonlocal_tree,
var_callused, callused_tree, var_storedanything, storedanything_tree,
var_integer, integer_tree): Remove global variables.
(new_var_info): Do not pass new id, append the new var to the
global variable vector.
(do_ds_constraint): Use is_global_var member of the variable-info.
(new_scalar_tmp_constraint_exp): Adjust.
(create_function_info_for): Likewise.
(create_variable_info_for): Likewise.
(find_what_var_points_to): Remove dead code.
(init_base_vars): Simplify.
(compute_points_to_sets): Adjust.
Index: gcc/tree-ssa-structalias.c
===================================================================
*** gcc/tree-ssa-structalias.c (revision 148785)
--- gcc/tree-ssa-structalias.c (working copy)
*************** struct variable_info
*** 229,234 ****
--- 229,237 ----
/* True if this field may contain pointers. */
unsigned int may_have_pointers : 1;
+ /* True if this represents a global variable. */
+ unsigned int is_global_var : 1;
+
/* A link to the variable for the next field in this structure. */
struct variable_info *next;
*************** enum { nothing_id = 0, anything_id = 1,
*** 284,322 ****
escaped_id = 3, nonlocal_id = 4, callused_id = 5,
storedanything_id = 6, integer_id = 7 };
- /* Variable that represents the unknown pointer. */
- static varinfo_t var_anything;
- static tree anything_tree;
-
- /* Variable that represents the NULL pointer. */
- static varinfo_t var_nothing;
- static tree nothing_tree;
-
- /* Variable that represents read only memory. */
- static varinfo_t var_readonly;
- static tree readonly_tree;
-
- /* Variable that represents escaped memory. */
- static varinfo_t var_escaped;
- static tree escaped_tree;
-
- /* Variable that represents nonlocal memory. */
- static varinfo_t var_nonlocal;
- static tree nonlocal_tree;
-
- /* Variable that represents call-used memory. */
- static varinfo_t var_callused;
- static tree callused_tree;
-
- /* Variable that represents variables that are stored to anything. */
- static varinfo_t var_storedanything;
- static tree storedanything_tree;
-
- /* Variable that represents integers. This is used for when people do things
- like &0->a.b. */
- static varinfo_t var_integer;
- static tree integer_tree;
-
/* Lookup a heap var for FROM, and return it if we find one. */
static tree
--- 287,292 ----
*************** heapvar_insert (tree from, tree to)
*** 350,374 ****
}
/* Return a new variable info structure consisting for a variable
! named NAME, and using constraint graph node NODE. */
static varinfo_t
! new_var_info (tree t, unsigned int id, const char *name)
{
varinfo_t ret = (varinfo_t) pool_alloc (variable_info_pool);
! ret->id = id;
ret->name = name;
ret->decl = t;
! ret->is_artificial_var = false;
ret->is_heap_var = false;
ret->is_special_var = false;
ret->is_unknown_size_var = false;
- ret->is_full_var = false;
ret->may_have_pointers = true;
ret->solution = BITMAP_ALLOC (&pta_obstack);
ret->oldsolution = BITMAP_ALLOC (&oldpta_obstack);
ret->next = NULL;
return ret;
}
--- 320,353 ----
}
/* Return a new variable info structure consisting for a variable
! named NAME, and using constraint graph node NODE. Append it
! to the vector of variable info structures. */
static varinfo_t
! new_var_info (tree t, const char *name)
{
+ unsigned index = VEC_length (varinfo_t, varmap);
varinfo_t ret = (varinfo_t) pool_alloc (variable_info_pool);
! ret->id = index;
ret->name = name;
ret->decl = t;
! /* Vars without decl are artificial and do not have sub-variables. */
! ret->is_artificial_var = (t == NULL_TREE);
! ret->is_full_var = (t == NULL_TREE);
ret->is_heap_var = false;
ret->is_special_var = false;
ret->is_unknown_size_var = false;
ret->may_have_pointers = true;
+ ret->is_global_var = true;
+ if (t && DECL_P (t))
+ ret->is_global_var = is_global_var (t);
ret->solution = BITMAP_ALLOC (&pta_obstack);
ret->oldsolution = BITMAP_ALLOC (&oldpta_obstack);
ret->next = NULL;
+
+ VEC_safe_push (varinfo_t, heap, varmap, ret);
+
return ret;
}
*************** do_ds_constraint (constraint_t c, bitmap
*** 1702,1708 ****
}
}
/* If v is a global variable then this is an escape point. */
! if (is_global_var (v->decl))
{
t = find (escaped_id);
if (add_graph_edge (graph, t, rhs)
--- 1681,1687 ----
}
}
/* If v is a global variable then this is an escape point. */
! if (v->is_global_var)
{
t = find (escaped_id);
if (add_graph_edge (graph, t, rhs)
*************** static struct constraint_expr
*** 2682,2696 ****
new_scalar_tmp_constraint_exp (const char *name)
{
struct constraint_expr tmp;
- unsigned index = VEC_length (varinfo_t, varmap);
varinfo_t vi;
! vi = new_var_info (NULL_TREE, index, name);
vi->offset = 0;
vi->size = -1;
vi->fullsize = -1;
vi->is_full_var = 1;
- VEC_safe_push (varinfo_t, heap, varmap, vi);
tmp.var = vi->id;
tmp.type = SCALAR;
--- 2661,2673 ----
new_scalar_tmp_constraint_exp (const char *name)
{
struct constraint_expr tmp;
varinfo_t vi;
! vi = new_var_info (NULL_TREE, name);
vi->offset = 0;
vi->size = -1;
vi->fullsize = -1;
vi->is_full_var = 1;
tmp.var = vi->id;
tmp.type = SCALAR;
*************** count_num_arguments (tree decl, bool *is
*** 4263,4269 ****
static unsigned int
create_function_info_for (tree decl, const char *name)
{
- unsigned int index = VEC_length (varinfo_t, varmap);
varinfo_t vi;
tree arg;
unsigned int i;
--- 4240,4245 ----
*************** create_function_info_for (tree decl, con
*** 4271,4282 ****
/* Create the variable info. */
! vi = new_var_info (decl, index, name);
vi->offset = 0;
vi->size = 1;
vi->fullsize = count_num_arguments (decl, &is_varargs) + 1;
insert_vi_for_tree (vi->decl, vi);
- VEC_safe_push (varinfo_t, heap, varmap, vi);
stats.total_vars++;
--- 4247,4257 ----
/* Create the variable info. */
! vi = new_var_info (decl, name);
vi->offset = 0;
vi->size = 1;
vi->fullsize = count_num_arguments (decl, &is_varargs) + 1;
insert_vi_for_tree (vi->decl, vi);
stats.total_vars++;
*************** create_function_info_for (tree decl, con
*** 4287,4296 ****
vi->fullsize = ~0;
vi->size = ~0;
vi->is_unknown_size_var = true;
! return index;
}
-
arg = DECL_ARGUMENTS (decl);
/* Set up variables for each argument. */
--- 4262,4270 ----
vi->fullsize = ~0;
vi->size = ~0;
vi->is_unknown_size_var = true;
! return vi->id;
}
arg = DECL_ARGUMENTS (decl);
/* Set up variables for each argument. */
*************** create_function_info_for (tree decl, con
*** 4299,4317 ****
varinfo_t argvi;
const char *newname;
char *tempname;
- unsigned int newindex;
tree argdecl = decl;
if (arg)
argdecl = arg;
- newindex = VEC_length (varinfo_t, varmap);
asprintf (&tempname, "%s.arg%d", name, i-1);
newname = ggc_strdup (tempname);
free (tempname);
! argvi = new_var_info (argdecl, newindex, newname);
! VEC_safe_push (varinfo_t, heap, varmap, argvi);
argvi->offset = i;
argvi->size = 1;
argvi->is_full_var = true;
--- 4273,4288 ----
varinfo_t argvi;
const char *newname;
char *tempname;
tree argdecl = decl;
if (arg)
argdecl = arg;
asprintf (&tempname, "%s.arg%d", name, i-1);
newname = ggc_strdup (tempname);
free (tempname);
! argvi = new_var_info (argdecl, newname);
argvi->offset = i;
argvi->size = 1;
argvi->is_full_var = true;
*************** create_function_info_for (tree decl, con
*** 4332,4338 ****
varinfo_t resultvi;
const char *newname;
char *tempname;
- unsigned int newindex;
tree resultdecl = decl;
vi->fullsize ++;
--- 4303,4308 ----
*************** create_function_info_for (tree decl, con
*** 4340,4352 ****
if (DECL_RESULT (decl))
resultdecl = DECL_RESULT (decl);
- newindex = VEC_length (varinfo_t, varmap);
asprintf (&tempname, "%s.result", name);
newname = ggc_strdup (tempname);
free (tempname);
! resultvi = new_var_info (resultdecl, newindex, newname);
! VEC_safe_push (varinfo_t, heap, varmap, resultvi);
resultvi->offset = i;
resultvi->size = 1;
resultvi->fullsize = vi->fullsize;
--- 4310,4320 ----
if (DECL_RESULT (decl))
resultdecl = DECL_RESULT (decl);
asprintf (&tempname, "%s.result", name);
newname = ggc_strdup (tempname);
free (tempname);
! resultvi = new_var_info (resultdecl, newname);
resultvi->offset = i;
resultvi->size = 1;
resultvi->fullsize = vi->fullsize;
*************** create_function_info_for (tree decl, con
*** 4356,4362 ****
if (DECL_RESULT (decl))
insert_vi_for_tree (DECL_RESULT (decl), resultvi);
}
! return index;
}
--- 4324,4331 ----
if (DECL_RESULT (decl))
insert_vi_for_tree (DECL_RESULT (decl), resultvi);
}
!
! return vi->id;
}
*************** check_for_overlaps (VEC (fieldoff_s,heap
*** 4386,4392 ****
static unsigned int
create_variable_info_for (tree decl, const char *name)
{
- unsigned int index = VEC_length (varinfo_t, varmap);
varinfo_t vi;
tree decl_type = TREE_TYPE (decl);
tree declsize = DECL_P (decl) ? DECL_SIZE (decl) : TYPE_SIZE (decl_type);
--- 4355,4360 ----
*************** create_variable_info_for (tree decl, con
*** 4406,4412 ****
/* If the variable doesn't have subvars, we may end up needing to
sort the field list and create fake variables for all the
fields. */
! vi = new_var_info (decl, index, name);
vi->offset = 0;
vi->may_have_pointers = could_have_pointers (decl);
if (!declsize
--- 4374,4380 ----
/* If the variable doesn't have subvars, we may end up needing to
sort the field list and create fake variables for all the
fields. */
! vi = new_var_info (decl, name);
vi->offset = 0;
vi->may_have_pointers = could_have_pointers (decl);
if (!declsize
*************** create_variable_info_for (tree decl, con
*** 4423,4429 ****
}
insert_vi_for_tree (vi->decl, vi);
- VEC_safe_push (varinfo_t, heap, varmap, vi);
if (is_global && (!flag_whole_program || !in_ipa_mode)
&& vi->may_have_pointers)
{
--- 4391,4396 ----
*************** create_variable_info_for (tree decl, con
*** 4441,4447 ****
&& VEC_length (fieldoff_s, fieldstack) > 1
&& VEC_length (fieldoff_s, fieldstack) <= MAX_FIELDS_FOR_FIELD_SENSITIVE)
{
- unsigned int newindex = VEC_length (varinfo_t, varmap);
fieldoff_s *fo = NULL;
bool notokay = false;
unsigned int i;
--- 4408,4413 ----
*************** create_variable_info_for (tree decl, con
*** 4481,4487 ****
vi->size = ~0;
vi->is_full_var = true;
VEC_free (fieldoff_s, heap, fieldstack);
! return index;
}
vi->size = fo->size;
--- 4447,4453 ----
vi->size = ~0;
vi->is_full_var = true;
VEC_free (fieldoff_s, heap, fieldstack);
! return vi->id;
}
vi->size = fo->size;
*************** create_variable_info_for (tree decl, con
*** 4495,4501 ****
const char *newname = "NULL";
char *tempname;
- newindex = VEC_length (varinfo_t, varmap);
if (dump_file)
{
asprintf (&tempname, "%s." HOST_WIDE_INT_PRINT_DEC
--- 4461,4466 ----
*************** create_variable_info_for (tree decl, con
*** 4504,4516 ****
newname = ggc_strdup (tempname);
free (tempname);
}
! newvi = new_var_info (decl, newindex, newname);
newvi->offset = fo->offset;
newvi->size = fo->size;
newvi->fullsize = vi->fullsize;
newvi->may_have_pointers = fo->may_have_pointers;
insert_into_field_list (vi, newvi);
- VEC_safe_push (varinfo_t, heap, varmap, newvi);
if (is_global && (!flag_whole_program || !in_ipa_mode)
&& newvi->may_have_pointers)
make_copy_constraint (newvi, nonlocal_id);
--- 4469,4480 ----
newname = ggc_strdup (tempname);
free (tempname);
}
! newvi = new_var_info (decl, newname);
newvi->offset = fo->offset;
newvi->size = fo->size;
newvi->fullsize = vi->fullsize;
newvi->may_have_pointers = fo->may_have_pointers;
insert_into_field_list (vi, newvi);
if (is_global && (!flag_whole_program || !in_ipa_mode)
&& newvi->may_have_pointers)
make_copy_constraint (newvi, nonlocal_id);
*************** create_variable_info_for (tree decl, con
*** 4523,4529 ****
VEC_free (fieldoff_s, heap, fieldstack);
! return index;
}
/* Print out the points-to solution for VAR to FILE. */
--- 4487,4493 ----
VEC_free (fieldoff_s, heap, fieldstack);
! return vi->id;
}
/* Print out the points-to solution for VAR to FILE. */
*************** find_what_var_points_to (varinfo_t vi, s
*** 4770,4776 ****
bitmap_iterator bi;
bitmap finished_solution;
bitmap result;
- tree ptr = vi->decl;
memset (pt, 0, sizeof (struct pt_solution));
--- 4734,4739 ----
*************** find_what_var_points_to (varinfo_t vi, s
*** 4813,4821 ****
finished_solution = BITMAP_GGC_ALLOC ();
stats.points_to_sets_created++;
- if (TREE_CODE (ptr) == SSA_NAME)
- ptr = SSA_NAME_VAR (ptr);
-
set_uids_in_ptset (finished_solution, vi->solution, pt);
result = shared_bitmap_lookup (finished_solution);
if (!result)
--- 4776,4781 ----
*************** static void
*** 5066,5089 ****
init_base_vars (void)
{
struct constraint_expr lhs, rhs;
/* Create the NULL variable, used to represent that a variable points
to NULL. */
! nothing_tree = create_tmp_var_raw (void_type_node, "NULL");
! var_nothing = new_var_info (nothing_tree, nothing_id, "NULL");
! insert_vi_for_tree (nothing_tree, var_nothing);
var_nothing->is_artificial_var = 1;
var_nothing->offset = 0;
var_nothing->size = ~0;
var_nothing->fullsize = ~0;
var_nothing->is_special_var = 1;
- VEC_safe_push (varinfo_t, heap, varmap, var_nothing);
/* Create the ANYTHING variable, used to represent that a variable
points to some unknown piece of memory. */
! anything_tree = create_tmp_var_raw (ptr_type_node, "ANYTHING");
! var_anything = new_var_info (anything_tree, anything_id, "ANYTHING");
! insert_vi_for_tree (anything_tree, var_anything);
var_anything->is_artificial_var = 1;
var_anything->size = ~0;
var_anything->offset = 0;
--- 5026,5054 ----
init_base_vars (void)
{
struct constraint_expr lhs, rhs;
+ varinfo_t var_anything;
+ varinfo_t var_nothing;
+ varinfo_t var_readonly;
+ varinfo_t var_escaped;
+ varinfo_t var_nonlocal;
+ varinfo_t var_callused;
+ varinfo_t var_storedanything;
+ varinfo_t var_integer;
/* Create the NULL variable, used to represent that a variable points
to NULL. */
! var_nothing = new_var_info (NULL_TREE, "NULL");
! gcc_assert (var_nothing->id == nothing_id);
var_nothing->is_artificial_var = 1;
var_nothing->offset = 0;
var_nothing->size = ~0;
var_nothing->fullsize = ~0;
var_nothing->is_special_var = 1;
/* Create the ANYTHING variable, used to represent that a variable
points to some unknown piece of memory. */
! var_anything = new_var_info (NULL_TREE, "ANYTHING");
! gcc_assert (var_anything->id == anything_id);
var_anything->is_artificial_var = 1;
var_anything->size = ~0;
var_anything->offset = 0;
*************** init_base_vars (void)
*** 5094,5100 ****
/* Anything points to anything. This makes deref constraints just
work in the presence of linked list and other p = *p type loops,
by saying that *ANYTHING = ANYTHING. */
- VEC_safe_push (varinfo_t, heap, varmap, var_anything);
lhs.type = SCALAR;
lhs.var = anything_id;
lhs.offset = 0;
--- 5059,5064 ----
*************** init_base_vars (void)
*** 5109,5124 ****
/* Create the READONLY variable, used to represent that a variable
points to readonly memory. */
! readonly_tree = create_tmp_var_raw (ptr_type_node, "READONLY");
! var_readonly = new_var_info (readonly_tree, readonly_id, "READONLY");
var_readonly->is_artificial_var = 1;
var_readonly->offset = 0;
var_readonly->size = ~0;
var_readonly->fullsize = ~0;
var_readonly->next = NULL;
var_readonly->is_special_var = 1;
- insert_vi_for_tree (readonly_tree, var_readonly);
- VEC_safe_push (varinfo_t, heap, varmap, var_readonly);
/* readonly memory points to anything, in order to make deref
easier. In reality, it points to anything the particular
--- 5073,5086 ----
/* Create the READONLY variable, used to represent that a variable
points to readonly memory. */
! var_readonly = new_var_info (NULL_TREE, "READONLY");
! gcc_assert (var_readonly->id == readonly_id);
var_readonly->is_artificial_var = 1;
var_readonly->offset = 0;
var_readonly->size = ~0;
var_readonly->fullsize = ~0;
var_readonly->next = NULL;
var_readonly->is_special_var = 1;
/* readonly memory points to anything, in order to make deref
easier. In reality, it points to anything the particular
*************** init_base_vars (void)
*** 5134,5161 ****
/* Create the ESCAPED variable, used to represent the set of escaped
memory. */
! escaped_tree = create_tmp_var_raw (ptr_type_node, "ESCAPED");
! var_escaped = new_var_info (escaped_tree, escaped_id, "ESCAPED");
! insert_vi_for_tree (escaped_tree, var_escaped);
var_escaped->is_artificial_var = 1;
var_escaped->offset = 0;
var_escaped->size = ~0;
var_escaped->fullsize = ~0;
var_escaped->is_special_var = 0;
- VEC_safe_push (varinfo_t, heap, varmap, var_escaped);
- gcc_assert (VEC_index (varinfo_t, varmap, 3) == var_escaped);
/* Create the NONLOCAL variable, used to represent the set of nonlocal
memory. */
! nonlocal_tree = create_tmp_var_raw (ptr_type_node, "NONLOCAL");
! var_nonlocal = new_var_info (nonlocal_tree, nonlocal_id, "NONLOCAL");
! insert_vi_for_tree (nonlocal_tree, var_nonlocal);
var_nonlocal->is_artificial_var = 1;
var_nonlocal->offset = 0;
var_nonlocal->size = ~0;
var_nonlocal->fullsize = ~0;
var_nonlocal->is_special_var = 1;
- VEC_safe_push (varinfo_t, heap, varmap, var_nonlocal);
/* ESCAPED = *ESCAPED, because escaped is may-deref'd at calls, etc. */
lhs.type = SCALAR;
--- 5096,5118 ----
/* Create the ESCAPED variable, used to represent the set of escaped
memory. */
! var_escaped = new_var_info (NULL_TREE, "ESCAPED");
! gcc_assert (var_escaped->id == escaped_id);
var_escaped->is_artificial_var = 1;
var_escaped->offset = 0;
var_escaped->size = ~0;
var_escaped->fullsize = ~0;
var_escaped->is_special_var = 0;
/* Create the NONLOCAL variable, used to represent the set of nonlocal
memory. */
! var_nonlocal = new_var_info (NULL_TREE, "NONLOCAL");
! gcc_assert (var_nonlocal->id == nonlocal_id);
var_nonlocal->is_artificial_var = 1;
var_nonlocal->offset = 0;
var_nonlocal->size = ~0;
var_nonlocal->fullsize = ~0;
var_nonlocal->is_special_var = 1;
/* ESCAPED = *ESCAPED, because escaped is may-deref'd at calls, etc. */
lhs.type = SCALAR;
*************** init_base_vars (void)
*** 5203,5217 ****
/* Create the CALLUSED variable, used to represent the set of call-used
memory. */
! callused_tree = create_tmp_var_raw (ptr_type_node, "CALLUSED");
! var_callused = new_var_info (callused_tree, callused_id, "CALLUSED");
! insert_vi_for_tree (callused_tree, var_callused);
var_callused->is_artificial_var = 1;
var_callused->offset = 0;
var_callused->size = ~0;
var_callused->fullsize = ~0;
var_callused->is_special_var = 0;
- VEC_safe_push (varinfo_t, heap, varmap, var_callused);
/* CALLUSED = *CALLUSED, because call-used is may-deref'd at calls, etc. */
lhs.type = SCALAR;
--- 5160,5172 ----
/* Create the CALLUSED variable, used to represent the set of call-used
memory. */
! var_callused = new_var_info (NULL_TREE, "CALLUSED");
! gcc_assert (var_callused->id == callused_id);
var_callused->is_artificial_var = 1;
var_callused->offset = 0;
var_callused->size = ~0;
var_callused->fullsize = ~0;
var_callused->is_special_var = 0;
/* CALLUSED = *CALLUSED, because call-used is may-deref'd at calls, etc. */
lhs.type = SCALAR;
*************** init_base_vars (void)
*** 5234,5262 ****
/* Create the STOREDANYTHING variable, used to represent the set of
variables stored to *ANYTHING. */
! storedanything_tree = create_tmp_var_raw (ptr_type_node, "STOREDANYTHING");
! var_storedanything = new_var_info (storedanything_tree, storedanything_id,
! "STOREDANYTHING");
! insert_vi_for_tree (storedanything_tree, var_storedanything);
var_storedanything->is_artificial_var = 1;
var_storedanything->offset = 0;
var_storedanything->size = ~0;
var_storedanything->fullsize = ~0;
var_storedanything->is_special_var = 0;
- VEC_safe_push (varinfo_t, heap, varmap, var_storedanything);
/* Create the INTEGER variable, used to represent that a variable points
to what an INTEGER "points to". */
! integer_tree = create_tmp_var_raw (ptr_type_node, "INTEGER");
! var_integer = new_var_info (integer_tree, integer_id, "INTEGER");
! insert_vi_for_tree (integer_tree, var_integer);
var_integer->is_artificial_var = 1;
var_integer->size = ~0;
var_integer->fullsize = ~0;
var_integer->offset = 0;
var_integer->next = NULL;
var_integer->is_special_var = 1;
- VEC_safe_push (varinfo_t, heap, varmap, var_integer);
/* INTEGER = ANYTHING, because we don't know where a dereference of
a random integer will point to. */
--- 5189,5212 ----
/* Create the STOREDANYTHING variable, used to represent the set of
variables stored to *ANYTHING. */
! var_storedanything = new_var_info (NULL_TREE, "STOREDANYTHING");
! gcc_assert (var_storedanything->id == storedanything_id);
var_storedanything->is_artificial_var = 1;
var_storedanything->offset = 0;
var_storedanything->size = ~0;
var_storedanything->fullsize = ~0;
var_storedanything->is_special_var = 0;
/* Create the INTEGER variable, used to represent that a variable points
to what an INTEGER "points to". */
! var_integer = new_var_info (NULL_TREE, "INTEGER");
! gcc_assert (var_integer->id == integer_id);
var_integer->is_artificial_var = 1;
var_integer->size = ~0;
var_integer->fullsize = ~0;
var_integer->offset = 0;
var_integer->next = NULL;
var_integer->is_special_var = 1;
/* INTEGER = ANYTHING, because we don't know where a dereference of
a random integer will point to. */
*************** compute_points_to_sets (void)
*** 5446,5453 ****
/* Compute the points-to sets for ESCAPED and CALLUSED used for
call-clobber analysis. */
! find_what_var_points_to (var_escaped, &cfun->gimple_df->escaped);
! find_what_var_points_to (var_callused, &cfun->gimple_df->callused);
/* Make sure the ESCAPED solution (which is used as placeholder in
other solutions) does not reference itself. This simplifies
--- 5396,5405 ----
/* Compute the points-to sets for ESCAPED and CALLUSED used for
call-clobber analysis. */
! find_what_var_points_to (get_varinfo (escaped_id),
! &cfun->gimple_df->escaped);
! find_what_var_points_to (get_varinfo (callused_id),
! &cfun->gimple_df->callused);
/* Make sure the ESCAPED solution (which is used as placeholder in
other solutions) does not reference itself. This simplifies