# RUN: llc -o - %s -mtriple=x86_64-- -run-pass=prologepilog 2>&1 | FileCheck %s
--- |
declare dso_local void @_Z3goov()
define i64 @_Z3foob(i1 zeroext %cond) #0 {
ret i64 0
}
attributes #0 = {"frame-pointer"="all"}
...
---
# If the epilogue bb.1.if.then is not a return block, .cfi_restore is
# needed in it, otherwise bb.2.return will see different outgoing CFI
# information from its predecessors.
# CHECK: bb.1:
# CHECK: CFI_INSTRUCTION restore $rbx
# CHECK-NEXT: CFI_INSTRUCTION restore $r12
# CHECK-NEXT: CFI_INSTRUCTION restore $r13
# CHECK-NEXT: CFI_INSTRUCTION restore $r14
# CHECK-NEXT: CFI_INSTRUCTION restore $r15
# CHECK-NEXT: CFI_INSTRUCTION restore $rbp
# CHECK-NOT: RET 0
# CHECK: bb.2:
# CHECK: RET 0
name: _Z3foob
alignment: 16
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
frameInfo:
maxAlignment: 1
hasCalls: true
savePoint: '%bb.1'
restorePoint: '%bb.1'
machineFunctionInfo: {}
body: |
bb.0:
liveins: $edi
TEST8rr renamable $dil, renamable $dil, implicit-def $eflags, implicit killed $edi
JCC_1 %bb.2, 4, implicit killed $eflags
JMP_1 %bb.1
bb.1:
renamable $rbx = IMPLICIT_DEF
renamable $r14 = IMPLICIT_DEF
renamable $r15 = IMPLICIT_DEF
renamable $r12 = IMPLICIT_DEF
renamable $r13 = IMPLICIT_DEF
bb.2:
dead $eax = MOV32r0 implicit-def dead $eflags, implicit-def $rax
RET 0, killed $rax
...