mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 19:11:21 +08:00
cgraph.h (cgraph_edge_p): New.
* cgraph.h (cgraph_edge_p): New. Update the prototype of cgraph_function_versioning. * cgraphunit.c (cgraph_copy_node_for_versioning, cgraph_function_versioning): Use VEC instead of VARRAY. * ipa-cp.c (ipcp_insert_stage): Likewise. From-SVN: r113006
This commit is contained in:
parent
1a5640b4e1
commit
b2c0ad4071
@ -11,6 +11,12 @@
|
||||
VEC instead of VARRAY.
|
||||
(last_alias_set): Remove.
|
||||
|
||||
* cgraph.h (cgraph_edge_p): New.
|
||||
Update the prototype of cgraph_function_versioning.
|
||||
* cgraphunit.c (cgraph_copy_node_for_versioning,
|
||||
cgraph_function_versioning): Use VEC instead of VARRAY.
|
||||
* ipa-cp.c (ipcp_insert_stage): Likewise.
|
||||
|
||||
2006-04-16 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
PR target/26961
|
||||
|
@ -189,6 +189,11 @@ struct cgraph_edge GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_call
|
||||
int loop_nest;
|
||||
};
|
||||
|
||||
typedef struct cgraph_edge *cgraph_edge_p;
|
||||
|
||||
DEF_VEC_P(cgraph_edge_p);
|
||||
DEF_VEC_ALLOC_P(cgraph_edge_p,heap);
|
||||
|
||||
/* The cgraph_varpool data structure.
|
||||
Each static variable decl has assigned cgraph_varpool_node. */
|
||||
|
||||
@ -307,7 +312,8 @@ void cgraph_build_static_cdtor (char which, tree body, int priority);
|
||||
void cgraph_reset_static_var_maps (void);
|
||||
void init_cgraph (void);
|
||||
struct cgraph_node *cgraph_function_versioning (struct cgraph_node *,
|
||||
varray_type, varray_type);
|
||||
VEC(cgraph_edge_p,heap)*,
|
||||
varray_type);
|
||||
void cgraph_analyze_function (struct cgraph_node *);
|
||||
struct cgraph_node *save_inline_function_body (struct cgraph_node *);
|
||||
|
||||
|
@ -1575,7 +1575,8 @@ update_call_expr (struct cgraph_node *new_version)
|
||||
|
||||
static struct cgraph_node *
|
||||
cgraph_copy_node_for_versioning (struct cgraph_node *old_version,
|
||||
tree new_decl, varray_type redirect_callers)
|
||||
tree new_decl,
|
||||
VEC(cgraph_edge_p,heap) *redirect_callers)
|
||||
{
|
||||
struct cgraph_node *new_version;
|
||||
struct cgraph_edge *e, *new_e;
|
||||
@ -1614,14 +1615,12 @@ cgraph_copy_node_for_versioning (struct cgraph_node *old_version,
|
||||
if (!next_callee)
|
||||
break;
|
||||
}
|
||||
if (redirect_callers)
|
||||
for (i = 0; i < VARRAY_ACTIVE_SIZE (redirect_callers); i++)
|
||||
{
|
||||
e = VARRAY_GENERIC_PTR (redirect_callers, i);
|
||||
/* Redirect calls to the old version node
|
||||
to point to it's new version. */
|
||||
cgraph_redirect_edge_callee (e, new_version);
|
||||
}
|
||||
for (i = 0; VEC_iterate (cgraph_edge_p, redirect_callers, i, e); i++)
|
||||
{
|
||||
/* Redirect calls to the old version node to point to its new
|
||||
version. */
|
||||
cgraph_redirect_edge_callee (e, new_version);
|
||||
}
|
||||
|
||||
return new_version;
|
||||
}
|
||||
@ -1641,7 +1640,7 @@ cgraph_copy_node_for_versioning (struct cgraph_node *old_version,
|
||||
|
||||
struct cgraph_node *
|
||||
cgraph_function_versioning (struct cgraph_node *old_version_node,
|
||||
varray_type redirect_callers,
|
||||
VEC(cgraph_edge_p,heap) *redirect_callers,
|
||||
varray_type tree_map)
|
||||
{
|
||||
tree old_decl = old_version_node->decl;
|
||||
|
10
gcc/ipa-cp.c
10
gcc/ipa-cp.c
@ -1005,7 +1005,8 @@ ipcp_insert_stage (void)
|
||||
struct cgraph_node *node, *node1 = NULL;
|
||||
int i, const_param;
|
||||
union parameter_info *cvalue;
|
||||
varray_type redirect_callers, replace_trees;
|
||||
VEC(cgraph_edge_p,heap) *redirect_callers;
|
||||
varray_type replace_trees;
|
||||
struct cgraph_edge *cs;
|
||||
int node_callers, count;
|
||||
tree parm_tree;
|
||||
@ -1045,15 +1046,14 @@ ipcp_insert_stage (void)
|
||||
node_callers = 0;
|
||||
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
|
||||
node_callers++;
|
||||
VARRAY_GENERIC_PTR_INIT (redirect_callers, node_callers,
|
||||
"redirect_callers");
|
||||
redirect_callers = VEC_alloc (cgraph_edge_p, heap, node_callers);
|
||||
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
|
||||
VARRAY_PUSH_GENERIC_PTR (redirect_callers, cs);
|
||||
VEC_quick_push (cgraph_edge_p, redirect_callers, cs);
|
||||
/* Redirecting all the callers of the node to the
|
||||
new versioned node. */
|
||||
node1 =
|
||||
cgraph_function_versioning (node, redirect_callers, replace_trees);
|
||||
VARRAY_CLEAR (redirect_callers);
|
||||
VEC_free (cgraph_edge_p, heap, redirect_callers);
|
||||
VARRAY_CLEAR (replace_trees);
|
||||
if (node1 == NULL)
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user