1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=arm-- -run-pass=machine-outliner -verify-machineinstrs \
3# RUN: %s -o - | FileCheck %s
4
5--- |
6  define void @outline_save_reg_arm() #0 { ret void }
7  define void @outline_save_reg_thumb() #1 { ret void }
8  declare void @z()
9
10  attributes #0 = { minsize optsize }
11  attributes #1 = { minsize optsize "target-features"="+armv7-a,+thumb-mode" }
12...
13---
14
15name:           outline_save_reg_arm
16tracksRegLiveness: true
17body:             |
18  ; CHECK-LABEL: name: outline_save_reg_arm
19  ; CHECK: bb.0:
20  ; CHECK:   liveins: $lr
21  ; CHECK:   $r6 = MOVr killed $lr, 14 /* CC::al */, $noreg, $noreg
22  ; CHECK:   BL @OUTLINED_FUNCTION_1
23  ; CHECK:   $lr = MOVr killed $r6, 14 /* CC::al */, $noreg, $noreg
24  ; CHECK: bb.1:
25  ; CHECK:   liveins: $lr
26  ; CHECK:   $r6 = MOVr killed $lr, 14 /* CC::al */, $noreg, $noreg
27  ; CHECK:   BL @OUTLINED_FUNCTION_1
28  ; CHECK:   $lr = MOVr killed $r6, 14 /* CC::al */, $noreg, $noreg
29  ; CHECK: bb.2:
30  ; CHECK:   liveins: $lr
31  ; CHECK:   early-clobber $sp = STR_PRE_IMM killed $lr, $sp, -8, 14 /* CC::al */, $noreg
32  ; CHECK:   BL @OUTLINED_FUNCTION_1
33  ; CHECK:   $lr, $sp = LDR_POST_IMM $sp, $noreg, 8, 14 /* CC::al */, $noreg
34  ; CHECK: bb.3:
35  ; CHECK:   liveins: $lr, $r0, $r6, $r7, $r8, $r9, $r10, $r11
36  ; CHECK:   $r6 = MOVr killed $lr, 14 /* CC::al */, $noreg, $noreg
37  ; CHECK:   BL @OUTLINED_FUNCTION_1
38  ; CHECK:   $lr = MOVr killed $r6, 14 /* CC::al */, $noreg, $noreg
39  ; CHECK: bb.4:
40  ; CHECK:   liveins: $lr
41  ; CHECK:   $r2 = MOVr $lr, 14 /* CC::al */, $noreg, $noreg
42  ; CHECK:   BX_RET 14 /* CC::al */, $noreg
43  bb.0:
44    liveins: $lr
45    $r0 = MOVi 1, 14, $noreg, $noreg
46    $r1 = MOVi 1, 14, $noreg, $noreg
47    $r2 = MOVi 1, 14, $noreg, $noreg
48    $r3 = MOVi 1, 14, $noreg, $noreg
49    $r4 = MOVi 1, 14, $noreg, $noreg
50    $r5 = MOVi 1, 14, $noreg, $noreg
51  bb.1:
52    liveins: $lr
53    $r0 = MOVi 1, 14, $noreg, $noreg
54    $r1 = MOVi 1, 14, $noreg, $noreg
55    $r2 = MOVi 1, 14, $noreg, $noreg
56    $r3 = MOVi 1, 14, $noreg, $noreg
57    $r4 = MOVi 1, 14, $noreg, $noreg
58    $r5 = MOVi 1, 14, $noreg, $noreg
59  bb.2:
60    liveins: $lr
61    $r0 = MOVi 1, 14, $noreg, $noreg
62    $r1 = MOVi 1, 14, $noreg, $noreg
63    $r2 = MOVi 1, 14, $noreg, $noreg
64    $r3 = MOVi 1, 14, $noreg, $noreg
65    $r4 = MOVi 1, 14, $noreg, $noreg
66    $r5 = MOVi 1, 14, $noreg, $noreg
67  bb.3:
68    liveins: $lr, $r0, $r6, $r7, $r8, $r9, $r10, $r11
69    $r0 = MOVi 1, 14, $noreg, $noreg
70    $r1 = MOVi 1, 14, $noreg, $noreg
71    $r2 = MOVi 1, 14, $noreg, $noreg
72    $r3 = MOVi 1, 14, $noreg, $noreg
73    $r4 = MOVi 1, 14, $noreg, $noreg
74    $r5 = MOVi 1, 14, $noreg, $noreg
75  bb.4:
76    liveins: $lr
77    $r2 = MOVr $lr, 14, $noreg, $noreg
78    BX_RET 14, $noreg
79...
80---
81
82name:           outline_save_reg_thumb
83tracksRegLiveness: true
84body:             |
85  ; CHECK-LABEL: name: outline_save_reg_thumb
86  ; CHECK: bb.0:
87  ; CHECK:   liveins: $lr
88  ; CHECK:   $r6 = tMOVr killed $lr, 14 /* CC::al */, $noreg
89  ; CHECK:   tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0
90  ; CHECK:   $lr = tMOVr killed $r6, 14 /* CC::al */, $noreg
91  ; CHECK: bb.1:
92  ; CHECK:   liveins: $lr
93  ; CHECK:   $r6 = tMOVr killed $lr, 14 /* CC::al */, $noreg
94  ; CHECK:   tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0
95  ; CHECK:   $lr = tMOVr killed $r6, 14 /* CC::al */, $noreg
96  ; CHECK: bb.2:
97  ; CHECK:   liveins: $lr
98  ; CHECK:   early-clobber $sp = t2STR_PRE killed $lr, $sp, -8, 14 /* CC::al */, $noreg
99  ; CHECK:   tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0
100  ; CHECK:   $lr, $sp = t2LDR_POST $sp, 8, 14 /* CC::al */, $noreg
101  ; CHECK: bb.3:
102  ; CHECK:   liveins: $lr, $r0, $r6, $r7
103  ; CHECK:   $r6 = tMOVr killed $lr, 14 /* CC::al */, $noreg
104  ; CHECK:   tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0
105  ; CHECK:   $lr = tMOVr killed $r6, 14 /* CC::al */, $noreg
106  ; CHECK: bb.4:
107  ; CHECK:   liveins: $lr
108  ; CHECK:   $r2 = tMOVr $lr, 14 /* CC::al */, $noreg
109  ; CHECK:   tBX_RET 14 /* CC::al */, $noreg
110  bb.0:
111    liveins: $lr
112    $r0 = t2MOVi 1, 14, $noreg, $noreg
113    $r1 = t2MOVi 1, 14, $noreg, $noreg
114    $r2 = t2MOVi 1, 14, $noreg, $noreg
115    $r3 = t2MOVi 1, 14, $noreg, $noreg
116    $r4 = t2MOVi 1, 14, $noreg, $noreg
117    $r5 = t2MOVi 1, 14, $noreg, $noreg
118  bb.1:
119    liveins: $lr
120    $r0 = t2MOVi 1, 14, $noreg, $noreg
121    $r1 = t2MOVi 1, 14, $noreg, $noreg
122    $r2 = t2MOVi 1, 14, $noreg, $noreg
123    $r3 = t2MOVi 1, 14, $noreg, $noreg
124    $r4 = t2MOVi 1, 14, $noreg, $noreg
125    $r5 = t2MOVi 1, 14, $noreg, $noreg
126  bb.2:
127    liveins: $lr
128    $r0 = t2MOVi 1, 14, $noreg, $noreg
129    $r1 = t2MOVi 1, 14, $noreg, $noreg
130    $r2 = t2MOVi 1, 14, $noreg, $noreg
131    $r3 = t2MOVi 1, 14, $noreg, $noreg
132    $r4 = t2MOVi 1, 14, $noreg, $noreg
133    $r5 = t2MOVi 1, 14, $noreg, $noreg
134  bb.3:
135    liveins: $lr, $r0, $r6, $r7, $r8, $r9, $r10, $r11
136    $r0 = t2MOVi 1, 14, $noreg, $noreg
137    $r1 = t2MOVi 1, 14, $noreg, $noreg
138    $r2 = t2MOVi 1, 14, $noreg, $noreg
139    $r3 = t2MOVi 1, 14, $noreg, $noreg
140    $r4 = t2MOVi 1, 14, $noreg, $noreg
141    $r5 = t2MOVi 1, 14, $noreg, $noreg
142  bb.4:
143    liveins: $lr
144    $r2 = tMOVr $lr, 14, $noreg
145    tBX_RET 14, $noreg
146
147  ; CHECK-LABEL: name: OUTLINED_FUNCTION_0
148  ; CHECK: bb.0:
149  ; CHECK:   liveins: $lr
150  ; CHECK:   $r0 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
151  ; CHECK:   $r1 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
152  ; CHECK:   $r2 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
153  ; CHECK:   $r3 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
154  ; CHECK:   $r4 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
155  ; CHECK:   $r5 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
156  ; CHECK:   tBX_RET 14 /* CC::al */, $noreg
157
158  ; CHECK-LABEL: name: OUTLINED_FUNCTION_1
159  ; CHECK: bb.0:
160  ; CHECK:   liveins: $lr
161  ; CHECK:   $r0 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
162  ; CHECK:   $r1 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
163  ; CHECK:   $r2 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
164  ; CHECK:   $r3 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
165  ; CHECK:   $r4 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
166  ; CHECK:   $r5 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
167  ; CHECK:   MOVPCLR 14 /* CC::al */, $noreg
168
169