int test1( char * buffer ) {
int i = 0;
while ( buffer[i] != '\n' ) i++;
return i;
}
int test2( char * buffer ) {
int i = -1;
while ( buffer[++i] != '\n' ) ;
return i;
}
-O2 -fomit-frame-pointer -fno-stack-protector
clang 3.0
test1(char*): # @test1(char*)
.Ltmp28:
xorl %eax, %eax
cmpb $10, (%rdi)
je .LBB5_3
xorl %eax, %eax
.LBB5_2: # %.lr.ph
cmpb $10, 1(%rdi,%rax)
leaq 1(%rax), %rax
jne .LBB5_2
.LBB5_3: # %._crit_edge
ret
test2(char*): # @test2(char*)
.Ltmp31:
xorl %eax, %eax
.LBB6_1: # =>This Inner Loop Header: Depth=1
cmpb $10, (%rdi,%rax)
leaq 1(%rax), %rax
jne .LBB6_1
decl %eax
ret
g++ 4.7
test1(char*):
.LFB36:
cmpb $10, (%rdi)
je .L26
addq $1, %rdi
xorl %eax, %eax
.L25:
addq $1, %rdi
addl $1, %eax
cmpb $10, -1(%rdi)
jne .L25
rep
ret
.L26:
xorl %eax, %eax
ret
.LFE36:
test2(char*):
.LFB37:
xorl %edx, %edx
.L29:
movl %edx, %eax
addq $1, %rdx
cmpb $10, -1(%rdi,%rdx)
jne .L29
rep
ret
.LFE37: