[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-store.mir
blob38bfa9eee8a64a6e06ea8a266d1432318536c8c5
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: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
66     ; CHECK: 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: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
89     ; CHECK: 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: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
112     ; CHECK: 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: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
136     ; CHECK: 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: 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: 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: 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: 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: 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: [[COPY1:%[0-9]+]]:gpr64 = COPY [[COPY]]
254     ; CHECK: 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: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
278     ; CHECK: 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: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
304     ; CHECK: 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: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
330     ; CHECK: 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: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
357     ; CHECK: 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: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
382     ; CHECK: 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: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1
405     ; CHECK: 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: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
430     ; CHECK: 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: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1
456     ; CHECK: 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: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
479     ; CHECK: 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: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
500     ; CHECK: 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: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
523     ; CHECK: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
524     ; CHECK: STRDui [[COPY]], [[COPY1]], 0 :: (store (<4 x s16>) into %ir.ptr)
525     ; CHECK: RET_ReallyLR
526     %0:fpr(<4 x s16>) = COPY $d0
527     %1:gpr(p0) = COPY $x0
528     G_STORE %0(<4 x s16>), %1(p0) :: (store (<4 x s16>) into %ir.ptr)
529     RET_ReallyLR
533 name:            store_4xi32
534 alignment:       4
535 legalized:       true
536 regBankSelected: true
537 tracksRegLiveness: true
538 registers:
539   - { id: 0, class: fpr }
540   - { id: 1, class: gpr }
541 machineFunctionInfo: {}
542 body:             |
543   bb.1 (%ir-block.0):
544     liveins: $q0, $x0
546     ; CHECK-LABEL: name: store_4xi32
547     ; CHECK: liveins: $q0, $x0
548     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
549     ; CHECK: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
550     ; CHECK: STRQui [[COPY]], [[COPY1]], 0 :: (store (<4 x s32>) into %ir.ptr)
551     ; CHECK: RET_ReallyLR
552     %0:fpr(<4 x s32>) = COPY $q0
553     %1:gpr(p0) = COPY $x0
554     G_STORE %0(<4 x s32>), %1(p0) :: (store (<4 x s32>) into %ir.ptr)
555     RET_ReallyLR
559 name:            store_8xi16
560 alignment:       4
561 legalized:       true
562 regBankSelected: true
563 tracksRegLiveness: true
564 registers:
565   - { id: 0, class: fpr }
566   - { id: 1, class: gpr }
567 machineFunctionInfo: {}
568 body:             |
569   bb.1 (%ir-block.0):
570     liveins: $q0, $x0
572     ; CHECK-LABEL: name: store_8xi16
573     ; CHECK: liveins: $q0, $x0
574     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
575     ; CHECK: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
576     ; CHECK: STRQui [[COPY]], [[COPY1]], 0 :: (store (<8 x s16>) into %ir.ptr)
577     ; CHECK: RET_ReallyLR
578     %0:fpr(<8 x s16>) = COPY $q0
579     %1:gpr(p0) = COPY $x0
580     G_STORE %0(<8 x s16>), %1(p0) :: (store (<8 x s16>) into %ir.ptr)
581     RET_ReallyLR
585 name:            store_16xi8
586 alignment:       4
587 legalized:       true
588 regBankSelected: true
589 tracksRegLiveness: true
590 registers:
591   - { id: 0, class: fpr }
592   - { id: 1, class: gpr }
593 machineFunctionInfo: {}
594 body:             |
595   bb.1 (%ir-block.0):
596     liveins: $q0, $x0
598     ; CHECK-LABEL: name: store_16xi8
599     ; CHECK: liveins: $q0, $x0
600     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
601     ; CHECK: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
602     ; CHECK: STRQui [[COPY]], [[COPY1]], 0 :: (store (<16 x s8>) into %ir.ptr)
603     ; CHECK: RET_ReallyLR
604     %0:fpr(<16 x s8>) = COPY $q0
605     %1:gpr(p0) = COPY $x0
606     G_STORE %0(<16 x s8>), %1(p0) :: (store (<16 x s8>) into %ir.ptr)
607     RET_ReallyLR
611 name:            store_adrp_add_low
612 legalized:       true
613 regBankSelected: true
614 tracksRegLiveness: true
615 body:             |
616   bb.0:
617     liveins: $x0
618     ; CHECK-LABEL: name: store_adrp_add_low
619     ; CHECK: liveins: $x0
620     ; CHECK: %copy:gpr64all = COPY $x0
621     ; CHECK: %adrp:gpr64common = ADRP target-flags(aarch64-page) @x
622     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %copy
623     ; CHECK: STRXui [[COPY]], %adrp, target-flags(aarch64-pageoff, aarch64-nc) @x :: (store (p0) into @x)
624     %copy:gpr(p0) = COPY $x0
625     %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x
626     %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x
627     G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)
631 name:            store_adrp_add_low_foldable_offset
632 legalized:       true
633 regBankSelected: true
634 tracksRegLiveness: true
635 body:             |
636   bb.0:
637     liveins: $x0
638     ; CHECK-LABEL: name: store_adrp_add_low_foldable_offset
639     ; CHECK: liveins: $x0
640     ; CHECK: %copy:gpr64all = COPY $x0
641     ; CHECK: %adrp:gpr64common = ADRP target-flags(aarch64-page) @x + 8
642     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %copy
643     ; CHECK: STRXui [[COPY]], %adrp, target-flags(aarch64-pageoff, aarch64-nc) @x + 8 :: (store (p0) into @x)
644     %copy:gpr(p0) = COPY $x0
645     %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x + 8
646     %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x + 8
647     G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)
651 name:            store_adrp_add_low_unfoldable_offset
652 legalized:       true
653 regBankSelected: true
654 tracksRegLiveness: true
655 body:             |
656   bb.0:
657     liveins: $x0
658     ; CHECK-LABEL: name: store_adrp_add_low_unfoldable_offset
659     ; CHECK: liveins: $x0
660     ; CHECK: %copy:gpr64all = COPY $x0
661     ; CHECK: %add_low:gpr64common = MOVaddr target-flags(aarch64-page) @x + 3, target-flags(aarch64-pageoff, aarch64-nc) @x + 3
662     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %copy
663     ; CHECK: STRXui [[COPY]], %add_low, 0 :: (store (p0) into @x)
664     %copy:gpr(p0) = COPY $x0
665     %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x + 3
666     %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x + 3
667     G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)
671 name:            truncstores
672 legalized:       true
673 regBankSelected: true
674 body:             |
675   bb.0:
676     liveins: $x0, $w1, $x2
678     ; CHECK-LABEL: name: truncstores
679     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
680     ; CHECK: %val32:gpr32 = COPY $w1
681     ; CHECK: %val64:gpr64 = COPY $x2
682     ; CHECK: STRBBui %val32, [[COPY]], 0 :: (store (s8))
683     ; CHECK: STRBBui %val32, [[COPY]], 43 :: (store (s8))
684     ; CHECK: STRHHui %val32, [[COPY]], 0 :: (store (s16))
685     ; CHECK: STURHHi %val32, [[COPY]], 43 :: (store (s16))
686     ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %val64.sub_32
687     ; CHECK: STRHHui [[COPY1]], [[COPY]], 0 :: (store (s16))
688     ; CHECK: [[COPY2:%[0-9]+]]:gpr32 = COPY %val64.sub_32
689     ; CHECK: STURHHi [[COPY2]], [[COPY]], 43 :: (store (s16))
690     ; CHECK: [[COPY3:%[0-9]+]]:gpr32 = COPY %val64.sub_32
691     ; CHECK: STRWui [[COPY3]], [[COPY]], 0 :: (store (s32))
692     ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY %val64.sub_32
693     ; CHECK: STURWi [[COPY4]], [[COPY]], 43 :: (store (s32))
694     %0:gpr(p0) = COPY $x0
695     %val32:gpr(s32) = COPY $w1
696     %val64:gpr(s64) = COPY $x2
697     G_STORE %val32, %0 :: (store (s8))
698     ; unscaled offset:
699     %cst:gpr(s64) = G_CONSTANT i64 43
700     %newptr:gpr(p0) = G_PTR_ADD %0, %cst
701     G_STORE %val32, %newptr :: (store (s8))
703     G_STORE %val32, %0 :: (store (s16))
704     ; unscaled offset:
705     G_STORE %val32, %newptr :: (store (s16))
707     G_STORE %val64, %0 :: (store (s16))
708     ; unscaled offset:
709     G_STORE %val64, %newptr :: (store (s16))
711     G_STORE %val64, %0 :: (store (s32))
712     ; unscaled offset:
713     G_STORE %val64, %newptr :: (store (s32))