1010 define float @fp_load_phi() { ret float undef }
1111 define i32 @int_load_phi() { ret i32 undef }
1212
13+
14+ @array_double = dso_local global [32000 x double] zeroinitializer, align 8
15+ @struct_array_double = dso_local global { [32000 x double] } zeroinitializer, align 8
16+ @struct_struct_array_double = dso_local global {{ [32000 x double] }} zeroinitializer, align 8
17+
18+ define float @array_load_double() { ret float undef }
19+ define float @struct_array_load_double() { ret float undef }
20+ define float @struct_struct_array_load_double() { ret float undef }
21+
22+ @array_int = dso_local global [32000 x i32] zeroinitializer, align 8
23+ @struct_array_int = dso_local global { [32000 x i32] } zeroinitializer, align 8
24+ @struct_struct_array_int = dso_local global {{ [32000 x i32] }} zeroinitializer, align 8
25+
26+ define i32 @array_load_int() { ret i32 undef }
27+ define i32 @struct_array_load_int() { ret i32 undef }
28+ define i32 @struct_struct_array_load_int() { ret i32 undef }
29+
1330...
1431---
1532name : fp_load_phi
@@ -19,20 +36,22 @@ tracksRegLiveness: true
1936body : |
2037 ; CHECK-LABEL: name: fp_load_phi
2138 ; CHECK: bb.0:
22- ; CHECK: successors: %bb.1(0x80000000)
23- ; CHECK: liveins: $w0
24- ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
25- ; CHECK: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var_fp
26- ; CHECK: %fp_load:fpr(s32) = G_LOAD [[GV]](p0) :: (load (s32) from @var_fp)
27- ; CHECK: bb.1:
28- ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
29- ; CHECK: [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s32), %bb.0, [[PHI]](s32), %bb.1
30- ; CHECK: G_BRCOND [[COPY]](s32), %bb.1
31- ; CHECK: bb.2:
32- ; CHECK: $s0 = COPY [[PHI]](s32)
33- ; CHECK: RET_ReallyLR implicit $s0
34- ; Here we're checking that the load is assigned an FPR bank, since it's
35- ; loading from an fp type in the IR.
39+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
40+ ; CHECK-NEXT: liveins: $w0
41+ ; CHECK-NEXT: {{ $}}
42+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
43+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var_fp
44+ ; CHECK-NEXT: %fp_load:fpr(s32) = G_LOAD [[GV]](p0) :: (load (s32) from @var_fp)
45+ ; CHECK-NEXT: {{ $}}
46+ ; CHECK-NEXT: bb.1:
47+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
48+ ; CHECK-NEXT: {{ $}}
49+ ; CHECK-NEXT: [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s32), %bb.0, [[PHI]](s32), %bb.1
50+ ; CHECK-NEXT: G_BRCOND [[COPY]](s32), %bb.1
51+ ; CHECK-NEXT: {{ $}}
52+ ; CHECK-NEXT: bb.2:
53+ ; CHECK-NEXT: $s0 = COPY [[PHI]](s32)
54+ ; CHECK-NEXT: RET_ReallyLR implicit $s0
3655 bb.0:
3756 liveins: $w0
3857 successors: %bb.1
@@ -58,18 +77,22 @@ tracksRegLiveness: true
5877body : |
5978 ; CHECK-LABEL: name: int_load_phi
6079 ; CHECK: bb.0:
61- ; CHECK: successors: %bb.1(0x80000000)
62- ; CHECK: liveins: $w0
63- ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
64- ; CHECK: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var_fp
65- ; CHECK: %fp_load:gpr(s32) = G_LOAD [[GV]](p0) :: (load (s32) from @var_int)
66- ; CHECK: bb.1:
67- ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
68- ; CHECK: [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s32), %bb.0, [[PHI]](s32), %bb.1
69- ; CHECK: G_BRCOND [[COPY]](s32), %bb.1
70- ; CHECK: bb.2:
71- ; CHECK: $s0 = COPY [[PHI]](s32)
72- ; CHECK: RET_ReallyLR implicit $s0
80+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
81+ ; CHECK-NEXT: liveins: $w0
82+ ; CHECK-NEXT: {{ $}}
83+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
84+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var_fp
85+ ; CHECK-NEXT: %fp_load:gpr(s32) = G_LOAD [[GV]](p0) :: (load (s32) from @var_int)
86+ ; CHECK-NEXT: {{ $}}
87+ ; CHECK-NEXT: bb.1:
88+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
89+ ; CHECK-NEXT: {{ $}}
90+ ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s32), %bb.0, [[PHI]](s32), %bb.1
91+ ; CHECK-NEXT: G_BRCOND [[COPY]](s32), %bb.1
92+ ; CHECK-NEXT: {{ $}}
93+ ; CHECK-NEXT: bb.2:
94+ ; CHECK-NEXT: $s0 = COPY [[PHI]](s32)
95+ ; CHECK-NEXT: RET_ReallyLR implicit $s0
7396 bb.0:
7497 liveins: $w0
7598 successors: %bb.1
@@ -86,3 +109,249 @@ body: |
86109 $s0 = COPY %2
87110 RET_ReallyLR implicit $s0
88111 ...
112+
113+ ---
114+ name : array_load_double
115+ legalized : true
116+ regBankSelected : false
117+ tracksRegLiveness : true
118+ body : |
119+ ; CHECK-LABEL: name: array_load_double
120+ ; CHECK: bb.0:
121+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
122+ ; CHECK-NEXT: liveins: $w0
123+ ; CHECK-NEXT: {{ $}}
124+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
125+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @array_double
126+ ; CHECK-NEXT: %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @array_double)
127+ ; CHECK-NEXT: {{ $}}
128+ ; CHECK-NEXT: bb.1:
129+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
130+ ; CHECK-NEXT: {{ $}}
131+ ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
132+ ; CHECK-NEXT: G_BRCOND [[COPY]](s32), %bb.1
133+ ; CHECK-NEXT: {{ $}}
134+ ; CHECK-NEXT: bb.2:
135+ ; CHECK-NEXT: $s0 = COPY [[PHI]](s32)
136+ ; CHECK-NEXT: RET_ReallyLR implicit $s0
137+ bb.0:
138+ liveins: $w0
139+ successors: %bb.1
140+ %0:_(s32) = COPY $w0
141+ %1:_(p0) = G_GLOBAL_VALUE @array_double
142+ %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @array_double)
143+
144+ bb.1:
145+ successors: %bb.1, %bb.2
146+ %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
147+ G_BRCOND %0, %bb.1
148+
149+ bb.2:
150+ $s0 = COPY %2
151+ RET_ReallyLR implicit $s0
152+ ...
153+
154+ ---
155+ name : struct_array_load_double
156+ legalized : true
157+ regBankSelected : false
158+ tracksRegLiveness : true
159+ body : |
160+ ; CHECK-LABEL: name: struct_array_load_double
161+ ; CHECK: bb.0:
162+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
163+ ; CHECK-NEXT: liveins: $w0
164+ ; CHECK-NEXT: {{ $}}
165+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
166+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_array_double
167+ ; CHECK-NEXT: %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_array_double)
168+ ; CHECK-NEXT: {{ $}}
169+ ; CHECK-NEXT: bb.1:
170+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
171+ ; CHECK-NEXT: {{ $}}
172+ ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
173+ ; CHECK-NEXT: G_BRCOND [[COPY]](s32), %bb.1
174+ ; CHECK-NEXT: {{ $}}
175+ ; CHECK-NEXT: bb.2:
176+ ; CHECK-NEXT: $s0 = COPY [[PHI]](s32)
177+ ; CHECK-NEXT: RET_ReallyLR implicit $s0
178+ bb.0:
179+ liveins: $w0
180+ successors: %bb.1
181+ %0:_(s32) = COPY $w0
182+ %1:_(p0) = G_GLOBAL_VALUE @struct_array_double
183+ %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_array_double)
184+
185+ bb.1:
186+ successors: %bb.1, %bb.2
187+ %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
188+ G_BRCOND %0, %bb.1
189+
190+ bb.2:
191+ $s0 = COPY %2
192+ RET_ReallyLR implicit $s0
193+ ...
194+
195+ ---
196+ name : struct_struct_array_load_double
197+ legalized : true
198+ regBankSelected : false
199+ tracksRegLiveness : true
200+ body : |
201+ ; CHECK-LABEL: name: struct_struct_array_load_double
202+ ; CHECK: bb.0:
203+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
204+ ; CHECK-NEXT: liveins: $w0
205+ ; CHECK-NEXT: {{ $}}
206+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
207+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_struct_array_double
208+ ; CHECK-NEXT: %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_struct_array_double)
209+ ; CHECK-NEXT: {{ $}}
210+ ; CHECK-NEXT: bb.1:
211+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
212+ ; CHECK-NEXT: {{ $}}
213+ ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
214+ ; CHECK-NEXT: G_BRCOND [[COPY]](s32), %bb.1
215+ ; CHECK-NEXT: {{ $}}
216+ ; CHECK-NEXT: bb.2:
217+ ; CHECK-NEXT: $s0 = COPY [[PHI]](s32)
218+ ; CHECK-NEXT: RET_ReallyLR implicit $s0
219+ bb.0:
220+ liveins: $w0
221+ successors: %bb.1
222+ %0:_(s32) = COPY $w0
223+ %1:_(p0) = G_GLOBAL_VALUE @struct_struct_array_double
224+ %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_struct_array_double)
225+
226+ bb.1:
227+ successors: %bb.1, %bb.2
228+ %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
229+ G_BRCOND %0, %bb.1
230+
231+ bb.2:
232+ $s0 = COPY %2
233+ RET_ReallyLR implicit $s0
234+ ...
235+
236+ ---
237+ name : array_load_int
238+ legalized : true
239+ regBankSelected : false
240+ tracksRegLiveness : true
241+ body : |
242+ ; CHECK-LABEL: name: array_load_int
243+ ; CHECK: bb.0:
244+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
245+ ; CHECK-NEXT: liveins: $w0
246+ ; CHECK-NEXT: {{ $}}
247+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
248+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @array_int
249+ ; CHECK-NEXT: %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @array_int)
250+ ; CHECK-NEXT: {{ $}}
251+ ; CHECK-NEXT: bb.1:
252+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
253+ ; CHECK-NEXT: {{ $}}
254+ ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
255+ ; CHECK-NEXT: G_BRCOND [[COPY]](s32), %bb.1
256+ ; CHECK-NEXT: {{ $}}
257+ ; CHECK-NEXT: bb.2:
258+ ; CHECK-NEXT: $s0 = COPY [[PHI]](s32)
259+ ; CHECK-NEXT: RET_ReallyLR implicit $s0
260+ bb.0:
261+ liveins: $w0
262+ successors: %bb.1
263+ %0:_(s32) = COPY $w0
264+ %1:_(p0) = G_GLOBAL_VALUE @array_int
265+ %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @array_int)
266+
267+ bb.1:
268+ successors: %bb.1, %bb.2
269+ %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
270+ G_BRCOND %0, %bb.1
271+
272+ bb.2:
273+ $s0 = COPY %2
274+ RET_ReallyLR implicit $s0
275+ ...
276+
277+ ---
278+ name : struct_array_load_int
279+ legalized : true
280+ regBankSelected : false
281+ tracksRegLiveness : true
282+ body : |
283+ ; CHECK-LABEL: name: struct_array_load_int
284+ ; CHECK: bb.0:
285+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
286+ ; CHECK-NEXT: liveins: $w0
287+ ; CHECK-NEXT: {{ $}}
288+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
289+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_array_int
290+ ; CHECK-NEXT: %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_array_int)
291+ ; CHECK-NEXT: {{ $}}
292+ ; CHECK-NEXT: bb.1:
293+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
294+ ; CHECK-NEXT: {{ $}}
295+ ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
296+ ; CHECK-NEXT: G_BRCOND [[COPY]](s32), %bb.1
297+ ; CHECK-NEXT: {{ $}}
298+ ; CHECK-NEXT: bb.2:
299+ ; CHECK-NEXT: $s0 = COPY [[PHI]](s32)
300+ ; CHECK-NEXT: RET_ReallyLR implicit $s0
301+ bb.0:
302+ liveins: $w0
303+ successors: %bb.1
304+ %0:_(s32) = COPY $w0
305+ %1:_(p0) = G_GLOBAL_VALUE @struct_array_int
306+ %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_array_int)
307+
308+ bb.1:
309+ successors: %bb.1, %bb.2
310+ %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
311+ G_BRCOND %0, %bb.1
312+
313+ bb.2:
314+ $s0 = COPY %2
315+ RET_ReallyLR implicit $s0
316+ ...
317+
318+ ---
319+ name : struct_struct_array_load_int
320+ legalized : true
321+ regBankSelected : false
322+ tracksRegLiveness : true
323+ body : |
324+ ; CHECK-LABEL: name: struct_struct_array_load_int
325+ ; CHECK: bb.0:
326+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
327+ ; CHECK-NEXT: liveins: $w0
328+ ; CHECK-NEXT: {{ $}}
329+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
330+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_struct_array_int
331+ ; CHECK-NEXT: %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_struct_array_int)
332+ ; CHECK-NEXT: {{ $}}
333+ ; CHECK-NEXT: bb.1:
334+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
335+ ; CHECK-NEXT: {{ $}}
336+ ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
337+ ; CHECK-NEXT: G_BRCOND [[COPY]](s32), %bb.1
338+ ; CHECK-NEXT: {{ $}}
339+ ; CHECK-NEXT: bb.2:
340+ ; CHECK-NEXT: $s0 = COPY [[PHI]](s32)
341+ ; CHECK-NEXT: RET_ReallyLR implicit $s0
342+ bb.0:
343+ liveins: $w0
344+ successors: %bb.1
345+ %0:_(s32) = COPY $w0
346+ %1:_(p0) = G_GLOBAL_VALUE @struct_struct_array_int
347+ %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_struct_array_int)
348+
349+ bb.1:
350+ successors: %bb.1, %bb.2
351+ %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
352+ G_BRCOND %0, %bb.1
353+
354+ bb.2:
355+ $s0 = COPY %2
356+ RET_ReallyLR implicit $s0
357+ ...
0 commit comments