[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / machine-outliner-cfi-tail-some.mir
blob2056d593205e49e807f84b7799ca1374c8e722ff
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
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.
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 ---
16 name:            foo
17 tracksRegLiveness: true
18 body:             |
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 ---
45 name:            bar
46 tracksRegLiveness: true
47 body:             |
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 ---
69 name:            baz
70 tracksRegLiveness: true
71 body:             |
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