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