static funct_state
analyze_function (struct cgraph_node *fn, bool ipa)
{
- tree decl = fn->decl;
+ tree decl = fn->symbol.decl;
tree old_decl = current_function_decl;
funct_state l;
basic_block this_block;
l->looping = false;
l->can_throw = false;
state_from_flags (&l->state_previously_known, &l->looping_previously_known,
- flags_from_decl_or_type (fn->decl),
+ flags_from_decl_or_type (fn->symbol.decl),
cgraph_node_cannot_return (fn));
if (fn->thunk.thunk_p || fn->alias)
fs->can_throw = bp_unpack_value (&bp, 1);
if (dump_file)
{
- int flags = flags_from_decl_or_type (node->decl);
+ int flags = flags_from_decl_or_type (node->symbol.decl);
fprintf (dump_file, "Read info for %s/%i ",
cgraph_node_name (node),
node->uid);
}
}
else if (special_builtin_state (&edge_state, &edge_looping,
- y->decl))
+ y->symbol.decl))
;
else
state_from_flags (&edge_state, &edge_looping,
- flags_from_decl_or_type (y->decl),
+ flags_from_decl_or_type (y->symbol.decl),
cgraph_edge_cannot_lead_to_return (e));
/* Merge the results with what we already know. */
break;
/* And finally all loads and stores. */
- for (i = 0; ipa_ref_list_reference_iterate (&w->ref_list, i, ref); i++)
+ for (i = 0; ipa_ref_list_reference_iterate (&w->symbol.ref_list, i, ref); i++)
{
enum pure_const_state_e ref_state = IPA_CONST;
bool ref_looping = false;
{
case IPA_REF_LOAD:
/* readonly reads are safe. */
- if (TREE_READONLY (ipa_ref_varpool_node (ref)->decl))
+ if (TREE_READONLY (ipa_ref_varpool_node (ref)->symbol.decl))
break;
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, " nonreadonly global var read\n");
if (pure_const_state == IPA_NEITHER)
break;
}
- w_info = (struct ipa_dfs_info *) w->aux;
+ w_info = (struct ipa_dfs_info *) w->symbol.aux;
w = w_info->next_cycle;
}
if (dump_file && (dump_flags & TDF_DETAILS))
switch (this_state)
{
case IPA_CONST:
- if (!TREE_READONLY (w->decl))
+ if (!TREE_READONLY (w->symbol.decl))
{
- warn_function_const (w->decl, !this_looping);
+ warn_function_const (w->symbol.decl, !this_looping);
if (dump_file)
fprintf (dump_file, "Function found to be %sconst: %s\n",
this_looping ? "looping " : "",
break;
case IPA_PURE:
- if (!DECL_PURE_P (w->decl))
+ if (!DECL_PURE_P (w->symbol.decl))
{
- warn_function_pure (w->decl, !this_looping);
+ warn_function_pure (w->symbol.decl, !this_looping);
if (dump_file)
fprintf (dump_file, "Function found to be %spure: %s\n",
this_looping ? "looping " : "",
default:
break;
}
- w_info = (struct ipa_dfs_info *) w->aux;
+ w_info = (struct ipa_dfs_info *) w->symbol.aux;
w = w_info->next_cycle;
}
}
if (can_throw)
break;
- if (y_l->can_throw && !TREE_NOTHROW (w->decl)
+ if (y_l->can_throw && !TREE_NOTHROW (w->symbol.decl)
&& e->can_throw_external)
can_throw = true;
}
- else if (e->can_throw_external && !TREE_NOTHROW (y->decl))
+ else if (e->can_throw_external && !TREE_NOTHROW (y->symbol.decl))
can_throw = true;
}
for (ie = node->indirect_calls; ie; ie = ie->next_callee)
if (ie->can_throw_external)
can_throw = true;
- w_info = (struct ipa_dfs_info *) w->aux;
+ w_info = (struct ipa_dfs_info *) w->symbol.aux;
w = w_info->next_cycle;
}
while (w)
{
funct_state w_l = get_function_state (w);
- if (!can_throw && !TREE_NOTHROW (w->decl))
+ if (!can_throw && !TREE_NOTHROW (w->symbol.decl))
{
cgraph_set_nothrow_flag (w, true);
if (dump_file)
fprintf (dump_file, "Function found to be nothrow: %s\n",
cgraph_node_name (w));
}
- else if (can_throw && !TREE_NOTHROW (w->decl))
+ else if (can_throw && !TREE_NOTHROW (w->symbol.decl))
w_l->can_throw = true;
- w_info = (struct ipa_dfs_info *) w->aux;
+ w_info = (struct ipa_dfs_info *) w->symbol.aux;
w = w_info->next_cycle;
}
}