# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -mtriple=x86_64-apple-unknown -run-pass=machine-outliner -verify-machineinstrs %s -o - | FileCheck %s # Outlining CFI instructions is unsafe if we cannot outline all of the CFI # instructions from a function. This shows that we choose not to outline the # CFI instructions since function foo has a CFI Instruction that would not # be caught. --- | define void @foo() #0 { ret void } define void @bar() #0 { ret void } define void @baz() #0 { ret void } attributes #0 = { noredzone } ... --- name: foo tracksRegLiveness: true body: | bb.0: ; CHECK-LABEL: name: foo ; CHECK: CFI_INSTRUCTION def_cfa_offset 16 ; CHECK: CFI_INSTRUCTION offset $rbp, -16 ; CHECK: CFI_INSTRUCTION def_cfa_register $rbp ; CHECK: CALL64pcrel32 @OUTLINED_FUNCTION_1, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $ebx, implicit-def $ecx, implicit $rsp, implicit $ssp ; CHECK: CFI_INSTRUCTION def_cfa_offset 16 ; CHECK: CFI_INSTRUCTION offset $rbp, -16 ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp ; 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 CFI_INSTRUCTION def_cfa_offset 16 CFI_INSTRUCTION offset $rbp, -16 CFI_INSTRUCTION def_cfa_register $rbp $eax = MOV32ri 1 $ebx = MOV32ri 2 $ecx = MOV32ri 3 CFI_INSTRUCTION def_cfa_offset 16 CFI_INSTRUCTION offset $rbp, -16 CFI_INSTRUCTION def_cfa_register $rsp $esi = MOV32ri 1 $edx = MOV32ri 2 $edi = MOV32ri 3 $eax = MOV32ri 4 RET64 ... --- name: bar tracksRegLiveness: true body: | bb.0: ;liveins: $lr ; CHECK-LABEL: name: bar ; CHECK: CALL64pcrel32 @OUTLINED_FUNCTION_1, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $ebx, implicit-def $ecx, implicit $rsp, implicit $ssp ; CHECK: CFI_INSTRUCTION def_cfa_offset 16 ; CHECK: CFI_INSTRUCTION offset $rbp, -16 ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp ; 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 $eax = MOV32ri 1 $ebx = MOV32ri 2 $ecx = MOV32ri 3 CFI_INSTRUCTION def_cfa_offset 16 CFI_INSTRUCTION offset $rbp, -16 CFI_INSTRUCTION def_cfa_register $rsp $esi = MOV32ri 1 $edx = MOV32ri 2 $edi = MOV32ri 3 $eax = MOV32ri 4 RET64 ... --- name: baz tracksRegLiveness: true body: | bb.0: ;liveins: $lr ; CHECK-LABEL: name: baz ; CHECK: CALL64pcrel32 @OUTLINED_FUNCTION_1, implicit $rsp, implicit $ssp, implicit-def $eax, implicit-def $ebx, implicit-def $ecx, implicit $rsp, implicit $ssp ; CHECK: CFI_INSTRUCTION def_cfa_offset 16 ; CHECK: CFI_INSTRUCTION offset $rbp, -16 ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp ; 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 $eax = MOV32ri 1 $ebx = MOV32ri 2 $ecx = MOV32ri 3 CFI_INSTRUCTION def_cfa_offset 16 CFI_INSTRUCTION offset $rbp, -16 CFI_INSTRUCTION def_cfa_register $rsp $esi = MOV32ri 1 $edx = MOV32ri 2 $edi = MOV32ri 3 $eax = MOV32ri 4 RET64