Implement -fopt-info support for IPA ICF.
2019-08-09 Martin Liska <mliska@suse.cz> * ipa-icf.c (sem_function::merge): Define AUTO_DUMP_SCOPE and use dump_printf to report optimization. (sem_variable::merge): Likwise. (sem_item_optimizer::merge_classes): Use dump_printf to report ICF hits. 2019-08-09 Martin Liska <mliska@suse.cz> * g++.dg/ipa/ipa-icf-2.C: Add -optimized to -fdump-ipa-icf. * g++.dg/ipa/ipa-icf-3.C: Likewise. * g++.dg/ipa/ipa-icf-4.C: Likewise. * g++.dg/ipa/ipa-icf-6.C: Likewise. * gcc.dg/ipa/ipa-icf-1.c: Likewise. * gcc.dg/ipa/ipa-icf-10.c: Likewise. * gcc.dg/ipa/ipa-icf-11.c: Likewise. * gcc.dg/ipa/ipa-icf-12.c: Likewise. * gcc.dg/ipa/ipa-icf-13.c: Likewise. * gcc.dg/ipa/ipa-icf-16.c: Likewise. * gcc.dg/ipa/ipa-icf-18.c: Likewise. * gcc.dg/ipa/ipa-icf-2.c: Likewise. * gcc.dg/ipa/ipa-icf-20.c: Likewise. * gcc.dg/ipa/ipa-icf-21.c: Likewise. * gcc.dg/ipa/ipa-icf-23.c: Likewise. * gcc.dg/ipa/ipa-icf-25.c: Likewise. * gcc.dg/ipa/ipa-icf-26.c: Likewise. * gcc.dg/ipa/ipa-icf-27.c: Likewise. * gcc.dg/ipa/ipa-icf-3.c: Likewise. * gcc.dg/ipa/ipa-icf-35.c: Likewise. * gcc.dg/ipa/ipa-icf-36.c: Likewise. * gcc.dg/ipa/ipa-icf-37.c: Likewise. * gcc.dg/ipa/ipa-icf-38.c: Likewise. * gcc.dg/ipa/ipa-icf-39.c: Likewise. * gcc.dg/ipa/ipa-icf-5.c: Likewise. * gcc.dg/ipa/ipa-icf-7.c: Likewise. * gcc.dg/ipa/ipa-icf-8.c: Likewise. * gcc.dg/ipa/ipa-icf-merge-1.c: Likewise. * gcc.dg/ipa/pr64307.c: Likewise. * gcc.dg/ipa/pr90555.c: Likewise. From-SVN: r274230
This commit is contained in:
parent
c220ecd21b
commit
fe6c4dc419
33 changed files with 185 additions and 124 deletions
|
@ -1,3 +1,11 @@
|
|||
2019-08-09 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* ipa-icf.c (sem_function::merge): Define AUTO_DUMP_SCOPE and
|
||||
use dump_printf to report optimization.
|
||||
(sem_variable::merge): Likwise.
|
||||
(sem_item_optimizer::merge_classes): Use dump_printf to report
|
||||
ICF hits.
|
||||
|
||||
2019-08-09 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* value-prof.c (gimple_divmod_fixed_value_transform):
|
||||
|
|
208
gcc/ipa-icf.c
208
gcc/ipa-icf.c
|
@ -1024,20 +1024,23 @@ sem_function::merge (sem_item *alias_item)
|
|||
bool original_address_matters = original->address_matters_p ();
|
||||
bool alias_address_matters = alias->address_matters_p ();
|
||||
|
||||
AUTO_DUMP_SCOPE ("merge",
|
||||
dump_user_location_t::from_function_decl (decl));
|
||||
|
||||
if (DECL_EXTERNAL (alias->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; alias is external.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; alias is external.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DECL_NO_INLINE_WARNING_P (original->decl)
|
||||
!= DECL_NO_INLINE_WARNING_P (alias->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not unifying; "
|
||||
"DECL_NO_INLINE_WARNING mismatch.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; DECL_NO_INLINE_WARNING mismatch.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1047,21 +1050,20 @@ sem_function::merge (sem_item *alias_item)
|
|||
|| (DECL_SECTION_NAME (alias->decl) && !alias->implicit_section))
|
||||
&& DECL_SECTION_NAME (original->decl) != DECL_SECTION_NAME (alias->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not unifying; "
|
||||
"original and alias are in different sections.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; "
|
||||
"original and alias are in different sections.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!original->in_same_comdat_group_p (alias)
|
||||
|| original->comdat_local_p ())
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not unifying; alias nor wrapper cannot be created; "
|
||||
"across comdat group boundary\n\n");
|
||||
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; alias nor wrapper cannot be created; "
|
||||
"across comdat group boundary\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1106,10 +1108,10 @@ sem_function::merge (sem_item *alias_item)
|
|||
if (!sem_item::compare_referenced_symbol_properties (NULL, original, alias,
|
||||
alias->address_taken))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Wrapper cannot be created because referenced symbol "
|
||||
"properties mismatch\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Wrapper cannot be created because referenced symbol "
|
||||
"properties mismatch\n");
|
||||
}
|
||||
/* Do not turn function in one comdat group into wrapper to another
|
||||
comdat group. Other compiler producing the body of the
|
||||
|
@ -1120,40 +1122,41 @@ sem_function::merge (sem_item *alias_item)
|
|||
&& (DECL_COMDAT_GROUP (alias->decl)
|
||||
!= DECL_COMDAT_GROUP (original->decl)))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Wrapper cannot be created because of COMDAT\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Wrapper cannot be created because of COMDAT\n");
|
||||
}
|
||||
else if (DECL_STATIC_CHAIN (alias->decl)
|
||||
|| DECL_STATIC_CHAIN (original->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Cannot create wrapper of nested function.\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Cannot create wrapper of nested function.\n");
|
||||
}
|
||||
/* TODO: We can also deal with variadic functions never calling
|
||||
VA_START. */
|
||||
else if (stdarg_p (TREE_TYPE (alias->decl)))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"cannot create wrapper of stdarg function.\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"cannot create wrapper of stdarg function.\n");
|
||||
}
|
||||
else if (ipa_fn_summaries
|
||||
&& ipa_fn_summaries->get (alias) != NULL
|
||||
&& ipa_fn_summaries->get (alias)->self_size <= 2)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Wrapper creation is not "
|
||||
"profitable (function is too small).\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION, "Wrapper creation is not "
|
||||
"profitable (function is too small).\n");
|
||||
}
|
||||
/* If user paid attention to mark function noinline, assume it is
|
||||
somewhat special and do not try to turn it into a wrapper that
|
||||
cannot be undone by inliner. */
|
||||
else if (lookup_attribute ("noinline", DECL_ATTRIBUTES (alias->decl)))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Wrappers are not created for noinline.\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Wrappers are not created for noinline.\n");
|
||||
}
|
||||
else
|
||||
create_wrapper = true;
|
||||
|
@ -1171,9 +1174,10 @@ sem_function::merge (sem_item *alias_item)
|
|||
|
||||
if (!redirect_callers && !create_wrapper)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; cannot redirect callers nor "
|
||||
"produce wrapper\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; cannot redirect callers nor "
|
||||
"produce wrapper\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1202,17 +1206,18 @@ sem_function::merge (sem_item *alias_item)
|
|||
redirect_callers = false;
|
||||
if (!local_original)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; "
|
||||
"cannot produce local alias.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; cannot produce local alias.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!redirect_callers && !create_wrapper)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; "
|
||||
"cannot redirect callers nor produce a wrapper\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; "
|
||||
"cannot redirect callers nor produce a wrapper\n");
|
||||
return false;
|
||||
}
|
||||
if (!create_wrapper
|
||||
|
@ -1220,9 +1225,10 @@ sem_function::merge (sem_item *alias_item)
|
|||
NULL, true)
|
||||
&& !alias->can_remove_if_no_direct_calls_p ())
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; cannot make wrapper and "
|
||||
"function has other uses than direct calls\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; cannot make wrapper and "
|
||||
"function has other uses than direct calls\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -1238,9 +1244,10 @@ sem_function::merge (sem_item *alias_item)
|
|||
alias->icf_merged = true;
|
||||
local_original->icf_merged = true;
|
||||
|
||||
if (dump_file && nredirected)
|
||||
fprintf (dump_file, "%i local calls have been "
|
||||
"redirected.\n", nredirected);
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_NOTE,
|
||||
"%i local calls have been "
|
||||
"redirected.\n", nredirected);
|
||||
}
|
||||
|
||||
/* If all callers was redirected, do not produce wrapper. */
|
||||
|
@ -1272,8 +1279,9 @@ sem_function::merge (sem_item *alias_item)
|
|||
original->call_for_symbol_thunks_and_aliases
|
||||
(set_local, (void *)(size_t) original->local_p (), true);
|
||||
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Unified; Function alias has been created.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_OPTIMIZED_LOCATIONS,
|
||||
"Unified; Function alias has been created.\n");
|
||||
}
|
||||
if (create_wrapper)
|
||||
{
|
||||
|
@ -1285,8 +1293,9 @@ sem_function::merge (sem_item *alias_item)
|
|||
ipa_merge_profiles (original, alias, true);
|
||||
alias->create_wrapper (local_original);
|
||||
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Unified; Wrapper has been created.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_OPTIMIZED_LOCATIONS,
|
||||
"Unified; Wrapper has been created.\n");
|
||||
}
|
||||
|
||||
/* It's possible that redirection can hit thunks that block
|
||||
|
@ -1299,8 +1308,8 @@ sem_function::merge (sem_item *alias_item)
|
|||
on this optimization. */
|
||||
if (original->merged_comdat && !alias->merged_comdat)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Dropping merged_comdat flag.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_NOTE, "Dropping merged_comdat flag.\n");
|
||||
if (local_original)
|
||||
local_original->merged_comdat = false;
|
||||
original->merged_comdat = false;
|
||||
|
@ -1313,8 +1322,9 @@ sem_function::merge (sem_item *alias_item)
|
|||
alias->reset ();
|
||||
alias->body_removed = true;
|
||||
alias->icf_merged = true;
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Unified; Function body was removed.\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_OPTIMIZED_LOCATIONS,
|
||||
"Unified; Function body was removed.\n");
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -2085,18 +2095,21 @@ sem_variable::merge (sem_item *alias_item)
|
|||
{
|
||||
gcc_assert (alias_item->type == VAR);
|
||||
|
||||
AUTO_DUMP_SCOPE ("merge",
|
||||
dump_user_location_t::from_function_decl (decl));
|
||||
if (!sem_item::target_supports_symbol_aliases_p ())
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; "
|
||||
"Symbol aliases are not supported by target\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION, "Not unifying; "
|
||||
"Symbol aliases are not supported by target\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DECL_EXTERNAL (alias_item->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; alias is external.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; alias is external.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -2128,9 +2141,9 @@ sem_variable::merge (sem_item *alias_item)
|
|||
if (DECL_IN_CONSTANT_POOL (alias->decl)
|
||||
|| DECL_IN_CONSTANT_POOL (original->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not unifying; constant pool variables.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; constant pool variables.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -2140,45 +2153,48 @@ sem_variable::merge (sem_item *alias_item)
|
|||
|| (DECL_SECTION_NAME (alias->decl) && !alias->implicit_section))
|
||||
&& DECL_SECTION_NAME (original->decl) != DECL_SECTION_NAME (alias->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not unifying; "
|
||||
"original and alias are in different sections.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; "
|
||||
"original and alias are in different sections.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* We cannot merge if address comparsion metters. */
|
||||
if (alias_address_matters && flag_merge_constants < 2)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not unifying; address of original may be compared.\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; address of original may be compared.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DECL_ALIGN (original->decl) < DECL_ALIGN (alias->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; "
|
||||
"original and alias have incompatible alignments\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; "
|
||||
"original and alias have incompatible alignments\n");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DECL_COMDAT_GROUP (original->decl) != DECL_COMDAT_GROUP (alias->decl))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; alias cannot be created; "
|
||||
"across comdat group boundary\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; alias cannot be created; "
|
||||
"across comdat group boundary\n");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (original_discardable)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not unifying; alias cannot be created; "
|
||||
"target is discardable\n\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_MISSED_OPTIMIZATION,
|
||||
"Not unifying; alias cannot be created; "
|
||||
"target is discardable\n");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -2199,8 +2215,9 @@ sem_variable::merge (sem_item *alias_item)
|
|||
varpool_node::create_alias (alias_var->decl, decl);
|
||||
alias->resolve_alias (original);
|
||||
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Unified; Variable alias has been created.\n");
|
||||
if (dump_enabled_p ())
|
||||
dump_printf (MSG_OPTIMIZED_LOCATIONS,
|
||||
"Unified; Variable alias has been created.\n");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -3477,23 +3494,26 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count)
|
|||
if (alias == source)
|
||||
continue;
|
||||
|
||||
if (dump_file)
|
||||
dump_user_location_t loc
|
||||
= dump_user_location_t::from_function_decl (source->decl);
|
||||
if (dump_enabled_p ())
|
||||
{
|
||||
fprintf (dump_file, "Semantic equality hit:%s->%s\n",
|
||||
xstrdup_for_dump (source->node->name ()),
|
||||
xstrdup_for_dump (alias->node->name ()));
|
||||
fprintf (dump_file, "Assembler symbol names:%s->%s\n",
|
||||
xstrdup_for_dump (source->node->asm_name ()),
|
||||
xstrdup_for_dump (alias->node->asm_name ()));
|
||||
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||
"Semantic equality hit:%s->%s\n",
|
||||
xstrdup_for_dump (source->node->name ()),
|
||||
xstrdup_for_dump (alias->node->name ()));
|
||||
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||
"Assembler symbol names:%s->%s\n",
|
||||
xstrdup_for_dump (source->node->asm_name ()),
|
||||
xstrdup_for_dump (alias->node->asm_name ()));
|
||||
}
|
||||
|
||||
if (lookup_attribute ("no_icf", DECL_ATTRIBUTES (alias->decl)))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Merge operation is skipped due to no_icf "
|
||||
"attribute.\n\n");
|
||||
|
||||
if (dump_enabled_p ())
|
||||
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||
"Merge operation is skipped due to no_icf "
|
||||
"attribute.\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,36 @@
|
|||
2019-08-09 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* g++.dg/ipa/ipa-icf-2.C: Add -optimized to -fdump-ipa-icf.
|
||||
* g++.dg/ipa/ipa-icf-3.C: Likewise.
|
||||
* g++.dg/ipa/ipa-icf-4.C: Likewise.
|
||||
* g++.dg/ipa/ipa-icf-6.C: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-1.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-10.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-11.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-12.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-13.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-16.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-18.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-2.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-20.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-21.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-23.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-25.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-26.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-27.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-3.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-35.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-36.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-37.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-38.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-39.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-5.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-7.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-8.c: Likewise.
|
||||
* gcc.dg/ipa/ipa-icf-merge-1.c: Likewise.
|
||||
* gcc.dg/ipa/pr64307.c: Likewise.
|
||||
* gcc.dg/ipa/pr90555.c: Likewise.
|
||||
|
||||
2019-08-09 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* g++.dg/tree-prof/indir-call-prof.C: Add -optimize
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
class A
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
__attribute__ ((noinline))
|
||||
int zero()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf -fno-inline" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized -fno-inline" } */
|
||||
|
||||
namespace {
|
||||
struct A
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O3 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O3 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
struct A {
|
||||
A() {ptr=&b;}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
int ferda(int x, int y) __attribute__ ((pure));
|
||||
int funkce(int a, int b) __attribute__ ((pure));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
__attribute__ ((noinline))
|
||||
int fce(int a, int b)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized-all-all" } */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
__attribute__ ((noinline))
|
||||
int foo(int x)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#include <math.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
||||
/* { dg-options "-O2 -msse2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -msse2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#include <xmmintrin.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
struct A
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized-all" } */
|
||||
|
||||
static int zip();
|
||||
static int zap();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
void destroy (void)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf -fno-inline" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized -fno-inline" } */
|
||||
|
||||
void destroy (void)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
typedef int v4si __attribute__ ((vector_size (16)));
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized-all-all" } */
|
||||
|
||||
void f1()
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf -fmerge-all-constants" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized-all-all-all-all -fmerge-all-constants" } */
|
||||
static int a;
|
||||
static int b;
|
||||
static const int c = 2;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized-all-all-all-all" } */
|
||||
static int a;
|
||||
static int b;
|
||||
static const int c = 2;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do link } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf -flto -fdump-tree-optimized" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized -flto -fdump-tree-optimized" } */
|
||||
/* { dg-require-effective-target lto } */
|
||||
/* { dg-additional-sources "ipa-icf-38a.c" }*/
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-alias "" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf -fmerge-all-constants -fdbg-cnt=merged_ipa_icf:1:3" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized -fmerge-all-constants -fdbg-cnt=merged_ipa_icf:1:3" } */
|
||||
/* { dg-prune-output "dbg_cnt 'merged_ipa_icf' set to 1-3" } */
|
||||
/* { dg-prune-output "\\*\\*\\*dbgcnt:.*limit.*reached" } */
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target c99_runtime } } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
/* { dg-add-options c99_runtime } */
|
||||
|
||||
#include <complex.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target c99_runtime } } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
/* { dg-add-options c99_runtime } */
|
||||
|
||||
#include <complex.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-O2 -fdump-ipa-icf" } */
|
||||
/* { dg-additional-options "-O2 -fdump-ipa-icf-optimized" } */
|
||||
|
||||
/* Picking 'main' as a candiate target for equivalent functios is not a
|
||||
good idea. */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target c99_runtime } } */
|
||||
/* { dg-options "-O0 -fipa-icf -fdump-ipa-icf" } */
|
||||
/* { dg-options "-O0 -fipa-icf -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#include <complex.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
||||
/* { dg-options "-fopenmp-simd -O2 -mavx512f -fdump-ipa-icf" } */
|
||||
/* { dg-options "-fopenmp-simd -O2 -mavx512f -fdump-ipa-icf-optimized" } */
|
||||
|
||||
#define N 1024
|
||||
int a[N];
|
||||
|
|
Loading…
Add table
Reference in a new issue