xref: /llvm-project/llvm/test/CodeGen/X86/cfi-epilogue-with-return.mir (revision 68d2301e12351403edf57b6640294c35a09a80c5)
1# RUN: llc -o - %s -mtriple=x86_64-- -run-pass=prologepilog 2>&1 | FileCheck %s
2--- |
3  define i64 @_Z3foob(i1 zeroext %cond) #0 {
4    ret i64 0
5  }
6  attributes #0 = {"frame-pointer"="all"}
7...
8---
9# If the epilogue bb.1 is a return block, no .cfi_restore is
10# needed in it.
11# CHECK:    bb.1:
12# CHECK-NOT:  CFI_INSTRUCTION restore
13# CHECK:      RET 0
14# CHECK:    bb.2:
15# CHECK:      RET 0
16name:            _Z3foob
17alignment:       16
18tracksRegLiveness: true
19liveins:
20  - { reg: '$edi' }
21frameInfo:
22  maxAlignment:    1
23  hasCalls:        true
24  savePoint:       '%bb.1'
25  restorePoint:    '%bb.1'
26machineFunctionInfo: {}
27body:             |
28  bb.0:
29    liveins: $edi
30
31    TEST8rr renamable $dil, renamable $dil, implicit-def $eflags, implicit killed $edi
32    JCC_1 %bb.2, 4, implicit killed $eflags
33    JMP_1 %bb.1
34
35  bb.1:
36    renamable $rbx = IMPLICIT_DEF
37    renamable $r14 = IMPLICIT_DEF
38    renamable $r15 = IMPLICIT_DEF
39    renamable $r12 = IMPLICIT_DEF
40    renamable $r13 = IMPLICIT_DEF
41    dead $eax = MOV32r0 implicit-def dead $eflags, implicit-def $rax
42    RET 0, killed $rax
43
44  bb.2:
45    dead $eax = MOV32r0 implicit-def dead $eflags, implicit-def $rax
46    RET 0, killed $rax
47
48...
49