Commit c419671c by Martin Jambor Committed by Martin Jambor

ipa-prop.c (compute_pass_through_member_ptrs): Rename parm_info to parm_ainfo.

2011-10-27  Martin Jambor  <mjambor@suse.cz>

	* ipa-prop.c (compute_pass_through_member_ptrs): Rename parm_info
	to parm_ainfo.
	(ipa_compute_jump_functions_for_edge): Likewise.
	(ipa_compute_jump_functions): Likewise.
	(ipa_analyze_indirect_call_uses): Likewise.
	(ipa_analyze_call_uses): Likewise.
	(ipa_analyze_params_uses): Likewise.
	(ipa_analyze_node): Likewise.

From-SVN: r180578
parent 5625e6a6
2011-10-27 Martin Jambor <mjambor@suse.cz>
* ipa-prop.c (compute_pass_through_member_ptrs): Rename parm_info
to parm_ainfo.
(ipa_compute_jump_functions_for_edge): Likewise.
(ipa_compute_jump_functions): Likewise.
(ipa_analyze_indirect_call_uses): Likewise.
(ipa_analyze_call_uses): Likewise.
(ipa_analyze_params_uses): Likewise.
(ipa_analyze_node): Likewise.
2011-10-27 Uros Bizjak <ubizjak@gmail.com> 2011-10-27 Uros Bizjak <ubizjak@gmail.com>
PR target/50875 PR target/50875
...@@ -794,7 +794,7 @@ is_parm_modified_before_call (struct param_analysis_info *parm_info, ...@@ -794,7 +794,7 @@ is_parm_modified_before_call (struct param_analysis_info *parm_info,
static bool static bool
compute_pass_through_member_ptrs (struct ipa_node_params *info, compute_pass_through_member_ptrs (struct ipa_node_params *info,
struct param_analysis_info *parms_info, struct param_analysis_info *parms_ainfo,
struct ipa_edge_args *args, struct ipa_edge_args *args,
gimple call) gimple call)
{ {
...@@ -813,7 +813,8 @@ compute_pass_through_member_ptrs (struct ipa_node_params *info, ...@@ -813,7 +813,8 @@ compute_pass_through_member_ptrs (struct ipa_node_params *info,
int index = ipa_get_param_decl_index (info, arg); int index = ipa_get_param_decl_index (info, arg);
gcc_assert (index >=0); gcc_assert (index >=0);
if (!is_parm_modified_before_call (&parms_info[index], call, arg)) if (!is_parm_modified_before_call (&parms_ainfo[index], call,
arg))
{ {
struct ipa_jump_func *jfunc = ipa_get_ith_jump_func (args, struct ipa_jump_func *jfunc = ipa_get_ith_jump_func (args,
num); num);
...@@ -968,7 +969,7 @@ compute_cst_member_ptr_arguments (struct ipa_edge_args *args, ...@@ -968,7 +969,7 @@ compute_cst_member_ptr_arguments (struct ipa_edge_args *args,
to this callsite. */ to this callsite. */
static void static void
ipa_compute_jump_functions_for_edge (struct param_analysis_info *parms_info, ipa_compute_jump_functions_for_edge (struct param_analysis_info *parms_ainfo,
struct cgraph_edge *cs) struct cgraph_edge *cs)
{ {
struct ipa_node_params *info = IPA_NODE_REF (cs->caller); struct ipa_node_params *info = IPA_NODE_REF (cs->caller);
...@@ -985,7 +986,7 @@ ipa_compute_jump_functions_for_edge (struct param_analysis_info *parms_info, ...@@ -985,7 +986,7 @@ ipa_compute_jump_functions_for_edge (struct param_analysis_info *parms_info,
/* Let's check whether there are any potential member pointers and if so, /* Let's check whether there are any potential member pointers and if so,
whether we can determine their functions as pass_through. */ whether we can determine their functions as pass_through. */
if (!compute_pass_through_member_ptrs (info, parms_info, args, call)) if (!compute_pass_through_member_ptrs (info, parms_ainfo, args, call))
return; return;
/* Finally, let's check whether we actually pass a new constant member /* Finally, let's check whether we actually pass a new constant member
...@@ -998,7 +999,7 @@ ipa_compute_jump_functions_for_edge (struct param_analysis_info *parms_info, ...@@ -998,7 +999,7 @@ ipa_compute_jump_functions_for_edge (struct param_analysis_info *parms_info,
static void static void
ipa_compute_jump_functions (struct cgraph_node *node, ipa_compute_jump_functions (struct cgraph_node *node,
struct param_analysis_info *parms_info) struct param_analysis_info *parms_ainfo)
{ {
struct cgraph_edge *cs; struct cgraph_edge *cs;
...@@ -1010,11 +1011,11 @@ ipa_compute_jump_functions (struct cgraph_node *node, ...@@ -1010,11 +1011,11 @@ ipa_compute_jump_functions (struct cgraph_node *node,
functions unless they may become known during lto/whopr. */ functions unless they may become known during lto/whopr. */
if (!callee->analyzed && !flag_lto) if (!callee->analyzed && !flag_lto)
continue; continue;
ipa_compute_jump_functions_for_edge (parms_info, cs); ipa_compute_jump_functions_for_edge (parms_ainfo, cs);
} }
for (cs = node->indirect_calls; cs; cs = cs->next_callee) for (cs = node->indirect_calls; cs; cs = cs->next_callee)
ipa_compute_jump_functions_for_edge (parms_info, cs); ipa_compute_jump_functions_for_edge (parms_ainfo, cs);
} }
/* If RHS looks like a rhs of a statement loading pfn from a member /* If RHS looks like a rhs of a statement loading pfn from a member
...@@ -1111,7 +1112,7 @@ ipa_note_param_call (struct cgraph_node *node, int param_index, gimple stmt) ...@@ -1111,7 +1112,7 @@ ipa_note_param_call (struct cgraph_node *node, int param_index, gimple stmt)
} }
/* Analyze the CALL and examine uses of formal parameters of the caller NODE /* Analyze the CALL and examine uses of formal parameters of the caller NODE
(described by INFO). PARMS_INFO is a pointer to a vector containing (described by INFO). PARMS_AINFO is a pointer to a vector containing
intermediate information about each formal parameter. Currently it checks intermediate information about each formal parameter. Currently it checks
whether the call calls a pointer that is a formal parameter and if so, the whether the call calls a pointer that is a formal parameter and if so, the
parameter is marked with the called flag and an indirect call graph edge parameter is marked with the called flag and an indirect call graph edge
...@@ -1170,7 +1171,7 @@ ipa_note_param_call (struct cgraph_node *node, int param_index, gimple stmt) ...@@ -1170,7 +1171,7 @@ ipa_note_param_call (struct cgraph_node *node, int param_index, gimple stmt)
static void static void
ipa_analyze_indirect_call_uses (struct cgraph_node *node, ipa_analyze_indirect_call_uses (struct cgraph_node *node,
struct ipa_node_params *info, struct ipa_node_params *info,
struct param_analysis_info *parms_info, struct param_analysis_info *parms_ainfo,
gimple call, tree target) gimple call, tree target)
{ {
gimple def; gimple def;
...@@ -1283,7 +1284,7 @@ ipa_analyze_indirect_call_uses (struct cgraph_node *node, ...@@ -1283,7 +1284,7 @@ ipa_analyze_indirect_call_uses (struct cgraph_node *node,
return; return;
index = ipa_get_param_decl_index (info, rec); index = ipa_get_param_decl_index (info, rec);
if (index >= 0 && !is_parm_modified_before_call (&parms_info[index], if (index >= 0 && !is_parm_modified_before_call (&parms_ainfo[index],
call, rec)) call, rec))
ipa_note_param_call (node, index, call); ipa_note_param_call (node, index, call);
...@@ -1347,20 +1348,20 @@ ipa_analyze_virtual_call_uses (struct cgraph_node *node, ...@@ -1347,20 +1348,20 @@ ipa_analyze_virtual_call_uses (struct cgraph_node *node,
} }
/* Analyze a call statement CALL whether and how it utilizes formal parameters /* Analyze a call statement CALL whether and how it utilizes formal parameters
of the caller (described by INFO). PARMS_INFO is a pointer to a vector of the caller (described by INFO). PARMS_AINFO is a pointer to a vector
containing intermediate information about each formal parameter. */ containing intermediate information about each formal parameter. */
static void static void
ipa_analyze_call_uses (struct cgraph_node *node, ipa_analyze_call_uses (struct cgraph_node *node,
struct ipa_node_params *info, struct ipa_node_params *info,
struct param_analysis_info *parms_info, gimple call) struct param_analysis_info *parms_ainfo, gimple call)
{ {
tree target = gimple_call_fn (call); tree target = gimple_call_fn (call);
if (!target) if (!target)
return; return;
if (TREE_CODE (target) == SSA_NAME) if (TREE_CODE (target) == SSA_NAME)
ipa_analyze_indirect_call_uses (node, info, parms_info, call, target); ipa_analyze_indirect_call_uses (node, info, parms_ainfo, call, target);
else if (TREE_CODE (target) == OBJ_TYPE_REF) else if (TREE_CODE (target) == OBJ_TYPE_REF)
ipa_analyze_virtual_call_uses (node, info, call, target); ipa_analyze_virtual_call_uses (node, info, call, target);
} }
...@@ -1368,15 +1369,15 @@ ipa_analyze_call_uses (struct cgraph_node *node, ...@@ -1368,15 +1369,15 @@ ipa_analyze_call_uses (struct cgraph_node *node,
/* Analyze the call statement STMT with respect to formal parameters (described /* Analyze the call statement STMT with respect to formal parameters (described
in INFO) of caller given by NODE. Currently it only checks whether formal in INFO) of caller given by NODE. Currently it only checks whether formal
parameters are called. PARMS_INFO is a pointer to a vector containing parameters are called. PARMS_AINFO is a pointer to a vector containing
intermediate information about each formal parameter. */ intermediate information about each formal parameter. */
static void static void
ipa_analyze_stmt_uses (struct cgraph_node *node, struct ipa_node_params *info, ipa_analyze_stmt_uses (struct cgraph_node *node, struct ipa_node_params *info,
struct param_analysis_info *parms_info, gimple stmt) struct param_analysis_info *parms_ainfo, gimple stmt)
{ {
if (is_gimple_call (stmt)) if (is_gimple_call (stmt))
ipa_analyze_call_uses (node, info, parms_info, stmt); ipa_analyze_call_uses (node, info, parms_ainfo, stmt);
} }
/* Callback of walk_stmt_load_store_addr_ops for the visit_load. /* Callback of walk_stmt_load_store_addr_ops for the visit_load.
...@@ -1403,12 +1404,12 @@ visit_ref_for_mod_analysis (gimple stmt ATTRIBUTE_UNUSED, ...@@ -1403,12 +1404,12 @@ visit_ref_for_mod_analysis (gimple stmt ATTRIBUTE_UNUSED,
/* Scan the function body of NODE and inspect the uses of formal parameters. /* Scan the function body of NODE and inspect the uses of formal parameters.
Store the findings in various structures of the associated ipa_node_params Store the findings in various structures of the associated ipa_node_params
structure, such as parameter flags, notes etc. PARMS_INFO is a pointer to a structure, such as parameter flags, notes etc. PARMS_AINFO is a pointer to a
vector containing intermediate information about each formal parameter. */ vector containing intermediate information about each formal parameter. */
static void static void
ipa_analyze_params_uses (struct cgraph_node *node, ipa_analyze_params_uses (struct cgraph_node *node,
struct param_analysis_info *parms_info) struct param_analysis_info *parms_ainfo)
{ {
tree decl = node->decl; tree decl = node->decl;
basic_block bb; basic_block bb;
...@@ -1440,7 +1441,7 @@ ipa_analyze_params_uses (struct cgraph_node *node, ...@@ -1440,7 +1441,7 @@ ipa_analyze_params_uses (struct cgraph_node *node,
if (is_gimple_debug (stmt)) if (is_gimple_debug (stmt))
continue; continue;
ipa_analyze_stmt_uses (node, info, parms_info, stmt); ipa_analyze_stmt_uses (node, info, parms_ainfo, stmt);
walk_stmt_load_store_addr_ops (stmt, info, walk_stmt_load_store_addr_ops (stmt, info,
visit_ref_for_mod_analysis, visit_ref_for_mod_analysis,
visit_ref_for_mod_analysis, visit_ref_for_mod_analysis,
...@@ -1464,7 +1465,7 @@ void ...@@ -1464,7 +1465,7 @@ void
ipa_analyze_node (struct cgraph_node *node) ipa_analyze_node (struct cgraph_node *node)
{ {
struct ipa_node_params *info; struct ipa_node_params *info;
struct param_analysis_info *parms_info; struct param_analysis_info *parms_ainfo;
int i, param_count; int i, param_count;
ipa_check_create_node_params (); ipa_check_create_node_params ();
...@@ -1475,15 +1476,15 @@ ipa_analyze_node (struct cgraph_node *node) ...@@ -1475,15 +1476,15 @@ ipa_analyze_node (struct cgraph_node *node)
ipa_initialize_node_params (node); ipa_initialize_node_params (node);
param_count = ipa_get_param_count (info); param_count = ipa_get_param_count (info);
parms_info = XALLOCAVEC (struct param_analysis_info, param_count); parms_ainfo = XALLOCAVEC (struct param_analysis_info, param_count);
memset (parms_info, 0, sizeof (struct param_analysis_info) * param_count); memset (parms_ainfo, 0, sizeof (struct param_analysis_info) * param_count);
ipa_analyze_params_uses (node, parms_info); ipa_analyze_params_uses (node, parms_ainfo);
ipa_compute_jump_functions (node, parms_info); ipa_compute_jump_functions (node, parms_ainfo);
for (i = 0; i < param_count; i++) for (i = 0; i < param_count; i++)
if (parms_info[i].visited_statements) if (parms_ainfo[i].visited_statements)
BITMAP_FREE (parms_info[i].visited_statements); BITMAP_FREE (parms_ainfo[i].visited_statements);
current_function_decl = NULL; current_function_decl = NULL;
pop_cfun (); pop_cfun ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment