# 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 ...