1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=x86_64-apple-unknown -run-pass=machine-outliner -verify-machineinstrs %s -o - | FileCheck %s 3 4# Outlining CFI instructions is unsafe if we cannot outline all of the CFI 5# instructions from a function. This shows that we choose not to outline the 6# CFI instructions since function foo has a CFI Instruction that would not 7# be caught. 8 9--- | 10 define void @foo() #0 { ret void } 11 define void @bar() #0 { ret void } 12 define void @baz() #0 { ret void } 13 attributes #0 = { noredzone } 14... 15--- 16name: foo 17tracksRegLiveness: true 18body: | 19 bb.0: 20 ; CHECK-LABEL: name: foo 21 ; CHECK: CFI_INSTRUCTION def_cfa_offset 16 22 ; CHECK: CFI_INSTRUCTION offset $rbp, -16 23 ; CHECK: CFI_INSTRUCTION def_cfa_register $rbp 24 ; CHECK: CALL64pcrel32 @OUTLINED_FUNCTION_1, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $ebx, implicit-def $ecx, implicit $rsp, implicit $ssp 25 ; CHECK: CFI_INSTRUCTION def_cfa_offset 16 26 ; CHECK: CFI_INSTRUCTION offset $rbp, -16 27 ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp 28 ; CHECK: TAILJMPd64 @OUTLINED_FUNCTION_0, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $edi, implicit-def $edx, implicit-def $esi, implicit $rsp, implicit $ssp 29 CFI_INSTRUCTION def_cfa_offset 16 30 CFI_INSTRUCTION offset $rbp, -16 31 CFI_INSTRUCTION def_cfa_register $rbp 32 $eax = MOV32ri 1 33 $ebx = MOV32ri 2 34 $ecx = MOV32ri 3 35 CFI_INSTRUCTION def_cfa_offset 16 36 CFI_INSTRUCTION offset $rbp, -16 37 CFI_INSTRUCTION def_cfa_register $rsp 38 $esi = MOV32ri 1 39 $edx = MOV32ri 2 40 $edi = MOV32ri 3 41 $eax = MOV32ri 4 42 RET64 43... 44--- 45name: bar 46tracksRegLiveness: true 47body: | 48 bb.0: 49 ;liveins: $lr 50 ; CHECK-LABEL: name: bar 51 ; CHECK: CALL64pcrel32 @OUTLINED_FUNCTION_1, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $ebx, implicit-def $ecx, implicit $rsp, implicit $ssp 52 ; CHECK: CFI_INSTRUCTION def_cfa_offset 16 53 ; CHECK: CFI_INSTRUCTION offset $rbp, -16 54 ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp 55 ; CHECK: TAILJMPd64 @OUTLINED_FUNCTION_0, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $edi, implicit-def $edx, implicit-def $esi, implicit $rsp, implicit $ssp 56 $eax = MOV32ri 1 57 $ebx = MOV32ri 2 58 $ecx = MOV32ri 3 59 CFI_INSTRUCTION def_cfa_offset 16 60 CFI_INSTRUCTION offset $rbp, -16 61 CFI_INSTRUCTION def_cfa_register $rsp 62 $esi = MOV32ri 1 63 $edx = MOV32ri 2 64 $edi = MOV32ri 3 65 $eax = MOV32ri 4 66 RET64 67... 68--- 69name: baz 70tracksRegLiveness: true 71body: | 72 bb.0: 73 ;liveins: $lr 74 ; CHECK-LABEL: name: baz 75 ; CHECK: CALL64pcrel32 @OUTLINED_FUNCTION_1, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $ebx, implicit-def $ecx, implicit $rsp, implicit $ssp 76 ; CHECK: CFI_INSTRUCTION def_cfa_offset 16 77 ; CHECK: CFI_INSTRUCTION offset $rbp, -16 78 ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp 79 ; CHECK: TAILJMPd64 @OUTLINED_FUNCTION_0, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $edi, implicit-def $edx, implicit-def $esi, implicit $rsp, implicit $ssp 80 $eax = MOV32ri 1 81 $ebx = MOV32ri 2 82 $ecx = MOV32ri 3 83 CFI_INSTRUCTION def_cfa_offset 16 84 CFI_INSTRUCTION offset $rbp, -16 85 CFI_INSTRUCTION def_cfa_register $rsp 86 $esi = MOV32ri 1 87 $edx = MOV32ri 2 88 $edi = MOV32ri 3 89 $eax = MOV32ri 4 90 RET64 91