1*19fb5a21SVladislav Khmelevsky // A contrived example to test the double jump removal peephole. 2f808ea00SAmir Ayupov bar(unsigned long count)3f808ea00SAmir Ayupovextern "C" unsigned long bar(unsigned long count) { 4f808ea00SAmir Ayupov return count + 1; 5f808ea00SAmir Ayupov } 6f808ea00SAmir Ayupov foo(unsigned long count)7f808ea00SAmir Ayupovunsigned 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 Ayupovint main(int argc, const char* argv[]) { 34f808ea00SAmir Ayupov return foo(38); 35f808ea00SAmir Ayupov } 36