blob: 43b394721b5c93a00ebeff48c0cec71c6ff47e4d [file]
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
# RUN: llc -o - %s -mtriple=x86_64-- -run-pass=prologepilog 2>&1 | FileCheck %s
--- |
define i64 @_Z3foob(i1 zeroext %cond) #0 {
ret i64 0
}
attributes #0 = {"frame-pointer"="all"}
...
---
# If the epilogue bb.1 is a return block, no .cfi_restore is
# needed in it.
name: _Z3foob
alignment: 16
tracksRegLiveness: true
liveins:
- { reg: '$edi' }
frameInfo:
maxAlignment: 1
hasCalls: true
savePoint:
- point: '%bb.1'
restorePoint:
- point: '%bb.1'
machineFunctionInfo: {}
body: |
; CHECK-LABEL: name: _Z3foob
; CHECK: bb.0:
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
; CHECK-NEXT: liveins: $edi, $rbx, $r12, $r13, $r14, $r15
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: TEST8rr renamable $dil, renamable $dil, implicit-def $eflags, implicit killed $edi
; CHECK-NEXT: JCC_1 %bb.2, 4, implicit killed $eflags
; CHECK-NEXT: JMP_1 %bb.1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.1:
; CHECK-NEXT: liveins: $r15, $r14, $r13, $r12, $rbx
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: frame-setup PUSH64r killed $rbp, implicit-def $rsp, implicit $rsp
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $rbp, -16
; CHECK-NEXT: $rbp = frame-setup MOV64rr $rsp
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_register $rbp
; CHECK-NEXT: frame-setup PUSH64r killed $r15, implicit-def $rsp, implicit $rsp
; CHECK-NEXT: frame-setup PUSH64r killed $r14, implicit-def $rsp, implicit $rsp
; CHECK-NEXT: frame-setup PUSH64r killed $r13, implicit-def $rsp, implicit $rsp
; CHECK-NEXT: frame-setup PUSH64r killed $r12, implicit-def $rsp, implicit $rsp
; CHECK-NEXT: frame-setup PUSH64r killed $rbx, implicit-def $rsp, implicit $rsp
; CHECK-NEXT: CFI_INSTRUCTION offset $rbx, -56
; CHECK-NEXT: CFI_INSTRUCTION offset $r12, -48
; CHECK-NEXT: CFI_INSTRUCTION offset $r13, -40
; CHECK-NEXT: CFI_INSTRUCTION offset $r14, -32
; CHECK-NEXT: CFI_INSTRUCTION offset $r15, -24
; CHECK-NEXT: renamable $rbx = IMPLICIT_DEF
; CHECK-NEXT: renamable $r14 = IMPLICIT_DEF
; CHECK-NEXT: renamable $r15 = IMPLICIT_DEF
; CHECK-NEXT: renamable $r12 = IMPLICIT_DEF
; CHECK-NEXT: renamable $r13 = IMPLICIT_DEF
; CHECK-NEXT: dead $eax = MOV32r0 implicit-def dead $eflags, implicit-def $rax
; CHECK-NEXT: $rbx = frame-destroy POP64r implicit-def $rsp, implicit $rsp
; CHECK-NEXT: $r12 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
; CHECK-NEXT: $r13 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
; CHECK-NEXT: $r14 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
; CHECK-NEXT: $r15 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
; CHECK-NEXT: $rbp = frame-destroy POP64r implicit-def $rsp, implicit $rsp
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $rsp, 8
; CHECK-NEXT: RET 0, killed $rax
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.2:
; CHECK-NEXT: liveins: $rbx, $r12, $r13, $r14, $r15
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: dead $eax = MOV32r0 implicit-def dead $eflags, implicit-def $rax
; CHECK-NEXT: RET 0, killed $rax
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
dead $eax = MOV32r0 implicit-def dead $eflags, implicit-def $rax
RET 0, killed $rax
bb.2:
dead $eax = MOV32r0 implicit-def dead $eflags, implicit-def $rax
RET 0, killed $rax
...