[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-store.mir
blob88a01f043586f2dd4b87df0a40466b60456178a5
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=1 %s -o - | FileCheck %s
4 --- |
5   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
7   define void @store_s64_gpr(i64* %addr) { ret void }
8   define void @store_s32_gpr(i32* %addr) { ret void }
9   define void @store_s16_gpr(i16* %addr) { ret void }
10   define void @store_s8_gpr(i8* %addr) { ret void }
12   define void @store_zero_s64_gpr(i64* %addr) { ret void }
13   define void @store_zero_s32_gpr(i32* %addr) { ret void }
14   define void @store_zero_s16(i32* %addr) { ret void }
15   define void @store_zero_s8(i32* %addr) { ret void }
16   define void @store_zero_look_through_cst(i32* %addr) { ret void }
18   define void @store_fi_s64_gpr() {
19     %ptr0 = alloca i64
20     ret void
21   }
23   define void @store_gep_128_s64_gpr(i64* %addr) { ret void }
24   define void @store_gep_512_s32_gpr(i32* %addr) { ret void }
25   define void @store_gep_64_s16_gpr(i16* %addr) { ret void }
26   define void @store_gep_1_s8_gpr(i8* %addr) { ret void }
28   define void @store_s64_fpr(i64* %addr) { ret void }
29   define void @store_s32_fpr(i32* %addr) { ret void }
31   define void @store_gep_8_s64_fpr(i64* %addr) { ret void }
32   define void @store_gep_8_s32_fpr(i32* %addr) { ret void }
34   define void @store_v2s32(i64 *%addr) { ret void }
35   define void @store_v2s64(i64 *%addr) { ret void }
37   define void @store_4xi16(<4 x i16> %v, <4 x i16>* %ptr) { ret void }
38   define void @store_4xi32(<4 x i32> %v, <4 x i32>* %ptr) { ret void }
39   define void @store_8xi16(<8 x i16> %v, <8 x i16>* %ptr) { ret void }
40   define void @store_16xi8(<16 x i8> %v, <16 x i8>* %ptr) { ret void }
42   @x = external hidden local_unnamed_addr global i32*, align 8
43   define void @store_adrp_add_low() { ret void }
44   define void @store_adrp_add_low_foldable_offset() { ret void }
45   define void @store_adrp_add_low_unfoldable_offset() { ret void }
47   define void @truncstores(i8* %addr) { ret void }
48 ...
50 ---
51 name:            store_s64_gpr
52 legalized:       true
53 regBankSelected: true
55 registers:
56   - { id: 0, class: gpr }
57   - { id: 1, class: gpr }
59 body:             |
60   bb.0:
61     liveins: $x0, $x1
63     ; CHECK-LABEL: name: store_s64_gpr
64     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
65     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
66     ; CHECK-NEXT: STRXui [[COPY1]], [[COPY]], 0 :: (store (s64) into %ir.addr)
67     %0(p0) = COPY $x0
68     %1(s64) = COPY $x1
69     G_STORE  %1, %0 :: (store (s64) into %ir.addr)
71 ...
73 ---
74 name:            store_s32_gpr
75 legalized:       true
76 regBankSelected: true
78 registers:
79   - { id: 0, class: gpr }
80   - { id: 1, class: gpr }
82 body:             |
83   bb.0:
84     liveins: $x0, $w1
86     ; CHECK-LABEL: name: store_s32_gpr
87     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
88     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
89     ; CHECK-NEXT: STRWui [[COPY1]], [[COPY]], 0 :: (store (s32) into %ir.addr)
90     %0(p0) = COPY $x0
91     %1(s32) = COPY $w1
92     G_STORE  %1, %0 :: (store (s32) into %ir.addr)
94 ...
96 ---
97 name:            store_s16_gpr
98 legalized:       true
99 regBankSelected: true
101 registers:
102   - { id: 0, class: gpr }
103   - { id: 1, class: gpr }
105 body:             |
106   bb.0:
107     liveins: $x0, $w1
109     ; CHECK-LABEL: name: store_s16_gpr
110     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
111     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
112     ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 0 :: (store (s16) into %ir.addr)
113     %0(p0) = COPY $x0
114     %2:gpr(s32) = COPY $w1
115     %1(s16) = G_TRUNC %2
116     G_STORE  %1, %0 :: (store (s16) into %ir.addr)
121 name:            store_s8_gpr
122 legalized:       true
123 regBankSelected: true
125 registers:
126   - { id: 0, class: gpr }
127   - { id: 1, class: gpr }
129 body:             |
130   bb.0:
131     liveins: $x0, $w1
133     ; CHECK-LABEL: name: store_s8_gpr
134     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
135     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
136     ; CHECK-NEXT: STRBBui [[COPY1]], [[COPY]], 0 :: (store (s8) into %ir.addr)
137     %0(p0) = COPY $x0
138     %2:gpr(s32) = COPY $w1
139     %1(s8) = G_TRUNC %2
140     G_STORE  %1, %0 :: (store (s8) into %ir.addr)
145 name:            store_zero_s64_gpr
146 legalized:       true
147 regBankSelected: true
149 registers:
150   - { id: 0, class: gpr }
151   - { id: 1, class: gpr }
153 body:             |
154   bb.0:
155     liveins: $x0, $x1
157     ; CHECK-LABEL: name: store_zero_s64_gpr
158     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
159     ; CHECK-NEXT: STRXui $xzr, [[COPY]], 0 :: (store (s64) into %ir.addr)
160     %0(p0) = COPY $x0
161     %1(s64) = G_CONSTANT i64 0
162     G_STORE  %1, %0 :: (store (s64) into %ir.addr)
167 name:            store_zero_s32_gpr
168 legalized:       true
169 regBankSelected: true
171 registers:
172   - { id: 0, class: gpr }
173   - { id: 1, class: gpr }
175 body:             |
176   bb.0:
177     liveins: $x0
179     ; CHECK-LABEL: name: store_zero_s32_gpr
180     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
181     ; CHECK-NEXT: STRWui $wzr, [[COPY]], 0 :: (store (s32) into %ir.addr)
182     %0(p0) = COPY $x0
183     %1(s32) = G_CONSTANT i32 0
184     G_STORE  %1, %0 :: (store (s32) into %ir.addr)
189 name:            store_zero_s16
190 legalized:       true
191 regBankSelected: true
192 body:             |
193   bb.0:
194     liveins: $x0
195     ; CHECK-LABEL: name: store_zero_s16
196     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
197     ; CHECK-NEXT: STRHHui $wzr, [[COPY]], 0 :: (store (s16))
198     %0:gpr(p0) = COPY $x0
199     %1:gpr(s16) = G_CONSTANT i16 0
200     G_STORE %1(s16), %0(p0) :: (store (s16))
205 name:            store_zero_s8
206 legalized:       true
207 regBankSelected: true
208 body:             |
209   bb.0:
210     liveins: $x0
211     ; CHECK-LABEL: name: store_zero_s8
212     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
213     ; CHECK-NEXT: STRBBui $wzr, [[COPY]], 0 :: (store (s8))
214     %0:gpr(p0) = COPY $x0
215     %1:gpr(s8) = G_CONSTANT i8 0
216     G_STORE %1(s8), %0(p0) :: (store (s8))
220 name:            store_zero_look_through_cst
221 legalized:       true
222 regBankSelected: true
223 body:             |
224   bb.0:
225     liveins: $x0
226     ; CHECK-LABEL: name: store_zero_look_through_cst
227     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
228     ; CHECK-NEXT: STRXui $xzr, [[COPY]], 0 :: (store (s64) into %ir.addr)
229     %0:gpr(p0) = COPY $x0
230     %1:gpr(s32) = G_CONSTANT i32 0
231     %2:gpr(s64) = G_ZEXT %1
232     G_STORE %2, %0 :: (store (s64) into %ir.addr)
236 name:            store_fi_s64_gpr
237 legalized:       true
238 regBankSelected: true
240 registers:
241   - { id: 0, class: gpr }
242   - { id: 1, class: gpr }
244 stack:
245   - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
247 body:             |
248   bb.0:
249     liveins: $x0
251     ; CHECK-LABEL: name: store_fi_s64_gpr
252     ; CHECK: [[COPY:%[0-9]+]]:gpr64all = COPY $x0
253     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[COPY]]
254     ; CHECK-NEXT: STRXui [[COPY1]], %stack.0.ptr0, 0 :: (store (p0))
255     %0(p0) = COPY $x0
256     %1(p0) = G_FRAME_INDEX %stack.0.ptr0
257     G_STORE  %0, %1 :: (store (p0))
261 name:            store_gep_128_s64_gpr
262 legalized:       true
263 regBankSelected: true
265 registers:
266   - { id: 0, class: gpr }
267   - { id: 1, class: gpr }
268   - { id: 2, class: gpr }
269   - { id: 3, class: gpr }
271 body:             |
272   bb.0:
273     liveins: $x0, $x1
275     ; CHECK-LABEL: name: store_gep_128_s64_gpr
276     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
277     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
278     ; CHECK-NEXT: STRXui [[COPY1]], [[COPY]], 16 :: (store (s64) into %ir.addr)
279     %0(p0) = COPY $x0
280     %1(s64) = COPY $x1
281     %2(s64) = G_CONSTANT i64 128
282     %3(p0) = G_PTR_ADD %0, %2
283     G_STORE %1, %3 :: (store (s64) into %ir.addr)
287 name:            store_gep_512_s32_gpr
288 legalized:       true
289 regBankSelected: true
291 registers:
292   - { id: 0, class: gpr }
293   - { id: 1, class: gpr }
294   - { id: 2, class: gpr }
295   - { id: 3, class: gpr }
297 body:             |
298   bb.0:
299     liveins: $x0, $w1
301     ; CHECK-LABEL: name: store_gep_512_s32_gpr
302     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
303     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
304     ; CHECK-NEXT: STRWui [[COPY1]], [[COPY]], 128 :: (store (s32) into %ir.addr)
305     %0(p0) = COPY $x0
306     %1(s32) = COPY $w1
307     %2(s64) = G_CONSTANT i64 512
308     %3(p0) = G_PTR_ADD %0, %2
309     G_STORE %1, %3 :: (store (s32) into %ir.addr)
313 name:            store_gep_64_s16_gpr
314 legalized:       true
315 regBankSelected: true
317 registers:
318   - { id: 0, class: gpr }
319   - { id: 1, class: gpr }
320   - { id: 2, class: gpr }
321   - { id: 3, class: gpr }
323 body:             |
324   bb.0:
325     liveins: $x0, $w1
327     ; CHECK-LABEL: name: store_gep_64_s16_gpr
328     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
329     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
330     ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 32 :: (store (s16) into %ir.addr)
331     %0(p0) = COPY $x0
332     %4:gpr(s32) = COPY $w1
333     %1(s16) = G_TRUNC %4
334     %2(s64) = G_CONSTANT i64 64
335     %3(p0) = G_PTR_ADD %0, %2
336     G_STORE %1, %3 :: (store (s16) into %ir.addr)
340 name:            store_gep_1_s8_gpr
341 legalized:       true
342 regBankSelected: true
344 registers:
345   - { id: 0, class: gpr }
346   - { id: 1, class: gpr }
347   - { id: 2, class: gpr }
348   - { id: 3, class: gpr }
350 body:             |
351   bb.0:
352     liveins: $x0, $w1
354     ; CHECK-LABEL: name: store_gep_1_s8_gpr
355     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
356     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
357     ; CHECK-NEXT: STRBBui [[COPY1]], [[COPY]], 1 :: (store (s8) into %ir.addr)
358     %0(p0) = COPY $x0
359     %4:gpr(s32) = COPY $w1
360     %1(s8) = G_TRUNC %4
361     %2(s64) = G_CONSTANT i64 1
362     %3(p0) = G_PTR_ADD %0, %2
363     G_STORE %1, %3 :: (store (s8) into %ir.addr)
367 name:            store_s64_fpr
368 legalized:       true
369 regBankSelected: true
371 registers:
372   - { id: 0, class: gpr }
373   - { id: 1, class: fpr }
375 body:             |
376   bb.0:
377     liveins: $x0, $d1
379     ; CHECK-LABEL: name: store_s64_fpr
380     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
381     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
382     ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 0 :: (store (s64) into %ir.addr)
383     %0(p0) = COPY $x0
384     %1(s64) = COPY $d1
385     G_STORE %1, %0 :: (store (s64) into %ir.addr)
390 name:            store_s32_fpr
391 legalized:       true
392 regBankSelected: true
394 registers:
395   - { id: 0, class: gpr }
396   - { id: 1, class: fpr }
398 body:             |
399   bb.0:
400     liveins: $x0, $s1
402     ; CHECK-LABEL: name: store_s32_fpr
403     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
404     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1
405     ; CHECK-NEXT: STRSui [[COPY1]], [[COPY]], 0 :: (store (s32) into %ir.addr)
406     %0(p0) = COPY $x0
407     %1(s32) = COPY $s1
408     G_STORE %1, %0 :: (store (s32) into %ir.addr)
413 name:            store_gep_8_s64_fpr
414 legalized:       true
415 regBankSelected: true
417 registers:
418   - { id: 0, class: gpr }
419   - { id: 1, class: fpr }
420   - { id: 2, class: gpr }
421   - { id: 3, class: gpr }
423 body:             |
424   bb.0:
425     liveins: $x0, $d1
427     ; CHECK-LABEL: name: store_gep_8_s64_fpr
428     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
429     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
430     ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 1 :: (store (s64) into %ir.addr)
431     %0(p0) = COPY $x0
432     %1(s64) = COPY $d1
433     %2(s64) = G_CONSTANT i64 8
434     %3(p0) = G_PTR_ADD %0, %2
435     G_STORE %1, %3 :: (store (s64) into %ir.addr)
439 name:            store_gep_8_s32_fpr
440 legalized:       true
441 regBankSelected: true
443 registers:
444   - { id: 0, class: gpr }
445   - { id: 1, class: fpr }
446   - { id: 2, class: gpr }
447   - { id: 3, class: gpr }
449 body:             |
450   bb.0:
451     liveins: $x0, $s1
453     ; CHECK-LABEL: name: store_gep_8_s32_fpr
454     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
455     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1
456     ; CHECK-NEXT: STRSui [[COPY1]], [[COPY]], 2 :: (store (s32) into %ir.addr)
457     %0(p0) = COPY $x0
458     %1(s32) = COPY $s1
459     %2(s64) = G_CONSTANT i64 8
460     %3(p0) = G_PTR_ADD %0, %2
461     G_STORE %1, %3 :: (store (s32) into %ir.addr)
464 name:            store_v2s32
465 legalized:       true
466 regBankSelected: true
468 registers:
469   - { id: 0, class: gpr }
470   - { id: 1, class: fpr }
472 body:             |
473   bb.0:
474     liveins: $x0, $d1
476     ; CHECK-LABEL: name: store_v2s32
477     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
478     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
479     ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 0 :: (store (<2 x s32>) into %ir.addr)
480     %0(p0) = COPY $x0
481     %1(<2 x s32>) = COPY $d1
482     G_STORE  %1, %0 :: (store (<2 x s32>) into %ir.addr)
486 name:            store_v2s64
487 legalized:       true
488 regBankSelected: true
490 registers:
491   - { id: 0, class: gpr }
492   - { id: 1, class: fpr }
494 body:             |
495   bb.0:
496     liveins: $x0, $d1
497     ; CHECK-LABEL: name: store_v2s64
498     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
499     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
500     ; CHECK-NEXT: STRQui [[COPY1]], [[COPY]], 0 :: (store (<2 x s64>) into %ir.addr, align 8)
501     %0(p0) = COPY $x0
502     %1(<2 x s64>) = COPY $q1
503     G_STORE %1, %0 :: (store (<2 x s64>) into %ir.addr, align 8)
507 name:            store_4xi16
508 alignment:       4
509 legalized:       true
510 regBankSelected: true
511 tracksRegLiveness: true
512 registers:
513   - { id: 0, class: fpr }
514   - { id: 1, class: gpr }
515 machineFunctionInfo: {}
516 body:             |
517   bb.1 (%ir-block.0):
518     liveins: $d0, $x0
520     ; CHECK-LABEL: name: store_4xi16
521     ; CHECK: liveins: $d0, $x0
522     ; CHECK-NEXT: {{  $}}
523     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
524     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
525     ; CHECK-NEXT: STRDui [[COPY]], [[COPY1]], 0 :: (store (<4 x s16>) into %ir.ptr)
526     ; CHECK-NEXT: RET_ReallyLR
527     %0:fpr(<4 x s16>) = COPY $d0
528     %1:gpr(p0) = COPY $x0
529     G_STORE %0(<4 x s16>), %1(p0) :: (store (<4 x s16>) into %ir.ptr)
530     RET_ReallyLR
534 name:            store_4xi32
535 alignment:       4
536 legalized:       true
537 regBankSelected: true
538 tracksRegLiveness: true
539 registers:
540   - { id: 0, class: fpr }
541   - { id: 1, class: gpr }
542 machineFunctionInfo: {}
543 body:             |
544   bb.1 (%ir-block.0):
545     liveins: $q0, $x0
547     ; CHECK-LABEL: name: store_4xi32
548     ; CHECK: liveins: $q0, $x0
549     ; CHECK-NEXT: {{  $}}
550     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
551     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
552     ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<4 x s32>) into %ir.ptr)
553     ; CHECK-NEXT: RET_ReallyLR
554     %0:fpr(<4 x s32>) = COPY $q0
555     %1:gpr(p0) = COPY $x0
556     G_STORE %0(<4 x s32>), %1(p0) :: (store (<4 x s32>) into %ir.ptr)
557     RET_ReallyLR
561 name:            store_8xi16
562 alignment:       4
563 legalized:       true
564 regBankSelected: true
565 tracksRegLiveness: true
566 registers:
567   - { id: 0, class: fpr }
568   - { id: 1, class: gpr }
569 machineFunctionInfo: {}
570 body:             |
571   bb.1 (%ir-block.0):
572     liveins: $q0, $x0
574     ; CHECK-LABEL: name: store_8xi16
575     ; CHECK: liveins: $q0, $x0
576     ; CHECK-NEXT: {{  $}}
577     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
578     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
579     ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<8 x s16>) into %ir.ptr)
580     ; CHECK-NEXT: RET_ReallyLR
581     %0:fpr(<8 x s16>) = COPY $q0
582     %1:gpr(p0) = COPY $x0
583     G_STORE %0(<8 x s16>), %1(p0) :: (store (<8 x s16>) into %ir.ptr)
584     RET_ReallyLR
588 name:            store_16xi8
589 alignment:       4
590 legalized:       true
591 regBankSelected: true
592 tracksRegLiveness: true
593 registers:
594   - { id: 0, class: fpr }
595   - { id: 1, class: gpr }
596 machineFunctionInfo: {}
597 body:             |
598   bb.1 (%ir-block.0):
599     liveins: $q0, $x0
601     ; CHECK-LABEL: name: store_16xi8
602     ; CHECK: liveins: $q0, $x0
603     ; CHECK-NEXT: {{  $}}
604     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
605     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
606     ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<16 x s8>) into %ir.ptr)
607     ; CHECK-NEXT: RET_ReallyLR
608     %0:fpr(<16 x s8>) = COPY $q0
609     %1:gpr(p0) = COPY $x0
610     G_STORE %0(<16 x s8>), %1(p0) :: (store (<16 x s8>) into %ir.ptr)
611     RET_ReallyLR
615 name:            store_adrp_add_low
616 legalized:       true
617 regBankSelected: true
618 tracksRegLiveness: true
619 body:             |
620   bb.0:
621     liveins: $x0
622     ; CHECK-LABEL: name: store_adrp_add_low
623     ; CHECK: liveins: $x0
624     ; CHECK-NEXT: {{  $}}
625     ; CHECK-NEXT: %copy:gpr64all = COPY $x0
626     ; CHECK-NEXT: %adrp:gpr64common = ADRP target-flags(aarch64-page) @x
627     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy
628     ; CHECK-NEXT: STRXui [[COPY]], %adrp, target-flags(aarch64-pageoff, aarch64-nc) @x :: (store (p0) into @x)
629     %copy:gpr(p0) = COPY $x0
630     %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x
631     %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x
632     G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)
636 name:            store_adrp_add_low_foldable_offset
637 legalized:       true
638 regBankSelected: true
639 tracksRegLiveness: true
640 body:             |
641   bb.0:
642     liveins: $x0
643     ; CHECK-LABEL: name: store_adrp_add_low_foldable_offset
644     ; CHECK: liveins: $x0
645     ; CHECK-NEXT: {{  $}}
646     ; CHECK-NEXT: %copy:gpr64all = COPY $x0
647     ; CHECK-NEXT: %adrp:gpr64common = ADRP target-flags(aarch64-page) @x + 8
648     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy
649     ; CHECK-NEXT: STRXui [[COPY]], %adrp, target-flags(aarch64-pageoff, aarch64-nc) @x + 8 :: (store (p0) into @x)
650     %copy:gpr(p0) = COPY $x0
651     %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x + 8
652     %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x + 8
653     G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)
657 name:            store_adrp_add_low_unfoldable_offset
658 legalized:       true
659 regBankSelected: true
660 tracksRegLiveness: true
661 body:             |
662   bb.0:
663     liveins: $x0
664     ; CHECK-LABEL: name: store_adrp_add_low_unfoldable_offset
665     ; CHECK: liveins: $x0
666     ; CHECK-NEXT: {{  $}}
667     ; CHECK-NEXT: %copy:gpr64all = COPY $x0
668     ; CHECK-NEXT: %add_low:gpr64common = MOVaddr target-flags(aarch64-page) @x + 3, target-flags(aarch64-pageoff, aarch64-nc) @x + 3
669     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy
670     ; CHECK-NEXT: STRXui [[COPY]], %add_low, 0 :: (store (p0) into @x)
671     %copy:gpr(p0) = COPY $x0
672     %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x + 3
673     %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x + 3
674     G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)
678 name:            truncstores
679 legalized:       true
680 regBankSelected: true
681 body:             |
682   bb.0:
683     liveins: $x0, $w1, $x2
685     ; CHECK-LABEL: name: truncstores
686     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
687     ; CHECK-NEXT: %val32:gpr32 = COPY $w1
688     ; CHECK-NEXT: %val64:gpr64 = COPY $x2
689     ; CHECK-NEXT: STRBBui %val32, [[COPY]], 0 :: (store (s8))
690     ; CHECK-NEXT: STRBBui %val32, [[COPY]], 43 :: (store (s8))
691     ; CHECK-NEXT: STRHHui %val32, [[COPY]], 0 :: (store (s16))
692     ; CHECK-NEXT: STURHHi %val32, [[COPY]], 43 :: (store (s16))
693     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY %val64.sub_32
694     ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 0 :: (store (s16))
695     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY %val64.sub_32
696     ; CHECK-NEXT: STURHHi [[COPY2]], [[COPY]], 43 :: (store (s16))
697     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32 = COPY %val64.sub_32
698     ; CHECK-NEXT: STRWui [[COPY3]], [[COPY]], 0 :: (store (s32))
699     ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY %val64.sub_32
700     ; CHECK-NEXT: STURWi [[COPY4]], [[COPY]], 43 :: (store (s32))
701     %0:gpr(p0) = COPY $x0
702     %val32:gpr(s32) = COPY $w1
703     %val64:gpr(s64) = COPY $x2
704     G_STORE %val32, %0 :: (store (s8))
705     ; unscaled offset:
706     %cst:gpr(s64) = G_CONSTANT i64 43
707     %newptr:gpr(p0) = G_PTR_ADD %0, %cst
708     G_STORE %val32, %newptr :: (store (s8))
710     G_STORE %val32, %0 :: (store (s16))
711     ; unscaled offset:
712     G_STORE %val32, %newptr :: (store (s16))
714     G_STORE %val64, %0 :: (store (s16))
715     ; unscaled offset:
716     G_STORE %val64, %newptr :: (store (s16))
718     G_STORE %val64, %0 :: (store (s32))
719     ; unscaled offset:
720     G_STORE %val64, %newptr :: (store (s32))