-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Closed
Labels
Description
Bugzilla Link | 964 |
Resolution | FIXED |
Resolved on | Feb 22, 2010 12:41 |
Version | 1.8 |
OS | All |
Extended Description
Consider this function (very similar to strhr):
void foo(unsigned char C);
const char *FindChar(const char *CurPtr) {
unsigned char C;
do
C = *CurPtr++;
while (C != 'x' && C != '\0');
foo(C);
return CurPtr;
}
We currently compile the loop to:
LBB1_1: #bb
movb (%esi), %al
incl %esi
cmpb $119, %al
jg LBB1_4 #bb
LBB1_3: #bb
testb %al, %al
je LBB1_2 #bb7
jmp LBB1_1 #bb
LBB1_4: #bb
cmpb $120, %al
jne LBB1_1 #bb
It seems that switch lowering could produce something like:
cmpb $120, %al
je out
testb %al, %al
jnz LBB1_1 #bb7
which would be much faster.
-Chris