1*19fb5a21SVladislav Khmelevsky // A contrived example to test the double jump removal peephole.
2f808ea00SAmir Ayupov 
bar(unsigned long count)3f808ea00SAmir Ayupov extern "C" unsigned long bar(unsigned long count) {
4f808ea00SAmir Ayupov   return count + 1;
5f808ea00SAmir Ayupov }
6f808ea00SAmir Ayupov 
foo(unsigned long count)7f808ea00SAmir Ayupov unsigned long foo(unsigned long count) {
8f808ea00SAmir Ayupov   asm(
9f808ea00SAmir Ayupov       "     cmpq  $1,%0\n"
10f808ea00SAmir Ayupov       "     je    .L7\n"
11f808ea00SAmir Ayupov       "     incq  %0\n"
12f808ea00SAmir Ayupov       "     jmp   .L1\n"
13f808ea00SAmir Ayupov       ".L1: jmp   .L2\n"
14f808ea00SAmir Ayupov       ".L2: incq  %0\n"
15f808ea00SAmir Ayupov       "     cmpq  $2,%0\n"
16f808ea00SAmir Ayupov       "     jne   .L3\n"
17f808ea00SAmir Ayupov       "     jmp   .L4\n"
18f808ea00SAmir Ayupov       ".L3: jmp   .L5\n"
19f808ea00SAmir Ayupov       ".L5: incq  %0\n"
20f808ea00SAmir Ayupov       ".L4: movq  %0,%%rdi\n"
21f808ea00SAmir Ayupov       "     pop   %%rbp\n"
22f808ea00SAmir Ayupov       "     jmp   .L6\n"
23f808ea00SAmir Ayupov       ".L7: pop   %%rbp\n"
24f808ea00SAmir Ayupov       "     incq  %0\n"
25f808ea00SAmir Ayupov       "     jmp   .L6\n"
26f808ea00SAmir Ayupov       ".L6: jmp   bar\n"
27f808ea00SAmir Ayupov       :
28f808ea00SAmir Ayupov       : "m"(count)
29f808ea00SAmir Ayupov       );
30f808ea00SAmir Ayupov   return count;
31f808ea00SAmir Ayupov }
32f808ea00SAmir Ayupov 
main(int argc,const char * argv[])33f808ea00SAmir Ayupov int main(int argc, const char* argv[]) {
34f808ea00SAmir Ayupov   return foo(38);
35f808ea00SAmir Ayupov }
36