10
10
define float @fp_load_phi() { ret float undef }
11
11
define i32 @int_load_phi() { ret i32 undef }
12
12
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
+
13
30
...
14
31
---
15
32
name : fp_load_phi
@@ -19,20 +36,22 @@ tracksRegLiveness: true
19
36
body : |
20
37
; CHECK-LABEL: name: fp_load_phi
21
38
; 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
36
55
bb.0:
37
56
liveins: $w0
38
57
successors: %bb.1
@@ -58,18 +77,22 @@ tracksRegLiveness: true
58
77
body : |
59
78
; CHECK-LABEL: name: int_load_phi
60
79
; 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
73
96
bb.0:
74
97
liveins: $w0
75
98
successors: %bb.1
@@ -86,3 +109,249 @@ body: |
86
109
$s0 = COPY %2
87
110
RET_ReallyLR implicit $s0
88
111
...
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