[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / regbankselect-fp-loads.mir
blobb3261a9f1b651c543a1cb683bd4cdffad4ae54d4
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK
4 --- |
5   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
7   @var_fp = global float 0.0
8   @var_int = global i32 0
10   define float @fp_load_phi() { ret float undef }
11   define i32 @int_load_phi_gpr() { ret i32 undef }
12   define i32 @int_load_phi_fpr() { ret i32 undef }
15   @array_double = dso_local global [32000 x double] zeroinitializer, align 8
16   @struct_array_double = dso_local global { [32000 x double] } zeroinitializer, align 8
17   @struct_struct_array_double = dso_local global {{ [32000 x double] }} zeroinitializer, align 8
19   define float @array_load_double() { ret float undef }
20   define float @struct_array_load_double() { ret float undef }
21   define float @struct_struct_array_load_double() { ret float undef }
23   @array_int = dso_local global [32000 x i32] zeroinitializer, align 8
24   @struct_array_int = dso_local global { [32000 x i32] } zeroinitializer, align 8
25   @struct_struct_array_int = dso_local global {{ [32000 x i32] }} zeroinitializer, align 8
27   define i32 @array_load_int_gpr() { ret i32 undef }
28   define i32 @array_load_int_fpr() { ret i32 undef }
29   define i32 @struct_array_load_int_gpr() { ret i32 undef }
30   define i32 @struct_array_load_int_fpr() { ret i32 undef }
31   define i32 @struct_struct_array_load_int_gpr() { ret i32 undef }
32   define i32 @struct_struct_array_load_int_fpr() { ret i32 undef }
34 ...
35 ---
36 name:            fp_load_phi
37 legalized:       true
38 regBankSelected: false
39 tracksRegLiveness: true
40 body:             |
41   ; CHECK-LABEL: name: fp_load_phi
42   ; CHECK: bb.0:
43   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
44   ; CHECK-NEXT:   liveins: $w0
45   ; CHECK-NEXT: {{  $}}
46   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
47   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var_fp
48   ; CHECK-NEXT:   %fp_load:fpr(s32) = G_LOAD [[GV]](p0) :: (load (s32) from @var_fp)
49   ; CHECK-NEXT: {{  $}}
50   ; CHECK-NEXT: bb.1:
51   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
52   ; CHECK-NEXT: {{  $}}
53   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s32), %bb.0, [[PHI]](s32), %bb.1
54   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
55   ; CHECK-NEXT: {{  $}}
56   ; CHECK-NEXT: bb.2:
57   ; CHECK-NEXT:   $s0 = COPY [[PHI]](s32)
58   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
59   bb.0:
60     liveins: $w0
61     successors: %bb.1
62     %0:_(s32) = COPY $w0
63     %1:_(p0) = G_GLOBAL_VALUE @var_fp
64     %fp_load:_(s32) = G_LOAD %1 :: (load 4 from @var_fp)
66   bb.1:
67     successors: %bb.1, %bb.2
68     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
69     G_BRCOND %0, %bb.1
71   bb.2:
72     $s0 = COPY %2
73     RET_ReallyLR implicit $s0
74 ...
76 ---
77 name:            int_load_phi_gpr
78 legalized:       true
79 regBankSelected: false
80 tracksRegLiveness: true
81 body:             |
82   ; CHECK-LABEL: name: int_load_phi_gpr
83   ; CHECK: bb.0:
84   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
85   ; CHECK-NEXT:   liveins: $w0
86   ; CHECK-NEXT: {{  $}}
87   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
88   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var_fp
89   ; CHECK-NEXT:   %fp_load:gpr(s32) = G_LOAD [[GV]](p0) :: (load (s32) from @var_int)
90   ; CHECK-NEXT: {{  $}}
91   ; CHECK-NEXT: bb.1:
92   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
93   ; CHECK-NEXT: {{  $}}
94   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s32), %bb.0, [[PHI]](s32), %bb.1
95   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
96   ; CHECK-NEXT: {{  $}}
97   ; CHECK-NEXT: bb.2:
98   ; CHECK-NEXT:   $w1 = COPY [[PHI]](s32)
99   ; CHECK-NEXT:   RET_ReallyLR implicit $w1
100   bb.0:
101     liveins: $w0
102     successors: %bb.1
103     %0:_(s32) = COPY $w0
104     %1:_(p0) = G_GLOBAL_VALUE @var_fp
105     %fp_load:_(s32) = G_LOAD %1 :: (load 4 from @var_int)
107   bb.1:
108     successors: %bb.1, %bb.2
109     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
110     G_BRCOND %0, %bb.1
112   bb.2:
113     $w1 = COPY %2
114     RET_ReallyLR implicit $w1
118 name:            int_load_phi_fpr
119 legalized:       true
120 regBankSelected: false
121 tracksRegLiveness: true
122 body:             |
123   ; CHECK-LABEL: name: int_load_phi_fpr
124   ; CHECK: bb.0:
125   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
126   ; CHECK-NEXT:   liveins: $w0
127   ; CHECK-NEXT: {{  $}}
128   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
129   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var_fp
130   ; CHECK-NEXT:   %fp_load:fpr(s32) = G_LOAD [[GV]](p0) :: (load (s32) from @var_int)
131   ; CHECK-NEXT: {{  $}}
132   ; CHECK-NEXT: bb.1:
133   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
134   ; CHECK-NEXT: {{  $}}
135   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s32), %bb.0, [[PHI]](s32), %bb.1
136   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
137   ; CHECK-NEXT: {{  $}}
138   ; CHECK-NEXT: bb.2:
139   ; CHECK-NEXT:   $s0 = COPY [[PHI]](s32)
140   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
141   bb.0:
142     liveins: $w0
143     successors: %bb.1
144     %0:_(s32) = COPY $w0
145     %1:_(p0) = G_GLOBAL_VALUE @var_fp
146     %fp_load:_(s32) = G_LOAD %1 :: (load 4 from @var_int)
148   bb.1:
149     successors: %bb.1, %bb.2
150     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
151     G_BRCOND %0, %bb.1
153   bb.2:
154     $s0 = COPY %2
155     RET_ReallyLR implicit $s0
159 name:            array_load_double
160 legalized:       true
161 regBankSelected: false
162 tracksRegLiveness: true
163 body:             |
164   ; CHECK-LABEL: name: array_load_double
165   ; CHECK: bb.0:
166   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
167   ; CHECK-NEXT:   liveins: $w0
168   ; CHECK-NEXT: {{  $}}
169   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
170   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @array_double
171   ; CHECK-NEXT:   %fp_load:fpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @array_double)
172   ; CHECK-NEXT: {{  $}}
173   ; CHECK-NEXT: bb.1:
174   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
175   ; CHECK-NEXT: {{  $}}
176   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
177   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
178   ; CHECK-NEXT: {{  $}}
179   ; CHECK-NEXT: bb.2:
180   ; CHECK-NEXT:   $s0 = COPY [[PHI]](s32)
181   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
182   bb.0:
183     liveins: $w0
184     successors: %bb.1
185     %0:_(s32) = COPY $w0
186     %1:_(p0) = G_GLOBAL_VALUE @array_double
187     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @array_double)
189   bb.1:
190     successors: %bb.1, %bb.2
191     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
192     G_BRCOND %0, %bb.1
194   bb.2:
195     $s0 = COPY %2
196     RET_ReallyLR implicit $s0
200 name:            struct_array_load_double
201 legalized:       true
202 regBankSelected: false
203 tracksRegLiveness: true
204 body:             |
205   ; CHECK-LABEL: name: struct_array_load_double
206   ; CHECK: bb.0:
207   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
208   ; CHECK-NEXT:   liveins: $w0
209   ; CHECK-NEXT: {{  $}}
210   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
211   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_array_double
212   ; CHECK-NEXT:   %fp_load:fpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_array_double)
213   ; CHECK-NEXT: {{  $}}
214   ; CHECK-NEXT: bb.1:
215   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
216   ; CHECK-NEXT: {{  $}}
217   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
218   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
219   ; CHECK-NEXT: {{  $}}
220   ; CHECK-NEXT: bb.2:
221   ; CHECK-NEXT:   $s0 = COPY [[PHI]](s32)
222   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
223   bb.0:
224     liveins: $w0
225     successors: %bb.1
226     %0:_(s32) = COPY $w0
227     %1:_(p0) = G_GLOBAL_VALUE @struct_array_double
228     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_array_double)
230   bb.1:
231     successors: %bb.1, %bb.2
232     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
233     G_BRCOND %0, %bb.1
235   bb.2:
236     $s0 = COPY %2
237     RET_ReallyLR implicit $s0
241 name:            struct_struct_array_load_double
242 legalized:       true
243 regBankSelected: false
244 tracksRegLiveness: true
245 body:             |
246   ; CHECK-LABEL: name: struct_struct_array_load_double
247   ; CHECK: bb.0:
248   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
249   ; CHECK-NEXT:   liveins: $w0
250   ; CHECK-NEXT: {{  $}}
251   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
252   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_struct_array_double
253   ; CHECK-NEXT:   %fp_load:fpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_struct_array_double)
254   ; CHECK-NEXT: {{  $}}
255   ; CHECK-NEXT: bb.1:
256   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
257   ; CHECK-NEXT: {{  $}}
258   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
259   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
260   ; CHECK-NEXT: {{  $}}
261   ; CHECK-NEXT: bb.2:
262   ; CHECK-NEXT:   $s0 = COPY [[PHI]](s32)
263   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
264   bb.0:
265     liveins: $w0
266     successors: %bb.1
267     %0:_(s32) = COPY $w0
268     %1:_(p0) = G_GLOBAL_VALUE @struct_struct_array_double
269     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_struct_array_double)
271   bb.1:
272     successors: %bb.1, %bb.2
273     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
274     G_BRCOND %0, %bb.1
276   bb.2:
277     $s0 = COPY %2
278     RET_ReallyLR implicit $s0
282 name:            array_load_int_gpr
283 legalized:       true
284 regBankSelected: false
285 tracksRegLiveness: true
286 body:             |
287   ; CHECK-LABEL: name: array_load_int_gpr
288   ; CHECK: bb.0:
289   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
290   ; CHECK-NEXT:   liveins: $w0
291   ; CHECK-NEXT: {{  $}}
292   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
293   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @array_int
294   ; CHECK-NEXT:   %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @array_int)
295   ; CHECK-NEXT: {{  $}}
296   ; CHECK-NEXT: bb.1:
297   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
298   ; CHECK-NEXT: {{  $}}
299   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
300   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
301   ; CHECK-NEXT: {{  $}}
302   ; CHECK-NEXT: bb.2:
303   ; CHECK-NEXT:   $w1 = COPY [[PHI]](s32)
304   ; CHECK-NEXT:   RET_ReallyLR implicit $w1
305   bb.0:
306     liveins: $w0
307     successors: %bb.1
308     %0:_(s32) = COPY $w0
309     %1:_(p0) = G_GLOBAL_VALUE @array_int
310     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @array_int)
312   bb.1:
313     successors: %bb.1, %bb.2
314     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
315     G_BRCOND %0, %bb.1
317   bb.2:
318     $w1 = COPY %2
319     RET_ReallyLR implicit $w1
323 name:            array_load_int_fpr
324 legalized:       true
325 regBankSelected: false
326 tracksRegLiveness: true
327 body:             |
328   ; CHECK-LABEL: name: array_load_int_fpr
329   ; CHECK: bb.0:
330   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
331   ; CHECK-NEXT:   liveins: $w0
332   ; CHECK-NEXT: {{  $}}
333   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
334   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @array_int
335   ; CHECK-NEXT:   %fp_load:fpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @array_int)
336   ; CHECK-NEXT: {{  $}}
337   ; CHECK-NEXT: bb.1:
338   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
339   ; CHECK-NEXT: {{  $}}
340   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
341   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
342   ; CHECK-NEXT: {{  $}}
343   ; CHECK-NEXT: bb.2:
344   ; CHECK-NEXT:   $s0 = COPY [[PHI]](s32)
345   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
346   bb.0:
347     liveins: $w0
348     successors: %bb.1
349     %0:_(s32) = COPY $w0
350     %1:_(p0) = G_GLOBAL_VALUE @array_int
351     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @array_int)
353   bb.1:
354     successors: %bb.1, %bb.2
355     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
356     G_BRCOND %0, %bb.1
358   bb.2:
359     $s0 = COPY %2
360     RET_ReallyLR implicit $s0
364 name:            struct_array_load_int_gpr
365 legalized:       true
366 regBankSelected: false
367 tracksRegLiveness: true
368 body:             |
369   ; CHECK-LABEL: name: struct_array_load_int_gpr
370   ; CHECK: bb.0:
371   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
372   ; CHECK-NEXT:   liveins: $w0
373   ; CHECK-NEXT: {{  $}}
374   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
375   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_array_int
376   ; CHECK-NEXT:   %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_array_int)
377   ; CHECK-NEXT: {{  $}}
378   ; CHECK-NEXT: bb.1:
379   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
380   ; CHECK-NEXT: {{  $}}
381   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
382   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
383   ; CHECK-NEXT: {{  $}}
384   ; CHECK-NEXT: bb.2:
385   ; CHECK-NEXT:   $w1 = COPY [[PHI]](s32)
386   ; CHECK-NEXT:   RET_ReallyLR implicit $w1
387   bb.0:
388     liveins: $w0
389     successors: %bb.1
390     %0:_(s32) = COPY $w0
391     %1:_(p0) = G_GLOBAL_VALUE @struct_array_int
392     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_array_int)
394   bb.1:
395     successors: %bb.1, %bb.2
396     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
397     G_BRCOND %0, %bb.1
399   bb.2:
400     $w1 = COPY %2
401     RET_ReallyLR implicit $w1
405 name:            struct_array_load_int_fpr
406 legalized:       true
407 regBankSelected: false
408 tracksRegLiveness: true
409 body:             |
410   ; CHECK-LABEL: name: struct_array_load_int_fpr
411   ; CHECK: bb.0:
412   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
413   ; CHECK-NEXT:   liveins: $w0
414   ; CHECK-NEXT: {{  $}}
415   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
416   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_array_int
417   ; CHECK-NEXT:   %fp_load:fpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_array_int)
418   ; CHECK-NEXT: {{  $}}
419   ; CHECK-NEXT: bb.1:
420   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
421   ; CHECK-NEXT: {{  $}}
422   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
423   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
424   ; CHECK-NEXT: {{  $}}
425   ; CHECK-NEXT: bb.2:
426   ; CHECK-NEXT:   $s0 = COPY [[PHI]](s32)
427   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
428   bb.0:
429     liveins: $w0
430     successors: %bb.1
431     %0:_(s32) = COPY $w0
432     %1:_(p0) = G_GLOBAL_VALUE @struct_array_int
433     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_array_int)
435   bb.1:
436     successors: %bb.1, %bb.2
437     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
438     G_BRCOND %0, %bb.1
440   bb.2:
441     $s0 = COPY %2
442     RET_ReallyLR implicit $s0
446 name:            struct_struct_array_load_int_gpr
447 legalized:       true
448 regBankSelected: false
449 tracksRegLiveness: true
450 body:             |
451   ; CHECK-LABEL: name: struct_struct_array_load_int_gpr
452   ; CHECK: bb.0:
453   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
454   ; CHECK-NEXT:   liveins: $w0
455   ; CHECK-NEXT: {{  $}}
456   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
457   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_struct_array_int
458   ; CHECK-NEXT:   %fp_load:gpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_struct_array_int)
459   ; CHECK-NEXT: {{  $}}
460   ; CHECK-NEXT: bb.1:
461   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
462   ; CHECK-NEXT: {{  $}}
463   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
464   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
465   ; CHECK-NEXT: {{  $}}
466   ; CHECK-NEXT: bb.2:
467   ; CHECK-NEXT:   $w1 = COPY [[PHI]](s32)
468   ; CHECK-NEXT:   RET_ReallyLR implicit $w1
469   bb.0:
470     liveins: $w0
471     successors: %bb.1
472     %0:_(s32) = COPY $w0
473     %1:_(p0) = G_GLOBAL_VALUE @struct_struct_array_int
474     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_struct_array_int)
476   bb.1:
477     successors: %bb.1, %bb.2
478     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
479     G_BRCOND %0, %bb.1
481   bb.2:
482     $w1 = COPY %2
483     RET_ReallyLR implicit $w1
487 name:            struct_struct_array_load_int_fpr
488 legalized:       true
489 regBankSelected: false
490 tracksRegLiveness: true
491 body:             |
492   ; CHECK-LABEL: name: struct_struct_array_load_int_fpr
493   ; CHECK: bb.0:
494   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
495   ; CHECK-NEXT:   liveins: $w0
496   ; CHECK-NEXT: {{  $}}
497   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
498   ; CHECK-NEXT:   [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @struct_struct_array_int
499   ; CHECK-NEXT:   %fp_load:fpr(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load (s64) from @struct_struct_array_int)
500   ; CHECK-NEXT: {{  $}}
501   ; CHECK-NEXT: bb.1:
502   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
503   ; CHECK-NEXT: {{  $}}
504   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr(s32) = PHI %fp_load(s64), %bb.0, [[PHI]](s32), %bb.1
505   ; CHECK-NEXT:   G_BRCOND [[COPY]](s32), %bb.1
506   ; CHECK-NEXT: {{  $}}
507   ; CHECK-NEXT: bb.2:
508   ; CHECK-NEXT:   $s0 = COPY [[PHI]](s32)
509   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
510   bb.0:
511     liveins: $w0
512     successors: %bb.1
513     %0:_(s32) = COPY $w0
514     %1:_(p0) = G_GLOBAL_VALUE @struct_struct_array_int
515     %fp_load:_(s64) = G_LOAD %1(p0) :: (dereferenceable load (s64) from @struct_struct_array_int)
517   bb.1:
518     successors: %bb.1, %bb.2
519     %2:_(s32) = PHI %fp_load, %bb.0, %2, %bb.1
520     G_BRCOND %0, %bb.1
522   bb.2:
523     $s0 = COPY %2
524     RET_ReallyLR implicit $s0