This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/33723] New: [4.1/4.2/4.3 Regression] Inefficient code with compound literals
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 10 Oct 2007 10:31:15 -0000
- Subject: [Bug tree-optimization/33723] New: [4.1/4.2/4.3 Regression] Inefficient code with compound literals
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
At -O2 we should IMNSHO generate the same code for all 3 functions:
typedef union
{
struct
{
int f1, f2, f3, f4, f5, f6, f7, f8;
long int f9, f10;
int f11;
} f;
char s[56];
long int a;
} T;
void
foo (void)
{
T t;
t = (T) { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
test (&t);
}
void
bar (void)
{
T t = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
test (&t);
}
void
baz (void)
{
T t;
t = (const T) { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
test (&t);
}
as nothing took the address of the compound literals, it was only used as
initializer to some other variable. But instead foo/baz clear a temporary
(compound literal var) and then copy it over. This is at least partly a
regression from 3.2.x which cleared both the compound literal variable (wasn't
able to DSE it) and the t variable.
Without a union we generate better code:
typedef struct
{
int f1, f2, f3, f4, f5, f6, f7, f8;
long int f9, f10;
int f11;
} T;
void
foo (void)
{
T t;
t = (T) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
test (&t);
}
void
bar (void)
{
T t = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
test (&t);
}
void
baz (void)
{
T t;
t = (const T) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
test (&t);
}
but still bar uses on x86_64-linux rep stosq, while the other functions
store it by pieces.
--
Summary: [4.1/4.2/4.3 Regression] Inefficient code with compound
literals
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jakub at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33723