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