// A contrived example to test the double jump removal peephole.
extern "C" unsigned long bar(unsigned long count) {
return count + 1;
}
unsigned long foo(unsigned long count) {
asm(
" cmpq $1,%0\n"
" je .L7\n"
" incq %0\n"
" jmp .L1\n"
".L1: jmp .L2\n"
".L2: incq %0\n"
" cmpq $2,%0\n"
" jne .L3\n"
" jmp .L4\n"
".L3: jmp .L5\n"
".L5: incq %0\n"
".L4: movq %0,%%rdi\n"
" pop %%rbp\n"
" jmp .L6\n"
".L7: pop %%rbp\n"
" incq %0\n"
" jmp .L6\n"
".L6: jmp bar\n"
:
: "m"(count)
);
return count;
}
int main(int argc, const char* argv[]) {
return foo(38);
}