xref: /llvm-project/llvm/test/CodeGen/X86/machine-outliner-cfi-tail.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 to outline the
6# CFI instructions if they can be included in a tail call.
7
8--- |
9  define void @foo() #0 { ret void }
10  define void @bar() #0 { ret void }
11  define void @baz() #0 { ret void }
12  attributes #0 = { noredzone }
13...
14---
15name:            foo
16tracksRegLiveness: true
17body:             |
18  bb.0:
19    ; CHECK-LABEL: name: foo
20    ; CHECK: $ecx = MOV32ri 3
21    ; CHECK: CFI_INSTRUCTION def_cfa_offset 16
22    ; CHECK: CFI_INSTRUCTION offset $rbp, -16
23    ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp
24    ; 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
25    $ecx =  MOV32ri 3
26    CFI_INSTRUCTION def_cfa_offset 16
27    CFI_INSTRUCTION offset $rbp, -16
28    CFI_INSTRUCTION def_cfa_register $rsp
29    $esi = MOV32ri 1
30    $edx = MOV32ri 2
31    $edi = MOV32ri 3
32    $eax = MOV32ri 4
33    RET64
34...
35---
36name:            bar
37tracksRegLiveness: true
38body:             |
39  bb.0:
40  ;liveins: $lr
41    ; CHECK-LABEL: name: bar
42    ; CHECK: $ecx = MOV32ri 3
43    ; CHECK: CFI_INSTRUCTION def_cfa_offset 16
44    ; CHECK: CFI_INSTRUCTION offset $rbp, -16
45    ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp
46    ; 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
47    $ecx =  MOV32ri 3
48    CFI_INSTRUCTION def_cfa_offset 16
49    CFI_INSTRUCTION offset $rbp, -16
50    CFI_INSTRUCTION def_cfa_register $rsp
51    $esi = MOV32ri 1
52    $edx = MOV32ri 2
53    $edi = MOV32ri 3
54    $eax = MOV32ri 4
55    RET64
56...
57---
58name:            baz
59tracksRegLiveness: true
60body:             |
61  bb.0:
62  ;liveins: $lr
63    ; CHECK-LABEL: name: baz
64    ; CHECK: $ecx = MOV32ri 3
65    ; CHECK: CFI_INSTRUCTION def_cfa_offset 16
66    ; CHECK: CFI_INSTRUCTION offset $rbp, -16
67    ; CHECK: CFI_INSTRUCTION def_cfa_register $rsp
68    ; 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
69    $ecx =  MOV32ri 3
70    CFI_INSTRUCTION def_cfa_offset 16
71    CFI_INSTRUCTION offset $rbp, -16
72    CFI_INSTRUCTION def_cfa_register $rsp
73    $esi = MOV32ri 1
74    $edx = MOV32ri 2
75    $edi = MOV32ri 3
76    $eax = MOV32ri 4
77    RET64
78