[Bug c++/42233] New: c++ builtin_expect code generation regression
gmorin1 at bloomberg dot net
gcc-bugzilla@gcc.gnu.org
Mon Nov 30 16:43:00 GMT 2009
The following c/++ code generates assembly that favors the unlikely case with
gcc 4.3 and 4.4:
extern void likely();
extern void unlikely();
void test_expect(char * a, char *b, char *c, char *d) {
if (__builtin_expect(!!(a == b && c == d), 1)) {
likely();
}
else {
unlikely();
}
}
Compiled with g++44 -O2 -S -fverbose-asm -m32. (or -m64).
A few notes: gcc 4.1 seems to generate better assembly. If this code is code
is compiled as c code and not C++ with gcc 4.4, the likely case is properly
favored.
Changing the if statement into "if (__builtin_expect(!!(a == b),1) &&
__builtin_expect(!!(c == d), 1))" fixes the problem as well. With this code,
gcc generates better code for the likely case.
--
Summary: c++ builtin_expect code generation regression
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: gmorin1 at bloomberg dot net
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42233
More information about the Gcc-bugs
mailing list