xref: /llvm-project/llvm/test/CodeGen/Thumb2/store-prepostinc.mir (revision 60442f0d442723a487528bdd8b48b24657a025e8)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -run-pass=arm-ldst-opt %s -o - | FileCheck %s
3
4--- |
5  target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
6  target triple = "thumbv7m-none-unknown-eabi"
7
8  define ptr @STR_pre4(ptr %p, i32 %v) { unreachable }
9  define ptr @STR_pre8(ptr %p, i32 %v) { unreachable }
10  define ptr @STR_pre255(ptr %p, i32 %v) { unreachable }
11  define ptr @STR_pre256(ptr %p, i32 %v) { unreachable }
12
13  define ptr @STRD_pre4(ptr %p, i32 %v) { unreachable }
14  define ptr @STRD_pre8(ptr %p, i32 %v) { unreachable }
15  define ptr @STRD_pre255(ptr %p, i32 %v) { unreachable }
16  define ptr @STRD_pre256(ptr %p, i32 %v) { unreachable }
17  define ptr @STRD_pre1020(ptr %p, i32 %v) { unreachable }
18  define ptr @STRD_pre1024(ptr %p, i32 %v) { unreachable }
19  define ptr @STRD_prem4(ptr %p, i32 %v) { unreachable }
20  define ptr @STRD_prem8(ptr %p, i32 %v) { unreachable }
21  define ptr @STRD_prem255(ptr %p, i32 %v) { unreachable }
22  define ptr @STRD_prem256(ptr %p, i32 %v) { unreachable }
23  define ptr @STRD_prem1020(ptr %p, i32 %v) { unreachable }
24  define ptr @STRD_prem1024(ptr %p, i32 %v) { unreachable }
25
26  define ptr @STR_post4(ptr %p, i32 %v) { unreachable }
27  define ptr @STR_post8(ptr %p, i32 %v) { unreachable }
28  define ptr @STR_post255(ptr %p, i32 %v) { unreachable }
29  define ptr @STR_post256(ptr %p, i32 %v) { unreachable }
30
31  define ptr @STRD_post4(ptr %p, i32 %v) { unreachable }
32  define ptr @STRD_post8(ptr %p, i32 %v) { unreachable }
33  define ptr @STRD_post255(ptr %p, i32 %v) { unreachable }
34  define ptr @STRD_post256(ptr %p, i32 %v) { unreachable }
35  define ptr @STRD_post1020(ptr %p, i32 %v) { unreachable }
36  define ptr @STRD_post1024(ptr %p, i32 %v) { unreachable }
37  define ptr @STRD_postm4(ptr %p, i32 %v) { unreachable }
38  define ptr @STRD_postm8(ptr %p, i32 %v) { unreachable }
39  define ptr @STRD_postm255(ptr %p, i32 %v) { unreachable }
40  define ptr @STRD_postm256(ptr %p, i32 %v) { unreachable }
41  define ptr @STRD_postm1020(ptr %p, i32 %v) { unreachable }
42  define ptr @STRD_postm1024(ptr %p, i32 %v) { unreachable }
43
44...
45---
46name:            STR_pre4
47alignment:       2
48tracksRegLiveness: true
49liveins:
50  - { reg: '$r0', virtual-reg: '' }
51  - { reg: '$r1', virtual-reg: '' }
52body:             |
53  bb.0 (%ir-block.0):
54    liveins: $r0, $r1
55
56    ; CHECK-LABEL: name: STR_pre4
57    ; CHECK: liveins: $r0, $r1
58    ; CHECK-NEXT: {{  $}}
59    ; CHECK-NEXT: early-clobber $r0 = t2STR_PRE killed $r1, $r0, 4, 14 /* CC::al */, $noreg :: (store (s32))
60    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
61    renamable $r0 = nuw t2ADDri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
62    t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
63    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
64
65...
66---
67name:            STR_pre8
68alignment:       2
69tracksRegLiveness: true
70liveins:
71  - { reg: '$r0', virtual-reg: '' }
72  - { reg: '$r1', virtual-reg: '' }
73body:             |
74  bb.0 (%ir-block.0):
75    liveins: $r0, $r1
76
77    ; CHECK-LABEL: name: STR_pre8
78    ; CHECK: liveins: $r0, $r1
79    ; CHECK-NEXT: {{  $}}
80    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
81    ; CHECK-NEXT: t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
82    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
83    renamable $r0 = nuw t2ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
84    t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
85    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
86
87...
88---
89name:            STR_pre255
90alignment:       2
91tracksRegLiveness: true
92liveins:
93  - { reg: '$r0', virtual-reg: '' }
94  - { reg: '$r1', virtual-reg: '' }
95body:             |
96  bb.0 (%ir-block.0):
97    liveins: $r0, $r1
98
99    ; CHECK-LABEL: name: STR_pre255
100    ; CHECK: liveins: $r0, $r1
101    ; CHECK-NEXT: {{  $}}
102    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
103    ; CHECK-NEXT: t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
104    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
105    renamable $r0 = nuw t2ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
106    t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
107    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
108
109...
110---
111name:            STR_pre256
112alignment:       2
113tracksRegLiveness: true
114liveins:
115  - { reg: '$r0', virtual-reg: '' }
116  - { reg: '$r1', virtual-reg: '' }
117body:             |
118  bb.0 (%ir-block.0):
119    liveins: $r0, $r1
120
121    ; CHECK-LABEL: name: STR_pre256
122    ; CHECK: liveins: $r0, $r1
123    ; CHECK-NEXT: {{  $}}
124    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
125    ; CHECK-NEXT: t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
126    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
127    renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
128    t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
129    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
130
131...
132---
133name:            STRD_pre4
134alignment:       2
135tracksRegLiveness: true
136liveins:
137  - { reg: '$r0', virtual-reg: '' }
138  - { reg: '$r1', virtual-reg: '' }
139  - { reg: '$r2', virtual-reg: '' }
140body:             |
141  bb.0 (%ir-block.0):
142    liveins: $r0, $r1, $r2
143
144    ; CHECK-LABEL: name: STRD_pre4
145    ; CHECK: liveins: $r0, $r1, $r2
146    ; CHECK-NEXT: {{  $}}
147    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
148    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
149    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
150    renamable $r0 = nuw t2ADDri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
151    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
152    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
153
154...
155---
156name:            STRD_pre8
157alignment:       2
158tracksRegLiveness: true
159liveins:
160  - { reg: '$r0', virtual-reg: '' }
161  - { reg: '$r1', virtual-reg: '' }
162  - { reg: '$r2', virtual-reg: '' }
163body:             |
164  bb.0 (%ir-block.0):
165    liveins: $r0, $r1, $r2
166
167    ; CHECK-LABEL: name: STRD_pre8
168    ; CHECK: liveins: $r0, $r1, $r2
169    ; CHECK-NEXT: {{  $}}
170    ; CHECK-NEXT: $r0 = t2STRD_PRE killed renamable $r1, killed renamable $r2, killed $r0, 8, 14 /* CC::al */, $noreg :: (store (s64))
171    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
172    renamable $r0 = nuw t2ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
173    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
174    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
175
176...
177---
178name:            STRD_pre255
179alignment:       2
180tracksRegLiveness: true
181liveins:
182  - { reg: '$r0', virtual-reg: '' }
183  - { reg: '$r1', virtual-reg: '' }
184  - { reg: '$r2', virtual-reg: '' }
185body:             |
186  bb.0 (%ir-block.0):
187    liveins: $r0, $r1, $r2
188
189    ; CHECK-LABEL: name: STRD_pre255
190    ; CHECK: liveins: $r0, $r1, $r2
191    ; CHECK-NEXT: {{  $}}
192    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
193    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
194    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
195    renamable $r0 = nuw t2ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
196    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
197    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
198
199...
200---
201name:            STRD_pre256
202alignment:       2
203tracksRegLiveness: true
204liveins:
205  - { reg: '$r0', virtual-reg: '' }
206  - { reg: '$r1', virtual-reg: '' }
207  - { reg: '$r2', virtual-reg: '' }
208body:             |
209  bb.0 (%ir-block.0):
210    liveins: $r0, $r1, $r2
211
212    ; CHECK-LABEL: name: STRD_pre256
213    ; CHECK: liveins: $r0, $r1, $r2
214    ; CHECK-NEXT: {{  $}}
215    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
216    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
217    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
218    renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
219    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
220    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
221
222...
223---
224name:            STRD_pre1020
225alignment:       2
226tracksRegLiveness: true
227liveins:
228  - { reg: '$r0', virtual-reg: '' }
229  - { reg: '$r1', virtual-reg: '' }
230  - { reg: '$r2', virtual-reg: '' }
231body:             |
232  bb.0 (%ir-block.0):
233    liveins: $r0, $r1, $r2
234
235    ; CHECK-LABEL: name: STRD_pre1020
236    ; CHECK: liveins: $r0, $r1, $r2
237    ; CHECK-NEXT: {{  $}}
238    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
239    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
240    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
241    renamable $r0 = nuw t2ADDri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
242    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
243    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
244
245...
246---
247name:            STRD_pre1024
248alignment:       2
249tracksRegLiveness: true
250liveins:
251  - { reg: '$r0', virtual-reg: '' }
252  - { reg: '$r1', virtual-reg: '' }
253  - { reg: '$r2', virtual-reg: '' }
254body:             |
255  bb.0 (%ir-block.0):
256    liveins: $r0, $r1, $r2
257
258    ; CHECK-LABEL: name: STRD_pre1024
259    ; CHECK: liveins: $r0, $r1, $r2
260    ; CHECK-NEXT: {{  $}}
261    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
262    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
263    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
264    renamable $r0 = nuw t2ADDri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
265    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
266    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
267
268...
269---
270name:            STRD_prem4
271alignment:       2
272tracksRegLiveness: true
273liveins:
274  - { reg: '$r0', virtual-reg: '' }
275  - { reg: '$r1', virtual-reg: '' }
276  - { reg: '$r2', virtual-reg: '' }
277body:             |
278  bb.0 (%ir-block.0):
279    liveins: $r0, $r1, $r2
280
281    ; CHECK-LABEL: name: STRD_prem4
282    ; CHECK: liveins: $r0, $r1, $r2
283    ; CHECK-NEXT: {{  $}}
284    ; CHECK-NEXT: renamable $r0 = nuw t2SUBri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
285    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
286    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
287    renamable $r0 = nuw t2SUBri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
288    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
289    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
290
291...
292---
293name:            STRD_prem8
294alignment:       2
295tracksRegLiveness: true
296liveins:
297  - { reg: '$r0', virtual-reg: '' }
298  - { reg: '$r1', virtual-reg: '' }
299  - { reg: '$r2', virtual-reg: '' }
300body:             |
301  bb.0 (%ir-block.0):
302    liveins: $r0, $r1, $r2
303
304    ; CHECK-LABEL: name: STRD_prem8
305    ; CHECK: liveins: $r0, $r1, $r2
306    ; CHECK-NEXT: {{  $}}
307    ; CHECK-NEXT: $r0 = t2STRD_PRE killed renamable $r1, killed renamable $r2, killed $r0, -8, 14 /* CC::al */, $noreg :: (store (s64))
308    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
309    renamable $r0 = nuw t2SUBri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
310    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
311    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
312
313...
314---
315name:            STRD_prem255
316alignment:       2
317tracksRegLiveness: true
318liveins:
319  - { reg: '$r0', virtual-reg: '' }
320  - { reg: '$r1', virtual-reg: '' }
321  - { reg: '$r2', virtual-reg: '' }
322body:             |
323  bb.0 (%ir-block.0):
324    liveins: $r0, $r1, $r2
325
326    ; CHECK-LABEL: name: STRD_prem255
327    ; CHECK: liveins: $r0, $r1, $r2
328    ; CHECK-NEXT: {{  $}}
329    ; CHECK-NEXT: renamable $r0 = nuw t2SUBri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
330    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
331    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
332    renamable $r0 = nuw t2SUBri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
333    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
334    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
335
336...
337---
338name:            STRD_prem256
339alignment:       2
340tracksRegLiveness: true
341liveins:
342  - { reg: '$r0', virtual-reg: '' }
343  - { reg: '$r1', virtual-reg: '' }
344  - { reg: '$r2', virtual-reg: '' }
345body:             |
346  bb.0 (%ir-block.0):
347    liveins: $r0, $r1, $r2
348
349    ; CHECK-LABEL: name: STRD_prem256
350    ; CHECK: liveins: $r0, $r1, $r2
351    ; CHECK-NEXT: {{  $}}
352    ; CHECK-NEXT: renamable $r0 = nuw t2SUBri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
353    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
354    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
355    renamable $r0 = nuw t2SUBri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
356    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
357    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
358
359...
360---
361name:            STRD_prem1020
362alignment:       2
363tracksRegLiveness: true
364liveins:
365  - { reg: '$r0', virtual-reg: '' }
366  - { reg: '$r1', virtual-reg: '' }
367  - { reg: '$r2', virtual-reg: '' }
368body:             |
369  bb.0 (%ir-block.0):
370    liveins: $r0, $r1, $r2
371
372    ; CHECK-LABEL: name: STRD_prem1020
373    ; CHECK: liveins: $r0, $r1, $r2
374    ; CHECK-NEXT: {{  $}}
375    ; CHECK-NEXT: renamable $r0 = nuw t2SUBri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
376    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
377    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
378    renamable $r0 = nuw t2SUBri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
379    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
380    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
381
382...
383---
384name:            STRD_prem1024
385alignment:       2
386tracksRegLiveness: true
387liveins:
388  - { reg: '$r0', virtual-reg: '' }
389  - { reg: '$r1', virtual-reg: '' }
390  - { reg: '$r2', virtual-reg: '' }
391body:             |
392  bb.0 (%ir-block.0):
393    liveins: $r0, $r1, $r2
394
395    ; CHECK-LABEL: name: STRD_prem1024
396    ; CHECK: liveins: $r0, $r1, $r2
397    ; CHECK-NEXT: {{  $}}
398    ; CHECK-NEXT: renamable $r0 = nuw t2SUBri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
399    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
400    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
401    renamable $r0 = nuw t2SUBri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
402    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
403    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
404
405...
406
407---
408name:            STR_post4
409alignment:       2
410tracksRegLiveness: true
411liveins:
412  - { reg: '$r0', virtual-reg: '' }
413  - { reg: '$r1', virtual-reg: '' }
414body:             |
415  bb.0 (%ir-block.0):
416    liveins: $r0, $r1
417
418    ; CHECK-LABEL: name: STR_post4
419    ; CHECK: liveins: $r0, $r1
420    ; CHECK-NEXT: {{  $}}
421    ; CHECK-NEXT: early-clobber $r0 = t2STR_POST killed $r1, $r0, 4, 14 /* CC::al */, $noreg :: (store (s32))
422    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
423    t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
424    renamable $r0 = nuw t2ADDri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
425    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
426
427...
428---
429name:            STR_post8
430alignment:       2
431tracksRegLiveness: true
432liveins:
433  - { reg: '$r0', virtual-reg: '' }
434  - { reg: '$r1', virtual-reg: '' }
435body:             |
436  bb.0 (%ir-block.0):
437    liveins: $r0, $r1
438
439    ; CHECK-LABEL: name: STR_post8
440    ; CHECK: liveins: $r0, $r1
441    ; CHECK-NEXT: {{  $}}
442    ; CHECK-NEXT: early-clobber $r0 = t2STR_POST killed $r1, $r0, 8, 14 /* CC::al */, $noreg :: (store (s32))
443    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
444    t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
445    renamable $r0 = nuw t2ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
446    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
447
448...
449---
450name:            STR_post255
451alignment:       2
452tracksRegLiveness: true
453liveins:
454  - { reg: '$r0', virtual-reg: '' }
455  - { reg: '$r1', virtual-reg: '' }
456body:             |
457  bb.0 (%ir-block.0):
458    liveins: $r0, $r1
459
460    ; CHECK-LABEL: name: STR_post255
461    ; CHECK: liveins: $r0, $r1
462    ; CHECK-NEXT: {{  $}}
463    ; CHECK-NEXT: early-clobber $r0 = t2STR_POST killed $r1, $r0, 255, 14 /* CC::al */, $noreg :: (store (s32))
464    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
465    t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
466    renamable $r0 = nuw t2ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
467    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
468
469...
470---
471name:            STR_post256
472alignment:       2
473tracksRegLiveness: true
474liveins:
475  - { reg: '$r0', virtual-reg: '' }
476  - { reg: '$r1', virtual-reg: '' }
477body:             |
478  bb.0 (%ir-block.0):
479    liveins: $r0, $r1
480
481    ; CHECK-LABEL: name: STR_post256
482    ; CHECK: liveins: $r0, $r1
483    ; CHECK-NEXT: {{  $}}
484    ; CHECK-NEXT: t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
485    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
486    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
487    t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s32))
488    renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
489    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
490
491...
492---
493name:            STRD_post4
494alignment:       2
495tracksRegLiveness: true
496liveins:
497  - { reg: '$r0', virtual-reg: '' }
498  - { reg: '$r1', virtual-reg: '' }
499  - { reg: '$r2', virtual-reg: '' }
500body:             |
501  bb.0 (%ir-block.0):
502    liveins: $r0, $r1, $r2
503
504    ; CHECK-LABEL: name: STRD_post4
505    ; CHECK: liveins: $r0, $r1, $r2
506    ; CHECK-NEXT: {{  $}}
507    ; CHECK-NEXT: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 4, 14 /* CC::al */, $noreg :: (store (s64))
508    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
509    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
510    renamable $r0 = nuw t2ADDri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
511    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
512
513...
514---
515name:            STRD_post8
516alignment:       2
517tracksRegLiveness: true
518liveins:
519  - { reg: '$r0', virtual-reg: '' }
520  - { reg: '$r1', virtual-reg: '' }
521  - { reg: '$r2', virtual-reg: '' }
522body:             |
523  bb.0 (%ir-block.0):
524    liveins: $r0, $r1, $r2
525
526    ; CHECK-LABEL: name: STRD_post8
527    ; CHECK: liveins: $r0, $r1, $r2
528    ; CHECK-NEXT: {{  $}}
529    ; CHECK-NEXT: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 8, 14 /* CC::al */, $noreg :: (store (s64))
530    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
531    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
532    renamable $r0 = nuw t2ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
533    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
534
535...
536---
537name:            STRD_post255
538alignment:       2
539tracksRegLiveness: true
540liveins:
541  - { reg: '$r0', virtual-reg: '' }
542  - { reg: '$r1', virtual-reg: '' }
543  - { reg: '$r2', virtual-reg: '' }
544body:             |
545  bb.0 (%ir-block.0):
546    liveins: $r0, $r1, $r2
547
548    ; CHECK-LABEL: name: STRD_post255
549    ; CHECK: liveins: $r0, $r1, $r2
550    ; CHECK-NEXT: {{  $}}
551    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
552    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
553    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
554    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
555    renamable $r0 = nuw t2ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
556    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
557
558...
559---
560name:            STRD_post256
561alignment:       2
562tracksRegLiveness: true
563liveins:
564  - { reg: '$r0', virtual-reg: '' }
565  - { reg: '$r1', virtual-reg: '' }
566  - { reg: '$r2', virtual-reg: '' }
567body:             |
568  bb.0 (%ir-block.0):
569    liveins: $r0, $r1, $r2
570
571    ; CHECK-LABEL: name: STRD_post256
572    ; CHECK: liveins: $r0, $r1, $r2
573    ; CHECK-NEXT: {{  $}}
574    ; CHECK-NEXT: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 256, 14 /* CC::al */, $noreg :: (store (s64))
575    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
576    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
577    renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
578    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
579
580...
581---
582name:            STRD_post1020
583alignment:       2
584tracksRegLiveness: true
585liveins:
586  - { reg: '$r0', virtual-reg: '' }
587  - { reg: '$r1', virtual-reg: '' }
588  - { reg: '$r2', virtual-reg: '' }
589body:             |
590  bb.0 (%ir-block.0):
591    liveins: $r0, $r1, $r2
592
593    ; CHECK-LABEL: name: STRD_post1020
594    ; CHECK: liveins: $r0, $r1, $r2
595    ; CHECK-NEXT: {{  $}}
596    ; CHECK-NEXT: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 1020, 14 /* CC::al */, $noreg :: (store (s64))
597    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
598    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
599    renamable $r0 = nuw t2ADDri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
600    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
601
602...
603---
604name:            STRD_post1024
605alignment:       2
606tracksRegLiveness: true
607liveins:
608  - { reg: '$r0', virtual-reg: '' }
609  - { reg: '$r1', virtual-reg: '' }
610  - { reg: '$r2', virtual-reg: '' }
611body:             |
612  bb.0 (%ir-block.0):
613    liveins: $r0, $r1, $r2
614
615    ; CHECK-LABEL: name: STRD_post1024
616    ; CHECK: liveins: $r0, $r1, $r2
617    ; CHECK-NEXT: {{  $}}
618    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
619    ; CHECK-NEXT: renamable $r0 = nuw t2ADDri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
620    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
621    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
622    renamable $r0 = nuw t2ADDri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
623    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
624
625...
626---
627name:            STRD_postm4
628alignment:       2
629tracksRegLiveness: true
630liveins:
631  - { reg: '$r0', virtual-reg: '' }
632  - { reg: '$r1', virtual-reg: '' }
633  - { reg: '$r2', virtual-reg: '' }
634body:             |
635  bb.0 (%ir-block.0):
636    liveins: $r0, $r1, $r2
637
638    ; CHECK-LABEL: name: STRD_postm4
639    ; CHECK: liveins: $r0, $r1, $r2
640    ; CHECK-NEXT: {{  $}}
641    ; CHECK-NEXT: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, -4, 14 /* CC::al */, $noreg :: (store (s64))
642    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
643    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
644    renamable $r0 = nuw t2SUBri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
645    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
646
647...
648---
649name:            STRD_postm8
650alignment:       2
651tracksRegLiveness: true
652liveins:
653  - { reg: '$r0', virtual-reg: '' }
654  - { reg: '$r1', virtual-reg: '' }
655  - { reg: '$r2', virtual-reg: '' }
656body:             |
657  bb.0 (%ir-block.0):
658    liveins: $r0, $r1, $r2
659
660    ; CHECK-LABEL: name: STRD_postm8
661    ; CHECK: liveins: $r0, $r1, $r2
662    ; CHECK-NEXT: {{  $}}
663    ; CHECK-NEXT: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, -8, 14 /* CC::al */, $noreg :: (store (s64))
664    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
665    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
666    renamable $r0 = nuw t2SUBri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
667    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
668
669...
670---
671name:            STRD_postm255
672alignment:       2
673tracksRegLiveness: true
674liveins:
675  - { reg: '$r0', virtual-reg: '' }
676  - { reg: '$r1', virtual-reg: '' }
677  - { reg: '$r2', virtual-reg: '' }
678body:             |
679  bb.0 (%ir-block.0):
680    liveins: $r0, $r1, $r2
681
682    ; CHECK-LABEL: name: STRD_postm255
683    ; CHECK: liveins: $r0, $r1, $r2
684    ; CHECK-NEXT: {{  $}}
685    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
686    ; CHECK-NEXT: renamable $r0 = nuw t2SUBri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
687    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
688    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
689    renamable $r0 = nuw t2SUBri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
690    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
691
692...
693---
694name:            STRD_postm256
695alignment:       2
696tracksRegLiveness: true
697liveins:
698  - { reg: '$r0', virtual-reg: '' }
699  - { reg: '$r1', virtual-reg: '' }
700  - { reg: '$r2', virtual-reg: '' }
701body:             |
702  bb.0 (%ir-block.0):
703    liveins: $r0, $r1, $r2
704
705    ; CHECK-LABEL: name: STRD_postm256
706    ; CHECK: liveins: $r0, $r1, $r2
707    ; CHECK-NEXT: {{  $}}
708    ; CHECK-NEXT: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 256, 14 /* CC::al */, $noreg :: (store (s64))
709    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
710    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
711    renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
712    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
713
714...
715---
716name:            STRD_postm1020
717alignment:       2
718tracksRegLiveness: true
719liveins:
720  - { reg: '$r0', virtual-reg: '' }
721  - { reg: '$r1', virtual-reg: '' }
722  - { reg: '$r2', virtual-reg: '' }
723body:             |
724  bb.0 (%ir-block.0):
725    liveins: $r0, $r1, $r2
726
727    ; CHECK-LABEL: name: STRD_postm1020
728    ; CHECK: liveins: $r0, $r1, $r2
729    ; CHECK-NEXT: {{  $}}
730    ; CHECK-NEXT: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, -1020, 14 /* CC::al */, $noreg :: (store (s64))
731    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
732    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
733    renamable $r0 = nuw t2SUBri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
734    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
735
736...
737---
738name:            STRD_postm1024
739alignment:       2
740tracksRegLiveness: true
741liveins:
742  - { reg: '$r0', virtual-reg: '' }
743  - { reg: '$r1', virtual-reg: '' }
744  - { reg: '$r2', virtual-reg: '' }
745body:             |
746  bb.0 (%ir-block.0):
747    liveins: $r0, $r1, $r2
748
749    ; CHECK-LABEL: name: STRD_postm1024
750    ; CHECK: liveins: $r0, $r1, $r2
751    ; CHECK-NEXT: {{  $}}
752    ; CHECK-NEXT: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
753    ; CHECK-NEXT: renamable $r0 = nuw t2SUBri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
754    ; CHECK-NEXT: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
755    t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store (s64))
756    renamable $r0 = nuw t2SUBri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
757    tBX_RET 14 /* CC::al */, $noreg, implicit $r0
758
759...
760