Commit fe6c4dc4 by Martin Liska Committed by Martin Liska

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