[Bug rtl-optimization/56711] New: spectaculary bad code generated for __uint128_t
felix-gcc at fefe dot de
gcc-bugzilla@gcc.gnu.org
Sun Mar 24 15:30:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56711
Bug #: 56711
Summary: spectaculary bad code generated for __uint128_t
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: felix-gcc@fefe.de
Consider this function:
size_t scan_ulong(const char* src,unsigned long int* dest) {
register const char *tmp=src;
register unsigned long int l=0;
register unsigned char c;
while ((c=*tmp-'0')<10) {
__uint128_t x=(__uint128_t)l*10+c;
if ((unsigned long)x != x) break;
l=(unsigned long)x;
++tmp;
}
if (tmp-src) *dest=l;
return tmp-src;
}
I'm compiling this with gcc -Os -c test.c on an amd64-linux box.
The code gcc generates is 92 bytes long, the one from clang only 65. What is
happening here? What are all that code doing that gcc is generating there?
More information about the Gcc-bugs
mailing list