Skip to content

Commit 32532c2

Browse files
committed
[AArch64][GlobalISel] Test Pre-Commit for Look into array's element
1 parent a8f3860 commit 32532c2

File tree

1 file changed

+295
-26
lines changed

1 file changed

+295
-26
lines changed

llvm/test/CodeGen/AArch64/GlobalISel/regbankselect-fp-loads.mir

Lines changed: 295 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,23 @@
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
---
1532
name: fp_load_phi
@@ -19,20 +36,22 @@ tracksRegLiveness: true
1936
body: |
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
5877
body: |
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

Comments
 (0)