Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / localizer.mir
blobe4648a868f222a5ab2d21f09b4af513d3fb728f3
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=localizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK
4 # Test the localizer.
6 --- |
7   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
9   define void @local_use() { ret void }
10   define void @non_local_1use() { ret void }
11   define void @non_local_2uses() { ret void }
12   define void @non_local_phi_use() { ret void }
13   define void @non_local_phi_use_followed_by_use() { ret void }
14   define void @non_local_phi_use_followed_by_use_fi() { ret void }
15   define void @float_non_local_phi_use_followed_by_use_fi() { ret void }
16   define void @non_local_phi() { ret void }
17   define void @non_local_label() { ret void }
18 ...
20 ---
21 name:            local_use
22 legalized:       true
23 regBankSelected: true
24 body:             |
25   bb.0:
26     ; CHECK-LABEL: name: local_use
27     ; CHECK: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
28     ; CHECK: [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[C]], [[C]]
29     %0:gpr(s32) = G_CONSTANT i32 1
30     %1:gpr(s32) = G_ADD %0, %0
31 ...
33 ---
34 name:            non_local_1use
35 legalized:       true
36 regBankSelected: true
37 body:             |
38   ; CHECK-LABEL: name: non_local_1use
39   ; CHECK: bb.0:
40   ; CHECK:   successors: %bb.1(0x80000000)
41   ; CHECK:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
42   ; CHECK:   [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[C]], [[C]]
43   ; CHECK: bb.1:
44   ; CHECK:   [[C1:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
45   ; CHECK:   [[ADD1:%[0-9]+]]:gpr(s32) = G_ADD [[C1]], [[ADD]]
47   ; Existing registers should be left untouched
48   ; The newly created reg should be on the same regbank/regclass as its origin.
50   bb.0:
51     successors: %bb.1
53     %0:gpr(s32) = G_CONSTANT i32 1
54     %1:gpr(s32) = G_ADD %0, %0
56   bb.1:
57     %2:gpr(s32) = G_ADD %0, %1
58 ...
60 ---
61 name:            non_local_2uses
62 legalized:       true
63 regBankSelected: true
64 body:             |
65   ; CHECK-LABEL: name: non_local_2uses
66   ; CHECK: bb.0:
67   ; CHECK:   successors: %bb.1(0x80000000)
68   ; CHECK:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
69   ; CHECK:   [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[C]], [[C]]
70   ; CHECK: bb.1:
71   ; CHECK:   [[C1:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
72   ; CHECK:   [[ADD1:%[0-9]+]]:gpr(s32) = G_ADD [[C1]], [[C1]]
74   ; Existing registers should be left untouched
75   ; The newly created reg should be on the same regbank/regclass as its origin.
77   bb.0:
78     successors: %bb.1
80     %0:gpr(s32) = G_CONSTANT i32 1
81     %1:gpr(s32) = G_ADD %0, %0
83   bb.1:
84     %2:gpr(s32) = G_ADD %0, %0
85 ...
87 ---
88 name:            non_local_phi_use
89 legalized:       true
90 regBankSelected: true
91 tracksRegLiveness: true
92 body:             |
93   ; CHECK-LABEL: name: non_local_phi_use
94   ; CHECK: bb.0:
95   ; CHECK:   successors: %bb.1(0x80000000)
96   ; CHECK:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
97   ; CHECK:   [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[C]], [[C]]
98   ; CHECK: bb.1:
99   ; CHECK:   successors: %bb.2(0x80000000)
100   ; CHECK:   [[C1:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
101   ; CHECK: bb.2:
102   ; CHECK:   [[PHI:%[0-9]+]]:gpr(s32) = PHI [[C1]](s32), %bb.1
103   ; CHECK:   [[ADD1:%[0-9]+]]:gpr(s32) = G_ADD [[PHI]], [[PHI]]
105   ; Existing registers should be left untouched
106   ; The newly created reg should be on the same regbank/regclass as its origin.
108   bb.0:
109     successors: %bb.1
111     %0:gpr(s32) = G_CONSTANT i32 1
112     %1:gpr(s32) = G_ADD %0, %0
114   bb.1:
115     successors: %bb.2
117   bb.2:
118     %3:gpr(s32) = PHI %0(s32), %bb.1
119     %2:gpr(s32) = G_ADD %3, %3
123 name:            non_local_phi_use_followed_by_use
124 legalized:       true
125 regBankSelected: true
126 tracksRegLiveness: true
127 body:             |
128   ; CHECK-LABEL: name: non_local_phi_use_followed_by_use
129   ; CHECK: bb.0:
130   ; CHECK:   successors: %bb.1(0x80000000)
131   ; CHECK:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
132   ; CHECK:   [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[C]], [[C]]
133   ; CHECK: bb.1:
134   ; CHECK:   successors: %bb.2(0x80000000)
135   ; CHECK:   [[C1:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
136   ; CHECK: bb.2:
137   ; CHECK:   [[PHI:%[0-9]+]]:gpr(s32) = PHI [[C1]](s32), %bb.1
138   ; CHECK:   [[C2:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
139   ; CHECK:   [[ADD1:%[0-9]+]]:gpr(s32) = G_ADD [[PHI]], [[C2]]
141   ; Existing registers should be left untouched
142   ; The newly created reg should be on the same regbank/regclass as its origin.
144   bb.0:
145     successors: %bb.1
147     %0:gpr(s32) = G_CONSTANT i32 1
148     %1:gpr(s32) = G_ADD %0, %0
150   bb.1:
151     successors: %bb.2
153   bb.2:
154     %3:gpr(s32) = PHI %0(s32), %bb.1
155     %2:gpr(s32) = G_ADD %3, %0
159 name:            non_local_phi_use_followed_by_use_fi
160 legalized:       true
161 regBankSelected: true
162 tracksRegLiveness: true
163 body:             |
164   ; CHECK-LABEL: name: non_local_phi_use_followed_by_use_fi
165   ; CHECK: bb.0:
166   ; CHECK:   successors: %bb.1(0x80000000)
167   ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:gpr(s32) = G_FRAME_INDEX 1
168   ; CHECK:   [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[FRAME_INDEX]], [[FRAME_INDEX]]
169   ; CHECK: bb.1:
170   ; CHECK:   successors: %bb.2(0x80000000)
171   ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:gpr(s32) = G_FRAME_INDEX 1
172   ; CHECK: bb.2:
173   ; CHECK:   [[PHI:%[0-9]+]]:gpr(s32) = PHI [[FRAME_INDEX1]](s32), %bb.1
174   ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:gpr(s32) = G_FRAME_INDEX 1
175   ; CHECK:   [[ADD1:%[0-9]+]]:gpr(s32) = G_ADD [[PHI]], [[FRAME_INDEX2]]
177   ; Existing registers should be left untouched
178   ; The newly created reg should be on the same regbank/regclass as its origin.
180   bb.0:
181     successors: %bb.1
183     %0:gpr(s32) = G_FRAME_INDEX 1
184     %1:gpr(s32) = G_ADD %0, %0
186   bb.1:
187     successors: %bb.2
189   bb.2:
190     %3:gpr(s32) = PHI %0(s32), %bb.1
191     %2:gpr(s32) = G_ADD %3, %0
195 name:            float_non_local_phi_use_followed_by_use_fi
196 legalized:       true
197 regBankSelected: true
198 tracksRegLiveness: true
199 body:             |
200   ; CHECK-LABEL: name: float_non_local_phi_use_followed_by_use_fi
201   ; CHECK: bb.0:
202   ; CHECK:   successors: %bb.1(0x80000000)
203   ; CHECK:   [[C:%[0-9]+]]:fpr(s32) = G_FCONSTANT float 1.000000e+00
204   ; CHECK:   [[FADD:%[0-9]+]]:fpr(s32) = G_FADD [[C]], [[C]]
205   ; CHECK: bb.1:
206   ; CHECK:   successors: %bb.2(0x80000000)
207   ; CHECK:   [[C1:%[0-9]+]]:fpr(s32) = G_FCONSTANT float 1.000000e+00
208   ; CHECK: bb.2:
209   ; CHECK:   [[PHI:%[0-9]+]]:fpr(s32) = PHI [[C1]](s32), %bb.1
210   ; CHECK:   [[C2:%[0-9]+]]:fpr(s32) = G_FCONSTANT float 1.000000e+00
211   ; CHECK:   [[FADD1:%[0-9]+]]:fpr(s32) = G_FADD [[PHI]], [[C2]]
213   ; Existing registers should be left untouched
214   ; The newly created reg should be on the same regbank/regclass as its origin.
216   bb.0:
217     successors: %bb.1
219     %0:fpr(s32) = G_FCONSTANT float 1.0
220     %1:fpr(s32) = G_FADD %0, %0
222   bb.1:
223     successors: %bb.2
225   bb.2:
226     %3:fpr(s32) = PHI %0(s32), %bb.1
227     %2:fpr(s32) = G_FADD %3, %0
231 # Make sure we don't insert a constant before PHIs.
232 # This used to happen for loops of one basic block.
233 name:            non_local_phi
234 legalized:       true
235 regBankSelected: true
236 tracksRegLiveness: true
237 body:             |
238   ; CHECK-LABEL: name: non_local_phi
239   ; CHECK: bb.0:
240   ; CHECK:   successors: %bb.1(0x80000000)
241   ; CHECK:   [[C:%[0-9]+]]:fpr(s32) = G_FCONSTANT float 1.000000e+00
242   ; CHECK:   [[FADD:%[0-9]+]]:fpr(s32) = G_FADD [[C]], [[C]]
243   ; CHECK: bb.1:
244   ; CHECK:   successors: %bb.1(0x80000000)
245   ; CHECK:   [[PHI:%[0-9]+]]:fpr(s32) = PHI [[FADD]](s32), %bb.0, %4(s32), %bb.1
246   ; CHECK:   [[C1:%[0-9]+]]:fpr(s32) = G_FCONSTANT float 1.000000e+00
247   ; CHECK:   [[FADD1:%[0-9]+]]:fpr(s32) = G_FADD [[PHI]], [[FADD]]
248   ; CHECK:   G_BR %bb.1
250   ; Existing registers should be left untouched
251   ; The newly created reg should be on the same regbank/regclass as its origin.
253   bb.0:
254     successors: %bb.1
256     %0:fpr(s32) = G_FCONSTANT float 1.0
257     %1:fpr(s32) = G_FADD %0, %0
259   bb.1:
260     successors: %bb.1
262     %3:fpr(s32) = PHI %1(s32), %bb.0, %0(s32), %bb.1
263     %2:fpr(s32) = G_FADD %3, %1
264     G_BR %bb.1
268 # Make sure we don't insert a constant before EH_LABELs.
269 name:            non_local_label
270 legalized:       true
271 regBankSelected: true
272 tracksRegLiveness: true
273 body:             |
274   ; CHECK-LABEL: name: non_local_label
275   ; CHECK: bb.0:
276   ; CHECK:   successors: %bb.1(0x80000000)
277   ; CHECK:   liveins: $s0
278   ; CHECK:   [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
279   ; CHECK:   [[C:%[0-9]+]]:fpr(s32) = G_FCONSTANT float 1.000000e+00
280   ; CHECK: bb.1:
281   ; CHECK:   successors: %bb.1(0x80000000)
282   ; CHECK:   EH_LABEL 1
283   ; CHECK:   [[C1:%[0-9]+]]:fpr(s32) = G_FCONSTANT float 1.000000e+00
284   ; CHECK:   [[FADD:%[0-9]+]]:fpr(s32) = G_FADD [[COPY]], [[C1]]
285   ; CHECK:   G_BR %bb.1
287   ; Existing registers should be left untouched
288   ; The newly created reg should be on the same regbank/regclass as its origin.
290   bb.0:
291     liveins: $s0
292     successors: %bb.1
294     %0:fpr(s32) = COPY $s0
295     %1:fpr(s32) = G_FCONSTANT float 1.0
297   bb.1:
298     successors: %bb.1
300     EH_LABEL 1
301     %2:fpr(s32) = G_FADD %0, %1
302     G_BR %bb.1