Skip to content

switch lowering makes ugly code for a simple scanning loop #1336

@lattner

Description

@lattner
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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions