xref: /llvm-project/bolt/test/X86/double-jump.test (revision 003b48e0cbbb69a9a1ca9ff1a6d3bda30d0c6121)
111791ae7SSayhaan Siddiqui## Test the double jump removal peephole.
28331f75eSAmir Ayupov
311791ae7SSayhaan Siddiqui## This test has commands that rely on shell capabilities that won't execute
411791ae7SSayhaan Siddiqui## correctly on Windows e.g. subshell execution
542a66fb7SRafael AulerREQUIRES: shell
642a66fb7SRafael Auler
7*003b48e0SRaul TambreRUN: %clangxx %cxxflags %p/Inputs/double_jump.cpp -o %t.exe
8d648aa1bSMaksim PanchenkoRUN: (llvm-bolt %t.exe --peepholes=double-jumps \
9d648aa1bSMaksim PanchenkoRUN:   --eliminate-unreachable -o %t 2>&1 \
108331f75eSAmir AyupovRUN:   && llvm-objdump -d %t --print-imm-hex --no-show-raw-insn) | FileCheck %s
118331f75eSAmir Ayupov
128331f75eSAmir AyupovCHECK: BOLT-INFO: Peephole: 1 double jumps patched.
138331f75eSAmir Ayupov
148331f75eSAmir AyupovCHECK: <_Z3foom>:
158331f75eSAmir AyupovCHECK-NEXT: pushq %rbp
168331f75eSAmir AyupovCHECK-NEXT: movq  %rsp, %rbp
178331f75eSAmir AyupovCHECK-NEXT: movq  %rdi, -0x8(%rbp)
188331f75eSAmir AyupovCHECK-NEXT: cmpq  $0x1, -0x8(%rbp)
198331f75eSAmir AyupovCHECK-NEXT: je    {{.*}} <_Z3foom+0x2c>
208331f75eSAmir AyupovCHECK-NEXT: incq  -0x8(%rbp)
218331f75eSAmir AyupovCHECK-NEXT: incq  -0x8(%rbp)
228331f75eSAmir AyupovCHECK-NEXT: cmpq  $0x2, -0x8(%rbp)
238331f75eSAmir AyupovCHECK-NEXT: je    {{.*}} <_Z3foom+0x22>
248331f75eSAmir AyupovCHECK-NEXT: incq  -0x8(%rbp)
258331f75eSAmir AyupovCHECK-NEXT: movq  -0x8(%rbp), %rdi
268331f75eSAmir AyupovCHECK-NEXT: popq  %rbp
278331f75eSAmir AyupovCHECK-NEXT: jmp   {{.*}} <bar>
288331f75eSAmir AyupovCHECK-NEXT: popq  %rbp
298331f75eSAmir AyupovCHECK-NEXT: incq  -0x8(%rbp)
308331f75eSAmir AyupovCHECK-NEXT: jmp   {{.*}} <bar>
31