[Bug middle-end/45058] New: GCC doesn't create functions with multiple entry points.
svfuerst at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sat Jul 24 18:13:00 GMT 2010
A possible optimization in some cases is to construct a function with multiple
entry points. This can save in both size and speed in certain cases.
#include <stdio.h>
/* Example function that does something complex enough not to be optimized away
*/
static foo(int x)
{
int i;
int j = x;
for (i = 0; i < 1024; i++)
{
j += printf("%d%d%d\n", i);
}
return j;
}
/* Since foo is static and whose address is never taken, foo1 can have the same
address as foo. */
int foo1(int x)
{
return foo(x);
}
/* This function could point to an "add $1, %rdi" instruction immediately
before foo. (Giving foo two entry points.) */
int foo2(int x)
{
return foo(x + 1);
}
At the moment, GCC will at -O3 construct two cloned versions of foo for foo1
and foo2. At -Os, it will jump to foo in foo1 and foo2. With multiple entry
points, the code can be as fast as generated for -O3 but be half the size,
slightly smaller than the current -Os.
--
Summary: GCC doesn't create functions with multiple entry points.
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: svfuerst at gmail dot com
GCC build triplet: x86_64-linux
GCC host triplet: x86_64-linux
GCC target triplet: x86_64-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45058
More information about the Gcc-bugs
mailing list