xref: /llvm-project/llvm/test/CodeGen/X86/machine-outliner-cfi-tail-some.mir (revision d391e4fe841d4289137b6cb1463fce2d1853a5eb)
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