xref: /llvm-project/llvm/test/CodeGen/ARM/machine-outliner-stack-fixup-thumb.mir (revision 3b16630c26505060a876f578e4b2ba701c780e9a)
1# RUN: llc -mtriple=thumbv7-- -run-pass=prologepilog \
2# RUN: -run-pass=machine-outliner %s -o - | FileCheck %s
3
4--- |
5  define void @CheckAddrModeT2_i12() { ret void }
6  define void @CheckAddrModeT2_i8() { ret void }
7  define void @CheckAddrModeT2_i8s4() { ret void }
8  define void @CheckAddrModeT2_ldrex() { ret void }
9  define void @CheckAddrModeT1_s() { ret void }
10  define void @foo() { ret void }
11
12...
13---
14
15name:           CheckAddrModeT2_i12
16tracksRegLiveness: true
17
18body:             |
19  bb.0:
20    liveins: $r1
21    ;CHECK-LABEL: name:           CheckAddrModeT2_i12
22    ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]
23    ;CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[I12:[0-9]+]]
24    ;CHECK-NEXT: $r0 = t2LDRi12 $sp, 4088, 14 /* CC::al */, $noreg
25    $r0 = tMOVr killed $r1, 14, $noreg
26    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
27    $r0 = t2LDRi12 $sp, 0, 14, $noreg
28    $r0 = t2LDRi12 $sp, 4, 14, $noreg
29    $r0 = t2LDRi12 $sp, 4086, 14, $noreg
30    $r0 = t2LDRi12 $sp, 4088, 14, $noreg
31    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
32    $r0 = t2LDRi12 $sp, 0, 14, $noreg
33    $r0 = t2LDRi12 $sp, 4, 14, $noreg
34    $r0 = t2LDRi12 $sp, 4086, 14, $noreg
35    $r0 = t2LDRi12 $sp, 4088, 14, $noreg
36    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
37    $r0 = t2LDRi12 $sp, 0, 14, $noreg
38    $r0 = t2LDRi12 $sp, 4, 14, $noreg
39    $r0 = t2LDRi12 $sp, 4086, 14, $noreg
40    $r0 = t2LDRi12 $sp, 4088, 14, $noreg
41    BX_RET 14, $noreg
42...
43---
44
45name:           CheckAddrModeT2_i8
46tracksRegLiveness: true
47
48body:             |
49  bb.0:
50    liveins: $r1
51    ;CHECK-LABEL: name:           CheckAddrModeT2_i8
52    ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]
53    ;CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[I8:[0-9]+]]
54    ;CHECK-NEXT: t2STRHT $r0, $sp, 248, 14 /* CC::al */, $noreg
55    $r0 = tMOVr $r1, 14, $noreg
56    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
57    t2STRHT $r0, $sp, 0, 14, $noreg
58    t2STRHT $r0, $sp, 4, 14, $noreg
59    t2STRHT $r0, $sp, 247, 14, $noreg
60    t2STRHT $r0, $sp, 248, 14, $noreg
61    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
62    t2STRHT $r0, $sp, 0, 14, $noreg
63    t2STRHT $r0, $sp, 4, 14, $noreg
64    t2STRHT $r0, $sp, 247, 14, $noreg
65    t2STRHT $r0, $sp, 248, 14, $noreg
66    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
67    t2STRHT $r0, $sp, 0, 14, $noreg
68    t2STRHT $r0, $sp, 4, 14, $noreg
69    t2STRHT $r0, $sp, 247, 14, $noreg
70    t2STRHT $r0, $sp, 248, 14, $noreg
71    BX_RET 14, $noreg
72...
73---
74
75name:           CheckAddrModeT2_i8s4
76tracksRegLiveness: true
77
78body:             |
79  bb.0:
80    liveins: $r1
81    ;CHECK-LABEL: name:           CheckAddrModeT2_i8s4
82    ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]
83    ;CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[I8S4:[0-9]+]]
84    ;CHECK-NEXT: t2STRDi8 $r0, $r1, $sp, 1020, 14 /* CC::al */, $noreg
85    $r0 = tMOVr $r1, 14, $noreg
86    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
87    t2STRDi8 $r0, $r1, $sp, 0, 14, $noreg
88    t2STRDi8 $r0, $r1, $sp, 8, 14, $noreg
89    t2STRDi8 $r0, $r1, $sp, 1012, 14, $noreg
90    t2STRDi8 $r0, $r1, $sp, 1020, 14, $noreg
91    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
92    t2STRDi8 $r0, $r1, $sp, 0, 14, $noreg
93    t2STRDi8 $r0, $r1, $sp, 8, 14, $noreg
94    t2STRDi8 $r0, $r1, $sp, 1012, 14, $noreg
95    t2STRDi8 $r0, $r1, $sp, 1020, 14, $noreg
96    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
97    t2STRDi8 $r0, $r1, $sp, 0, 14, $noreg
98    t2STRDi8 $r0, $r1, $sp, 8, 14, $noreg
99    t2STRDi8 $r0, $r1, $sp, 1012, 14, $noreg
100    t2STRDi8 $r0, $r1, $sp, 1020, 14, $noreg
101    BX_RET 14, $noreg
102...
103---
104
105name:           CheckAddrModeT2_ldrex
106tracksRegLiveness: true
107
108body:             |
109  bb.0:
110    liveins: $r1
111    ;CHECK-LABEL: name:           CheckAddrModeT2_ldrex
112    ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]
113    ;CHECK-NEXT: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[LDREX:[0-9]+]]
114    ;CHECK-NEXT: $r1 = t2LDREX $sp, 254, 14 /* CC::al */, $noreg
115    $r0 = tMOVr $r1, 14, $noreg
116    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
117    $r1 = t2LDREX $sp, 0, 14, $noreg
118    $r1 = t2LDREX $sp, 8, 14, $noreg
119    $r1 = t2LDREX $sp, 253, 14, $noreg
120    $r1 = t2LDREX $sp, 254, 14, $noreg
121    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
122    $r1 = t2LDREX $sp, 0, 14, $noreg
123    $r1 = t2LDREX $sp, 8, 14, $noreg
124    $r1 = t2LDREX $sp, 253, 14, $noreg
125    $r1 = t2LDREX $sp, 254, 14, $noreg
126    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
127    $r1 = t2LDREX $sp, 0, 14, $noreg
128    $r1 = t2LDREX $sp, 8, 14, $noreg
129    $r1 = t2LDREX $sp, 253, 14, $noreg
130    $r1 = t2LDREX $sp, 254, 14, $noreg
131    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
132    $r1 = t2LDREX $sp, 0, 14, $noreg
133    $r1 = t2LDREX $sp, 8, 14, $noreg
134    $r1 = t2LDREX $sp, 253, 14, $noreg
135    $r1 = t2LDREX $sp, 254, 14, $noreg
136    BX_RET 14, $noreg
137...
138---
139
140name:           CheckAddrModeT1_s
141tracksRegLiveness: true
142
143body:             |
144  bb.0:
145    liveins: $r0, $r1
146    ;CHECK-LABEL: name:           CheckAddrModeT1_s
147    ;CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_[[SHARED:[0-9+]]]
148    ;CHECK-NEXT: tSTRspi $r0, $sp, 0, 14 /* CC::al */, $noreg
149    ;CHECK-NEXT: tSTRspi $r0, $sp, 4, 14 /* CC::al */, $noreg
150    ;CHECK-NEXT: tSTRspi $r0, $sp, 253, 14 /* CC::al */, $noreg
151    ;CHECK-NEXT: tSTRspi $r0, $sp, 254, 14 /* CC::al */, $noreg
152    $r0 = tMOVr $r1, 14, $noreg
153    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
154    tSTRspi $r0, $sp, 0, 14, $noreg
155    tSTRspi $r0, $sp, 4, 14, $noreg
156    tSTRspi $r0, $sp, 253, 14, $noreg
157    tSTRspi $r0, $sp, 254, 14, $noreg
158    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
159    tSTRspi $r0, $sp, 0, 14, $noreg
160    tSTRspi $r0, $sp, 4, 14, $noreg
161    tSTRspi $r0, $sp, 253, 14, $noreg
162    tSTRspi $r0, $sp, 254, 14, $noreg
163    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
164    tSTRspi $r0, $sp, 0, 14, $noreg
165    tSTRspi $r0, $sp, 4, 14, $noreg
166    tSTRspi $r0, $sp, 253, 14, $noreg
167    tSTRspi $r0, $sp, 254, 14, $noreg
168    tBL 14, $noreg, @foo, implicit-def dead $lr, implicit $sp
169    tSTRspi $r0, $sp, 0, 14, $noreg
170    tSTRspi $r0, $sp, 4, 14, $noreg
171    tSTRspi $r0, $sp, 253, 14, $noreg
172    tSTRspi $r0, $sp, 254, 14, $noreg
173    BX_RET 14, $noreg
174...
175---
176
177name:           foo
178tracksRegLiveness: true
179body:             |
180  bb.0:
181    liveins: $lr
182
183    BX_RET 14, $noreg
184
185    ;CHECK: name:           OUTLINED_FUNCTION_[[LDREX]]
186    ;CHECK: $r1 = t2LDREX $sp, 0, 14 /* CC::al */, $noreg
187    ;CHECK-NEXT: $r1 = t2LDREX $sp, 8, 14 /* CC::al */, $noreg
188    ;CHECK-NEXT: $r1 = t2LDREX $sp, 253, 14 /* CC::al */, $noreg
189    ;CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg
190
191    ;CHECK: name:           OUTLINED_FUNCTION_[[I8]]
192    ;CHECK: t2STRHT $r0, $sp, 0, 14 /* CC::al */, $noreg
193    ;CHECK-NEXT: t2STRHT $r0, $sp, 4, 14 /* CC::al */, $noreg
194    ;CHECK-NEXT: t2STRHT $r0, $sp, 247, 14 /* CC::al */, $noreg
195    ;CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg
196
197    ;CHECK: name:           OUTLINED_FUNCTION_[[I8S4]]
198    ;CHECK: t2STRDi8 $r0, $r1, $sp, 0, 14 /* CC::al */, $noreg
199    ;CHECK-NEXT: t2STRDi8 $r0, $r1, $sp, 8, 14 /* CC::al */, $noreg
200    ;CHECK-NEXT: t2STRDi8 $r0, $r1, $sp, 1012, 14 /* CC::al */, $noreg
201    ;CHECK-NEXT: tBX_RET 14 /* CC::al */, $nore
202
203    ;CHECK: name:           OUTLINED_FUNCTION_[[I12]]
204    ;CHECK: $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg
205    ;CHECK-NEXT: $r0 = t2LDRi12 $sp, 4, 14 /* CC::al */, $noreg
206    ;CHECK-NEXT: $r0 = t2LDRi12 $sp, 4086, 14 /* CC::al */, $noreg
207    ;CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg
208
209    ;CHECK: name:           OUTLINED_FUNCTION_[[SHARED]]
210    ;CHECK: $r0 = tMOVr killed $r1, 14 /* CC::al */, $noreg
211    ;CHECK-NEXT: tTAILJMPdND @foo, 14 /* CC::al */, $noreg, implicit $sp
212