mirror of git://gcc.gnu.org/git/gcc.git
tree-sra.c (ipa_sra_preliminary_function_checks): Use DECL_ONE_ONLY to check if decl is one only.
* tree-sra.c (ipa_sra_preliminary_function_checks): Use DECL_ONE_ONLY to check if decl is one only. * ipa-split.c (consider_split): Limit splitt of one only functions. From-SVN: r221466
This commit is contained in:
parent
f8c29d9839
commit
7a161d5be3
|
|
@ -1,3 +1,9 @@
|
|||
2015-03-16 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* tree-sra.c (ipa_sra_preliminary_function_checks): Use
|
||||
DECL_ONE_ONLY to check if decl is one only.
|
||||
* ipa-split.c (consider_split): Limit splitt of one only functions.
|
||||
|
||||
2015-03-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/65427
|
||||
|
|
|
|||
|
|
@ -598,6 +598,31 @@ consider_split (struct split_point *current, bitmap non_ssa_vars,
|
|||
return;
|
||||
}
|
||||
|
||||
/* Splitting functions brings the target out of comdat group; this will
|
||||
lead to code duplication if the function is reused by other unit.
|
||||
Limit this duplication. This is consistent with limit in tree-sra.c
|
||||
FIXME: with LTO we ought to be able to do better! */
|
||||
if (DECL_ONE_ONLY (current_function_decl)
|
||||
&& current->split_size >= (unsigned int) MAX_INLINE_INSNS_AUTO)
|
||||
{
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
fprintf (dump_file,
|
||||
" Refused: function is COMDAT and tail is too large\n");
|
||||
return;
|
||||
}
|
||||
/* For comdat functions also reject very small tails; those will likely get
|
||||
inlined back and we do not want to risk the duplication overhead.
|
||||
FIXME: with LTO we ought to be able to do better! */
|
||||
if (DECL_ONE_ONLY (current_function_decl)
|
||||
&& current->split_size
|
||||
<= (unsigned int) PARAM_VALUE (PARAM_EARLY_INLINING_INSNS) / 2)
|
||||
{
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
fprintf (dump_file,
|
||||
" Refused: function is COMDAT and tail is too small\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* FIXME: we currently can pass only SSA function parameters to the split
|
||||
arguments. Once parm_adjustment infrastructure is supported by cloning,
|
||||
we can pass more than that. */
|
||||
|
|
|
|||
|
|
@ -5109,7 +5109,7 @@ ipa_sra_preliminary_function_checks (struct cgraph_node *node)
|
|||
return false;
|
||||
}
|
||||
|
||||
if ((DECL_COMDAT (node->decl) || DECL_EXTERNAL (node->decl))
|
||||
if ((DECL_ONE_ONLY (node->decl) || DECL_EXTERNAL (node->decl))
|
||||
&& inline_summaries->get (node)->size >= MAX_INLINE_INSNS_AUTO)
|
||||
{
|
||||
if (dump_file)
|
||||
|
|
|
|||
Loading…
Reference in New Issue