Search code examples
c++optimizationcompiler-construction

Do Compilers Un-Inline?


It is fairly common knowledge that the most powerful tool in a compilers tool-belt is the inlining of functions into their call sites. But what about doing the reverse? If so, is it done? And when? For example given:

void foo(int x)
{
  auto y = bar(x);
  baz(y);
}

void bop()
{
  int x;
  auto y = bar(x);
  baz(y);
}

Does it ever make sense for the compiler to abstract this out to

void qux(int x)
{
  auto y = bar(x);
  baz(y);
}

void foo(int x)
{
  qux(x);
}

void bop()
{
  int x;
  qux(x);
}

Solution

  • Yes, for example LLVM has a MachineOutliner optimization pass.