ipa/103989 - avoid IPA inlining of small functions with -Og
The following change avoids doing IPA inlining of small functions into functions compiled with -Og - those functions will see almost no followup scalar cleanups so that the benefit anticipated by the inliner will not be realized and instead the late diagnostic code will be confused by dead code that is left around. 2022-01-18 Richard Biener <rguenther@suse.de> PR ipa/103989 * ipa-inline.cc (inline_small_functions): Do not enqueue call edges originating in functions compiled with -Og. * g++.dg/opt/pr103989.C: New testcase.
This commit is contained in:
parent
e89b2a270d
commit
c952126870
@ -2029,7 +2029,12 @@ inline_small_functions (void)
|
||||
struct cgraph_edge *next = NULL;
|
||||
bool has_speculative = false;
|
||||
|
||||
if (!opt_for_fn (node->decl, optimize))
|
||||
if (!opt_for_fn (node->decl, optimize)
|
||||
/* With -Og we do not want to perform IPA inlining of small
|
||||
functions since there are no scalar cleanups after it
|
||||
that would realize the anticipated win. All abstraction
|
||||
is removed during early inlining. */
|
||||
|| opt_for_fn (node->decl, optimize_debug))
|
||||
continue;
|
||||
|
||||
if (dump_file)
|
||||
|
30
gcc/testsuite/g++.dg/opt/pr103989.C
Normal file
30
gcc/testsuite/g++.dg/opt/pr103989.C
Normal file
@ -0,0 +1,30 @@
|
||||
// { dg-require-effective-target c++17 }
|
||||
// { dg-options "-Og -Wall" }
|
||||
|
||||
#include <optional>
|
||||
#include <memory>
|
||||
|
||||
struct A {
|
||||
A (int a) : a {a}
|
||||
{}
|
||||
|
||||
const std::shared_ptr <int> x;
|
||||
int a;
|
||||
};
|
||||
|
||||
class B
|
||||
{
|
||||
public:
|
||||
B (const std::optional <A>& a)
|
||||
: a {a}
|
||||
{
|
||||
}
|
||||
public:
|
||||
const std::optional <A> a;
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
B b {std::nullopt};
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user