Commit 670654ef by Jan Hubicka Committed by Jan Hubicka

tree-sra.c (convert_callers): Use call_for_symbol_and_aliases.


	* tree-sra.c (convert_callers): Use call_for_symbol_and_aliases.
	(struct ipa_sra_check_caller_data): Add has_thunk field.
	(ipa_sra_check_caller): Check for thunk.
	(ipa_sra_preliminary_function_checks): Give up on function with
	thunks.
	(ipa_early_sra): Use call_for_symbol_and_aliases.

From-SVN: r221171
parent e7dbcbc3
2015-03-03 Jan Hubicka <hubicka@ucw.cz>
* tree-sra.c (convert_callers): Use call_for_symbol_and_aliases.
(struct ipa_sra_check_caller_data): Add has_thunk field.
(ipa_sra_check_caller): Check for thunk.
(ipa_sra_preliminary_function_checks): Give up on function with
thunks.
(ipa_early_sra): Use call_for_symbol_and_aliases.
2015-03-03 Kaz Kojima <kkojima@gcc.gnu.org> 2015-03-03 Kaz Kojima <kkojima@gcc.gnu.org>
PR target/65249 PR target/65249
......
...@@ -4947,7 +4947,7 @@ convert_callers (struct cgraph_node *node, tree old_decl, ...@@ -4947,7 +4947,7 @@ convert_callers (struct cgraph_node *node, tree old_decl,
{ {
basic_block this_block; basic_block this_block;
node->call_for_symbol_thunks_and_aliases (convert_callers_for_node, node->call_for_symbol_and_aliases (convert_callers_for_node,
&adjustments, false); &adjustments, false);
if (!encountered_recursive_call) if (!encountered_recursive_call)
...@@ -5016,6 +5016,7 @@ struct ipa_sra_check_caller_data ...@@ -5016,6 +5016,7 @@ struct ipa_sra_check_caller_data
{ {
bool has_callers; bool has_callers;
bool bad_arg_alignment; bool bad_arg_alignment;
bool has_thunk;
}; };
/* If NODE has a caller, mark that fact in DATA which is pointer to /* If NODE has a caller, mark that fact in DATA which is pointer to
...@@ -5035,6 +5036,11 @@ ipa_sra_check_caller (struct cgraph_node *node, void *data) ...@@ -5035,6 +5036,11 @@ ipa_sra_check_caller (struct cgraph_node *node, void *data)
for (cgraph_edge *cs = node->callers; cs; cs = cs->next_caller) for (cgraph_edge *cs = node->callers; cs; cs = cs->next_caller)
{ {
if (cs->caller->thunk.thunk_p)
{
iscc->has_thunk = true;
return true;
}
gimple call_stmt = cs->call_stmt; gimple call_stmt = cs->call_stmt;
unsigned count = gimple_call_num_args (call_stmt); unsigned count = gimple_call_num_args (call_stmt);
for (unsigned i = 0; i < count; i++) for (unsigned i = 0; i < count; i++)
...@@ -5131,7 +5137,7 @@ ipa_sra_preliminary_function_checks (struct cgraph_node *node) ...@@ -5131,7 +5137,7 @@ ipa_sra_preliminary_function_checks (struct cgraph_node *node)
struct ipa_sra_check_caller_data iscc; struct ipa_sra_check_caller_data iscc;
memset (&iscc, 0, sizeof(iscc)); memset (&iscc, 0, sizeof(iscc));
node->call_for_symbol_thunks_and_aliases (ipa_sra_check_caller, &iscc, true); node->call_for_symbol_and_aliases (ipa_sra_check_caller, &iscc, true);
if (!iscc.has_callers) if (!iscc.has_callers)
{ {
if (dump_file) if (dump_file)
...@@ -5148,6 +5154,14 @@ ipa_sra_preliminary_function_checks (struct cgraph_node *node) ...@@ -5148,6 +5154,14 @@ ipa_sra_preliminary_function_checks (struct cgraph_node *node)
return false; return false;
} }
if (iscc.has_thunk)
{
if (dump_file)
fprintf (dump_file,
"A has thunk.\n");
return false;
}
return true; return true;
} }
...@@ -5173,7 +5187,7 @@ ipa_early_sra (void) ...@@ -5173,7 +5187,7 @@ ipa_early_sra (void)
goto simple_out; goto simple_out;
} }
if (node->call_for_symbol_thunks_and_aliases if (node->call_for_symbol_and_aliases
(some_callers_have_mismatched_arguments_p, NULL, true)) (some_callers_have_mismatched_arguments_p, NULL, true))
{ {
if (dump_file) if (dump_file)
...@@ -5182,7 +5196,7 @@ ipa_early_sra (void) ...@@ -5182,7 +5196,7 @@ ipa_early_sra (void)
goto simple_out; goto simple_out;
} }
if (node->call_for_symbol_thunks_and_aliases if (node->call_for_symbol_and_aliases
(some_callers_have_no_vuse_p, NULL, true)) (some_callers_have_no_vuse_p, NULL, true))
{ {
if (dump_file) if (dump_file)
......
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