tree decl;
struct record_reference_ctx *ctx = (struct record_reference_ctx *)data;
- t = canonicalize_constructor_val (t);
+ t = canonicalize_constructor_val (t, NULL);
if (!t)
t = *tp;
else if (t != *tp)
struct cgraph_node *node = cgraph_get_create_node (decl);
if (!ctx->only_vars)
cgraph_mark_address_taken_node (node);
- ipa_record_reference (NULL, ctx->varpool_node, node, NULL,
+ ipa_record_reference ((symtab_node)ctx->varpool_node,
+ (symtab_node)node,
IPA_REF_ADDR, NULL);
}
if (TREE_CODE (decl) == VAR_DECL)
{
struct varpool_node *vnode = varpool_node (decl);
- if (lang_hooks.callgraph.analyze_expr)
- lang_hooks.callgraph.analyze_expr (&decl, walk_subtrees);
- varpool_mark_needed_node (vnode);
- ipa_record_reference (NULL, ctx->varpool_node,
- NULL, vnode,
+ ipa_record_reference ((symtab_node)ctx->varpool_node,
+ (symtab_node)vnode,
IPA_REF_ADDR, NULL);
}
*walk_subtrees = 0;
*walk_subtrees = 0;
break;
}
-
- if ((unsigned int) TREE_CODE (t) >= LAST_AND_UNUSED_TREE_CODE)
- return lang_hooks.callgraph.analyze_expr (tp, walk_subtrees);
break;
}
if (TREE_CODE (type) == VAR_DECL)
{
struct varpool_node *vnode = varpool_node (type);
- varpool_mark_needed_node (vnode);
- ipa_record_reference (node, NULL,
- NULL, vnode,
+ ipa_record_reference ((symtab_node)node,
+ (symtab_node)vnode,
IPA_REF_ADDR, NULL);
}
}
{
eh_region i;
- if (DECL_FUNCTION_PERSONALITY (node->decl))
+ if (DECL_FUNCTION_PERSONALITY (node->symbol.decl))
{
struct cgraph_node *per_node;
- per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->decl));
- ipa_record_reference (node, NULL, per_node, NULL, IPA_REF_ADDR, NULL);
+ per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
+ ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL);
cgraph_mark_address_taken_node (per_node);
}
{
struct cgraph_node *node = cgraph_get_create_node (addr);
cgraph_mark_address_taken_node (node);
- ipa_record_reference ((struct cgraph_node *)data, NULL,
- node, NULL,
+ ipa_record_reference ((symtab_node)data,
+ (symtab_node)node,
IPA_REF_ADDR, stmt);
}
else if (addr && TREE_CODE (addr) == VAR_DECL
&& (TREE_STATIC (addr) || DECL_EXTERNAL (addr)))
{
struct varpool_node *vnode = varpool_node (addr);
- int walk_subtrees;
- if (lang_hooks.callgraph.analyze_expr)
- lang_hooks.callgraph.analyze_expr (&addr, &walk_subtrees);
- varpool_mark_needed_node (vnode);
- ipa_record_reference ((struct cgraph_node *)data, NULL,
- NULL, vnode,
+ ipa_record_reference ((symtab_node)data,
+ (symtab_node)vnode,
IPA_REF_ADDR, stmt);
}
directly manipulated in the code. Pretend that it's an address. */
struct cgraph_node *node = cgraph_get_create_node (t);
cgraph_mark_address_taken_node (node);
- ipa_record_reference ((struct cgraph_node *)data, NULL,
- node, NULL,
+ ipa_record_reference ((symtab_node)data,
+ (symtab_node)node,
IPA_REF_ADDR, stmt);
}
else if (t && TREE_CODE (t) == VAR_DECL
&& (TREE_STATIC (t) || DECL_EXTERNAL (t)))
{
struct varpool_node *vnode = varpool_node (t);
- int walk_subtrees;
- if (lang_hooks.callgraph.analyze_expr)
- lang_hooks.callgraph.analyze_expr (&t, &walk_subtrees);
- varpool_mark_needed_node (vnode);
- ipa_record_reference ((struct cgraph_node *)data, NULL,
- NULL, vnode,
+ ipa_record_reference ((symtab_node)data,
+ (symtab_node)vnode,
IPA_REF_LOAD, stmt);
}
return false;
&& (TREE_STATIC (t) || DECL_EXTERNAL (t)))
{
struct varpool_node *vnode = varpool_node (t);
- int walk_subtrees;
- if (lang_hooks.callgraph.analyze_expr)
- lang_hooks.callgraph.analyze_expr (&t, &walk_subtrees);
- varpool_mark_needed_node (vnode);
- ipa_record_reference ((struct cgraph_node *)data, NULL,
- NULL, vnode,
+ ipa_record_reference ((symtab_node)data,
+ (symtab_node)vnode,
IPA_REF_STORE, stmt);
}
return false;
&& gimple_omp_parallel_child_fn (stmt))
{
tree fn = gimple_omp_parallel_child_fn (stmt);
- ipa_record_reference (node, NULL, cgraph_get_create_node (fn),
- NULL, IPA_REF_ADDR, stmt);
+ ipa_record_reference ((symtab_node)node,
+ (symtab_node)cgraph_get_create_node (fn),
+ IPA_REF_ADDR, stmt);
}
if (gimple_code (stmt) == GIMPLE_OMP_TASK)
{
tree fn = gimple_omp_task_child_fn (stmt);
if (fn)
- ipa_record_reference (node, NULL, cgraph_get_create_node (fn),
- NULL, IPA_REF_ADDR, stmt);
+ ipa_record_reference ((symtab_node)node,
+ (symtab_node) cgraph_get_create_node (fn),
+ IPA_REF_ADDR, stmt);
fn = gimple_omp_task_copy_fn (stmt);
if (fn)
- ipa_record_reference (node, NULL, cgraph_get_create_node (fn),
- NULL, IPA_REF_ADDR, stmt);
+ ipa_record_reference ((symtab_node)node,
+ (symtab_node)cgraph_get_create_node (fn),
+ IPA_REF_ADDR, stmt);
}
}
- for (gsi = gsi_start (phi_nodes (bb)); !gsi_end_p (gsi); gsi_next (&gsi))
+ for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
walk_stmt_load_store_addr_ops (gsi_stmt (gsi), node,
mark_load, mark_store, mark_address);
}
/* Look for initializers of constant variables and private statics. */
FOR_EACH_LOCAL_DECL (cfun, ix, decl)
if (TREE_CODE (decl) == VAR_DECL
- && (TREE_STATIC (decl) && !DECL_EXTERNAL (decl)))
+ && (TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
+ && !DECL_HAS_VALUE_EXPR_P (decl))
varpool_finalize_decl (decl);
record_eh_tables (node, cfun);
gimple_stmt_iterator gsi;
cgraph_node_remove_callees (node);
- ipa_remove_all_references (&node->ref_list);
+ ipa_remove_all_references (&node->symbol.ref_list);
node->count = ENTRY_BLOCK_PTR->count;
mark_store, mark_address);
}
- for (gsi = gsi_start (phi_nodes (bb)); !gsi_end_p (gsi); gsi_next (&gsi))
+ for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
walk_stmt_load_store_addr_ops (gsi_stmt (gsi), node,
mark_load, mark_store, mark_address);
}
struct cgraph_node *node = cgraph_get_node (current_function_decl);
gimple_stmt_iterator gsi;
- ipa_remove_all_references (&node->ref_list);
+ ipa_remove_all_references (&node->symbol.ref_list);
node->count = ENTRY_BLOCK_PTR->count;
mark_store, mark_address);
}
- for (gsi = gsi_start (phi_nodes (bb)); !gsi_end_p (gsi); gsi_next (&gsi))
+ for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
walk_stmt_load_store_addr_ops (gsi_stmt (gsi), node,
mark_load, mark_store, mark_address);
}