Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / ldrpre-ldr-merge.mir
blob8e29255189bf5302f7644a80654993cc4b6cca4d
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
2 # RUN: llc -o - %s -mtriple=aarch64 -mcpu=cortex-a55 -lsr-preferred-addressing-mode=preindexed -stop-after=aarch64-ldst-opt | FileCheck %s
4 ---
5 name:            1-ldrwpre-ldrwui-merge
6 tracksRegLiveness: true
7 liveins:
8   - { reg: '$x1' }
9   - { reg: '$w0' }
10   - { reg: '$w1' }
11 machineFunctionInfo:
12   hasRedZone:      false
13 body:             |
14   bb.0:
15     liveins: $w0, $w1, $x1
16     ; CHECK-LABEL: name: 1-ldrwpre-ldrwui-merge
17     ; CHECK: liveins: $w0, $w1, $x1
18     ; CHECK-NEXT: {{  $}}
19     ; CHECK-NEXT: early-clobber $x1, renamable $w0, renamable $w2 = LDPWpre renamable $x1, 5 :: (load (s32))
20     ; CHECK-NEXT: STPWi renamable $w0, killed renamable $w2, renamable $x1, 0 :: (store (s32))
21     ; CHECK-NEXT: RET undef $lr
22     early-clobber renamable $x1, renamable $w0 = LDRWpre killed renamable $x1, 20 :: (load (s32))
23     renamable $w2 = LDRWui renamable $x1, 1 :: (load (s32))
24     STRWui killed renamable $w0, renamable $x1, 0 :: (store (s32))
25     STRWui killed renamable $w2, renamable $x1, 1 :: (store (s32))
26     RET undef $lr
27 ...
30 ---
31 name:            2-ldrxpre-ldrxui-merge
32 tracksRegLiveness: true
33 liveins:
34   - { reg: '$x1' }
35   - { reg: '$x2' }
36   - { reg: '$x3' }
37 machineFunctionInfo:
38   hasRedZone:      false
39 body:             |
40   bb.0:
41     liveins: $x2, $x3, $x1
42     ; CHECK-LABEL: name: 2-ldrxpre-ldrxui-merge
43     ; CHECK: liveins: $x1, $x2, $x3
44     ; CHECK-NEXT: {{  $}}
45     ; CHECK-NEXT: early-clobber $x1, renamable $x2, renamable $x3 = LDPXpre renamable $x1, 3 :: (load (s64))
46     ; CHECK-NEXT: STPXi renamable $x2, renamable $x3, renamable $x1, 0 :: (store (s64))
47     ; CHECK-NEXT: RET undef $lr
48     early-clobber renamable $x1, renamable $x2 = LDRXpre killed renamable $x1, 24 :: (load (s64))
49     renamable $x3 = LDRXui renamable $x1, 1 :: (load (s64))
50     STRXui killed renamable $x2, renamable $x1, 0 :: (store (s64))
51     STRXui killed renamable $x3, renamable $x1, 1 :: (store (s64))
52     RET undef $lr
53 ...
56 ---
57 name:            3-ldrspre-ldrsui-merge
58 tracksRegLiveness: true
59 liveins:
60   - { reg: '$x1' }
61   - { reg: '$s0' }
62   - { reg: '$s1' }
63 machineFunctionInfo:
64   hasRedZone:      false
65 body:             |
66   bb.0:
67     liveins: $s0, $s1, $x1
68     ; CHECK-LABEL: name: 3-ldrspre-ldrsui-merge
69     ; CHECK: liveins: $s0, $s1, $x1
70     ; CHECK-NEXT: {{  $}}
71     ; CHECK-NEXT: early-clobber $x1, renamable $s0, renamable $s1 = LDPSpre renamable $x1, 3 :: (load (s32))
72     ; CHECK-NEXT: STPSi renamable $s0, renamable $s1, renamable $x1, 0 :: (store (s32))
73     ; CHECK-NEXT: RET undef $lr
74     early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 12 :: (load (s32))
75     renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
76     STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
77     STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
78     RET undef $lr
79 ...
82 ---
83 name:            4-ldrqdre-ldrdui-merge
84 tracksRegLiveness: true
85 liveins:
86   - { reg: '$x1' }
87   - { reg: '$d0' }
88   - { reg: '$d1' }
89 machineFunctionInfo:
90   hasRedZone:      false
91 body:             |
92   bb.0:
93     liveins: $d0, $d1, $x1
94     ; CHECK-LABEL: name: 4-ldrqdre-ldrdui-merge
95     ; CHECK: liveins: $d0, $d1, $x1
96     ; CHECK-NEXT: {{  $}}
97     ; CHECK-NEXT: early-clobber $x1, renamable $d0, renamable $d1 = LDPDpre renamable $x1, 16 :: (load (s64))
98     ; CHECK-NEXT: STPDi renamable $d0, renamable $d1, renamable $x1, 0 :: (store (s64))
99     ; CHECK-NEXT: RET undef $lr
100     early-clobber renamable $x1, renamable $d0 = LDRDpre killed renamable $x1, 128 :: (load (s64))
101     renamable $d1 = LDRDui renamable $x1, 1 :: (load (s64))
102     STRDui killed renamable $d0, renamable $x1, 0 :: (store (s64))
103     STRDui killed renamable $d1, renamable $x1, 1 :: (store (s64))
104     RET undef $lr
109 name:            5-ldrqpre-ldrqui-merge
110 alignment:       4
111 tracksRegLiveness: true
112 liveins:
113   - { reg: '$x1' }
114   - { reg: '$q0' }
115   - { reg: '$q1' }
116 frameInfo:
117   maxAlignment:    1
118   maxCallFrameSize: 0
119 machineFunctionInfo:
120   hasRedZone:      false
121 body:             |
122   bb.0:
123     liveins: $q0, $q1, $x1
124     ; CHECK-LABEL: name: 5-ldrqpre-ldrqui-merge
125     ; CHECK: liveins: $q0, $q1, $x1
126     ; CHECK-NEXT: {{  $}}
127     ; CHECK-NEXT: early-clobber $x1, renamable $q0, renamable $q1 = LDPQpre renamable $x1, 3 :: (load (s128))
128     ; CHECK-NEXT: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
129     ; CHECK-NEXT: RET undef $lr
130     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 48 :: (load (s128))
131     renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
132     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
133     STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
134     RET undef $lr
139 name:            6-ldrqui-ldrqpre-no-merge
140 alignment:       4
141 tracksRegLiveness: true
142 liveins:
143   - { reg: '$x1' }
144   - { reg: '$q0' }
145   - { reg: '$q1' }
146 frameInfo:
147   maxAlignment:    1
148   maxCallFrameSize: 0
149 machineFunctionInfo:
150   hasRedZone:      false
151 body:             |
152   bb.0:
153     liveins: $q0, $q1, $x1
154     ; CHECK-LABEL: name: 6-ldrqui-ldrqpre-no-merge
155     ; CHECK: liveins: $q0, $q1, $x1
156     ; CHECK-NEXT: {{  $}}
157     ; CHECK-NEXT: renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
158     ; CHECK-NEXT: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 48, implicit $w1 :: (load (s128))
159     ; CHECK-NEXT: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
160     ; CHECK-NEXT: RET undef $lr
161     renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
162     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 48 :: (load (s128))
163     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
164     STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
165     RET undef $lr
170 name:            7-ldrqpre-ldrqui-max-offset-merge
171 alignment:       4
172 tracksRegLiveness: true
173 liveins:
174   - { reg: '$x1' }
175   - { reg: '$q0' }
176   - { reg: '$q1' }
177 frameInfo:
178   maxAlignment:    1
179   maxCallFrameSize: 0
180 machineFunctionInfo:
181   hasRedZone:      false
182 body:             |
183   bb.0:
184     liveins: $q0, $q1, $x1
185     ; CHECK-LABEL: name: 7-ldrqpre-ldrqui-max-offset-merge
186     ; CHECK: liveins: $q0, $q1, $x1
187     ; CHECK-NEXT: {{  $}}
188     ; CHECK-NEXT: early-clobber $x1, renamable $q0, renamable $q1 = LDPQpre renamable $x1, 15 :: (load (s128))
189     ; CHECK-NEXT: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
190     ; CHECK-NEXT: RET undef $lr
191     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 240 :: (load (s128))
192     renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
193     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
194     STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
195     RET undef $lr
200 name:            8-ldrqpre-ldrqui-min-offset-merge
201 alignment:       4
202 tracksRegLiveness: true
203 liveins:
204   - { reg: '$x1' }
205   - { reg: '$q0' }
206   - { reg: '$q1' }
207 frameInfo:
208   maxAlignment:    1
209   maxCallFrameSize: 0
210 machineFunctionInfo:
211   hasRedZone:      false
212 body:             |
213   bb.0:
214     liveins: $q0, $q1, $x1
215     ; CHECK-LABEL: name: 8-ldrqpre-ldrqui-min-offset-merge
216     ; CHECK: liveins: $q0, $q1, $x1
217     ; CHECK-NEXT: {{  $}}
218     ; CHECK-NEXT: early-clobber $x1, renamable $q0, renamable $q1 = LDPQpre renamable $x1, -16 :: (load (s128))
219     ; CHECK-NEXT: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
220     ; CHECK-NEXT: RET undef $lr
221     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, -256 :: (load (s128))
222     renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
223     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
224     STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
225     RET undef $lr
230 name:            9-ldrspre-ldrsui-mod-base-reg-no-merge
231 alignment:       4
232 tracksRegLiveness: true
233 liveins:
234   - { reg: '$x0' }
235   - { reg: '$x1' }
236   - { reg: '$s0' }
237   - { reg: '$s1' }
238 frameInfo:
239   maxAlignment:    1
240   maxCallFrameSize: 0
241 machineFunctionInfo:
242   hasRedZone:      false
243 body:             |
244   bb.0:
245     liveins: $s0, $s1, $x0, $x1
246     ; CHECK-LABEL: name: 9-ldrspre-ldrsui-mod-base-reg-no-merge
247     ; CHECK: liveins: $s0, $s1, $x0, $x1
248     ; CHECK-NEXT: {{  $}}
249     ; CHECK-NEXT: dead early-clobber renamable $x1, renamable $s0 = LDRSpre renamable $x1, 12, implicit $w1 :: (load (s32))
250     ; CHECK-NEXT: renamable $x1 = LDRXui renamable $x0, 1 :: (load (s64))
251     ; CHECK-NEXT: renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
252     ; CHECK-NEXT: STPSi renamable $s0, renamable $s1, renamable $x1, 0 :: (store (s32))
253     ; CHECK-NEXT: RET undef $lr
254     early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 12 :: (load (s32))
255     renamable $x1 = LDRXui renamable $x0, 1 :: (load (s64))
256     renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
257     STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
258     STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
259     RET undef $lr
264 name:            10-ldrspre-ldrsui-used-base-reg-no-merge
265 alignment:       4
266 tracksRegLiveness: true
267 liveins:
268   - { reg: '$x0' }
269   - { reg: '$x1' }
270   - { reg: '$s0' }
271   - { reg: '$s1' }
272 frameInfo:
273   maxAlignment:    1
274   maxCallFrameSize: 0
275 machineFunctionInfo:
276   hasRedZone:      false
277 body:             |
278   bb.0:
279     liveins: $s0, $s1, $x0, $x1
280     ; CHECK-LABEL: name: 10-ldrspre-ldrsui-used-base-reg-no-merge
281     ; CHECK: liveins: $s0, $s1, $x0, $x1
282     ; CHECK-NEXT: {{  $}}
283     ; CHECK-NEXT: early-clobber renamable $x1, renamable $s0 = LDRSpre renamable $x1, 12, implicit $w1 :: (load (s32))
284     ; CHECK-NEXT: renamable $x0 = LDRXui renamable $x1, 1 :: (load (s64))
285     ; CHECK-NEXT: STRXui renamable $x0, renamable $x0, 1 :: (store (s64))
286     ; CHECK-NEXT: renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
287     ; CHECK-NEXT: STPSi renamable $s0, renamable $s1, renamable $x1, 0 :: (store (s32))
288     ; CHECK-NEXT: RET undef $lr
289     early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 12 :: (load (s32))
290     renamable $x0 = LDRXui renamable $x1, 1 :: (load (s64))
291     STRXui killed renamable $x0, renamable $x0, 1 :: (store (s64))
292     renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
293     STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
294     STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
295     RET undef $lr
300 name:            11-ldrqpre-ldrqpre-no-merge
301 alignment:       4
302 tracksRegLiveness: true
303 liveins:
304   - { reg: '$x1' }
305   - { reg: '$q0' }
306   - { reg: '$q1' }
307 frameInfo:
308   maxAlignment:    1
309   maxCallFrameSize: 0
310 machineFunctionInfo:
311   hasRedZone:      false
312 body:             |
313   bb.0:
314     liveins: $q0, $q1, $x1
315     ; CHECK-LABEL: name: 11-ldrqpre-ldrqpre-no-merge
316     ; CHECK: liveins: $q0, $q1, $x1
317     ; CHECK-NEXT: {{  $}}
318     ; CHECK-NEXT: early-clobber renamable $x1, dead renamable $q0 = LDRQpre renamable $x1, 48, implicit $w1 :: (load (s128))
319     ; CHECK-NEXT: early-clobber renamable $x1, dead renamable $q1 = LDRQpre renamable $x1, 1, implicit $w1 :: (load (s128))
320     ; CHECK-NEXT: early-clobber renamable $x1, dead renamable $q0 = LDRQpre renamable $x1, 16, implicit $w1 :: (load (s128))
321     ; CHECK-NEXT: early-clobber renamable $x1, dead renamable $q1 = LDRQpre renamable $x1, 12, implicit $w1 :: (load (s128))
322     ; CHECK-NEXT: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 16, implicit $w1 :: (load (s128))
323     ; CHECK-NEXT: early-clobber renamable $x1, renamable $q1 = LDRQpre renamable $x1, 16, implicit $w1 :: (load (s128))
324     ; CHECK-NEXT: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
325     ; CHECK-NEXT: RET undef $lr
326     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 48 :: (load (s128))
327     early-clobber renamable $x1, renamable $q1 = LDRQpre killed renamable $x1, 1  :: (load (s128))
328     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 16 :: (load (s128))
329     early-clobber renamable $x1, renamable $q1 = LDRQpre killed renamable $x1, 12  :: (load (s128))
330     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 16 :: (load (s128))
331     early-clobber renamable $x1, renamable $q1 = LDRQpre killed renamable $x1, 16  :: (load (s128))
332     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
333     STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
334     RET undef $lr
339 name:            12-ldrspre-ldrsui-no-merge
340 tracksRegLiveness: true
341 liveins:
342   - { reg: '$x1' }
343   - { reg: '$s0' }
344   - { reg: '$s1' }
345 machineFunctionInfo:
346   hasRedZone:      false
347 body:             |
348   bb.0:
349     liveins: $s0, $s1, $x1
352     ; CHECK-LABEL: name: 12-ldrspre-ldrsui-no-merge
353     ; CHECK: liveins: $s0, $s1, $x1
354     ; CHECK-NEXT: {{  $}}
355     ; CHECK-NEXT: early-clobber renamable $x1, renamable $s0 = LDRSpre renamable $x1, 12, implicit $w1 :: (load (s32))
356     ; CHECK-NEXT: renamable $s1 = LDRSui renamable $x1, 2 :: (load (s32))
357     ; CHECK-NEXT: STPSi renamable $s0, renamable $s1, renamable $x1, 0 :: (store (s32))
358     ; CHECK-NEXT: RET undef $lr
359     early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 12 :: (load (s32))
360     renamable $s1 = LDRSui renamable $x1, 2 :: (load (s32))
361     STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
362     STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
363     RET undef $lr
368 name:            13-ldrqpre-ldrdui-no-merge
369 alignment:       4
370 tracksRegLiveness: true
371 liveins:
372   - { reg: '$x1' }
373   - { reg: '$q0' }
374   - { reg: '$d1' }
375 frameInfo:
376   maxAlignment:    1
377   maxCallFrameSize: 0
378 machineFunctionInfo:
379   hasRedZone:      false
380 body:             |
381   bb.0:
382     liveins: $q0, $d1, $x1
383     ; CHECK-LABEL: name: 13-ldrqpre-ldrdui-no-merge
384     ; CHECK: liveins: $d1, $q0, $x1
385     ; CHECK-NEXT: {{  $}}
386     ; CHECK-NEXT: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
387     ; CHECK-NEXT: renamable $d1 = LDRDui renamable $x1, 1 :: (load (s64))
388     ; CHECK-NEXT: STRQui renamable $q0, renamable $x1, 0 :: (store (s128))
389     ; CHECK-NEXT: STRDui renamable $d1, renamable $x1, 1 :: (store (s64))
390     ; CHECK-NEXT: RET undef $lr
391     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
392     renamable $d1 = LDRDui renamable $x1, 1 :: (load (s64))
393     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
394     STRDui killed renamable $d1, renamable $x1, 1 :: (store (s64))
395     RET undef $lr
400 name:            14-ldrqpre-strqui-no-merge
401 alignment:       4
402 tracksRegLiveness: true
403 liveins:
404   - { reg: '$x1' }
405   - { reg: '$q0' }
406   - { reg: '$q1' }
407 frameInfo:
408   maxAlignment:    1
409   maxCallFrameSize: 0
410 machineFunctionInfo:
411   hasRedZone:      false
412 body:             |
413   bb.0:
414     liveins: $q0, $q1, $x1
415     ; CHECK-LABEL: name: 14-ldrqpre-strqui-no-merge
416     ; CHECK: liveins: $q0, $q1, $x1
417     ; CHECK-NEXT: {{  $}}
418     ; CHECK-NEXT: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
419     ; CHECK-NEXT: STRQui renamable $q0, renamable $x1, 0 :: (store (s128))
420     ; CHECK-NEXT: RET undef $lr
421     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
422     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
423     RET undef $lr
428 name:            15-ldrqpre-ldrqui-same-dst-reg-no-merge
429 alignment:       4
430 tracksRegLiveness: true
431 liveins:
432   - { reg: '$x1' }
433   - { reg: '$q0' }
434   - { reg: '$q1' }
435 frameInfo:
436   maxAlignment:    1
437   maxCallFrameSize: 0
438 machineFunctionInfo:
439   hasRedZone:      false
440 body:             |
441   bb.0:
442     liveins: $q0, $x1
443     ; CHECK-LABEL: name: 15-ldrqpre-ldrqui-same-dst-reg-no-merge
444     ; CHECK: liveins: $q0, $q1, $x1
445     ; CHECK-NEXT: {{  $}}
446     ; CHECK-NEXT: early-clobber $x1, dead $q2, renamable $q0 = LDPQpre renamable $x1, 2 :: (load (s128))
447     ; CHECK-NEXT: STRQui renamable $q0, renamable $x1, 0 :: (store (s128))
448     ; CHECK-NEXT: RET undef $lr
449     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
450     renamable $q0 = LDRQui renamable $x1, 1 :: (load (s128))
451     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
452     RET undef $lr
457 name:            16-ldrqpre-ldrqui-diff-base-reg-no-merge
458 alignment:       4
459 tracksRegLiveness: true
460 liveins:
461   - { reg: '$x1' }
462   - { reg: '$x2' }
463   - { reg: '$q0' }
464   - { reg: '$q1' }
465 frameInfo:
466   maxAlignment:    1
467   maxCallFrameSize: 0
468 machineFunctionInfo:
469   hasRedZone:      false
470 body:             |
471   bb.0:
472     liveins: $q0, $q1, $x1, $x2
473     ; CHECK-LABEL: name: 16-ldrqpre-ldrqui-diff-base-reg-no-merge
474     ; CHECK: liveins: $q0, $q1, $x1, $x2
475     ; CHECK-NEXT: {{  $}}
476     ; CHECK-NEXT: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
477     ; CHECK-NEXT: renamable $q1 = LDRQui renamable $x2, 1 :: (load (s128))
478     ; CHECK-NEXT: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
479     ; CHECK-NEXT: RET undef $lr
480     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
481     renamable $q1 = LDRQui renamable $x2, 1 :: (load (s128))
482     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
483     STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
484     RET undef $lr
489 name:            17-ldrqpre-ldurqi-merge
490 alignment:       4
491 tracksRegLiveness: true
492 liveins:
493   - { reg: '$x1' }
494   - { reg: '$q0' }
495   - { reg: '$q1' }
496 frameInfo:
497   maxAlignment:    1
498   maxCallFrameSize: 0
499 machineFunctionInfo:
500   hasRedZone:      false
501 body:             |
502   bb.0:
503     liveins: $q0, $q1, $x1
504     ; CHECK-LABEL: name: 17-ldrqpre-ldurqi-merge
505     ; CHECK: liveins: $q0, $q1, $x1
506     ; CHECK-NEXT: {{  $}}
507     ; CHECK-NEXT: early-clobber $x1, renamable $q0, renamable $q1 = LDPQpre renamable $x1, 2 :: (load (s128))
508     ; CHECK-NEXT: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
509     ; CHECK-NEXT: RET undef $lr
510     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
511     renamable $q1 = LDURQi renamable $x1, 16 :: (load (s128))
512     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
513     STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
514     RET undef $lr
519 name:            18-ldrqpre-ldurqi-no-merge
520 alignment:       4
521 tracksRegLiveness: true
522 liveins:
523   - { reg: '$x1' }
524   - { reg: '$q0' }
525   - { reg: '$q1' }
526 frameInfo:
527   maxAlignment:    1
528   maxCallFrameSize: 0
529 machineFunctionInfo:
530   hasRedZone:      false
531 body:             |
532   bb.0:
533     liveins: $q0, $q1, $x1
534     ; CHECK-LABEL: name: 18-ldrqpre-ldurqi-no-merge
535     ; CHECK: liveins: $q0, $q1, $x1
536     ; CHECK-NEXT: {{  $}}
537     ; CHECK-NEXT: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
538     ; CHECK-NEXT: renamable $q1 = LDURQi renamable $x1, 1 :: (load (s128))
539     ; CHECK-NEXT: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
540     ; CHECK-NEXT: RET undef $lr
541     early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
542     renamable $q1 = LDURQi renamable $x1, 1 :: (load (s128))
543     STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
544     STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
545     RET undef $lr
550 name:            19-ldrspre-ldrsui-max-merge
551 tracksRegLiveness: true
552 liveins:
553   - { reg: '$x1' }
554   - { reg: '$s0' }
555   - { reg: '$s1' }
556 machineFunctionInfo:
557   hasRedZone:      false
558 body:             |
559   bb.0:
560     liveins: $s0, $s1, $x1
561     ; CHECK-LABEL: name: 19-ldrspre-ldrsui-max-merge
562     ; CHECK: liveins: $s0, $s1, $x1
563     ; CHECK-NEXT: {{  $}}
564     ; CHECK-NEXT: early-clobber $x1, renamable $s0, renamable $s1 = LDPSpre renamable $x1, 63 :: (load (s32))
565     ; CHECK-NEXT: STPSi renamable $s0, renamable $s1, renamable $x1, 0 :: (store (s32))
566     ; CHECK-NEXT: RET undef $lr
567     early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 252 :: (load (s32))
568     renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
569     STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
570     STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
571     RET undef $lr
576 name:            20-ldrspre-ldrsui-unaligned-no-merge
577 tracksRegLiveness: true
578 liveins:
579   - { reg: '$x1' }
580   - { reg: '$s0' }
581   - { reg: '$s1' }
582 machineFunctionInfo:
583   hasRedZone:      false
584 body:             |
585   bb.0:
586     liveins: $s0, $s1, $x1
587     ; CHECK-LABEL: name: 20-ldrspre-ldrsui-unaligned-no-merge
588     ; CHECK: liveins: $s0, $s1, $x1
589     ; CHECK-NEXT: {{  $}}
590     ; CHECK-NEXT: early-clobber renamable $x1, renamable $s0 = LDRSpre renamable $x1, 251, implicit $w1 :: (load (s32))
591     ; CHECK-NEXT: renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
592     ; CHECK-NEXT: STPSi renamable $s0, renamable $s1, renamable $x1, 0 :: (store (s32))
593     ; CHECK-NEXT: RET undef $lr
594     early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 251 :: (load (s32))
595     renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
596     STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
597     STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
598     RET undef $lr
603 name:            21-ldrswpre-ldrswui-merge
604 tracksRegLiveness: true
605 liveins:
606   - { reg: '$x0' }
607   - { reg: '$x1' }
608   - { reg: '$x2' }
609 machineFunctionInfo:
610   hasRedZone:      false
611 body:             |
612   bb.0:
613     liveins: $x0, $x1, $x2
614     ; CHECK-LABEL: name: 21-ldrswpre-ldrswui-merge
615     ; CHECK: liveins: $x0, $x1, $x2
616     ; CHECK-NEXT: {{  $}}
617     ; CHECK-NEXT: early-clobber $x1, renamable $x0, renamable $x2 = LDPSWpre renamable $x1, 10 :: (load (s32))
618     ; CHECK-NEXT: STPXi renamable $x0, renamable $x2, renamable $x1, 0 :: (store (s64))
619     ; CHECK-NEXT: RET undef $lr
620     early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 40 :: (load (s32))
621     renamable $x2 = LDRSWui renamable $x1, 1 :: (load (s32))
622     STRXui killed renamable $x0, renamable $x1, 0 :: (store (s64))
623     STRXui killed renamable $x2, renamable $x1, 1 :: (store (s64))
624     RET undef $lr
629 name:            22-ldrswpre-ldurswi-merge
630 tracksRegLiveness: true
631 liveins:
632   - { reg: '$x0' }
633   - { reg: '$x1' }
634   - { reg: '$x2' }
635 machineFunctionInfo:
636   hasRedZone:      false
637 body:             |
638   bb.0:
639     liveins: $x0, $x1, $x2
640     ; CHECK-LABEL: name: 22-ldrswpre-ldurswi-merge
641     ; CHECK: liveins: $x0, $x1, $x2
642     ; CHECK-NEXT: {{  $}}
643     ; CHECK-NEXT: early-clobber $x1, renamable $x0, renamable $x2 = LDPSWpre renamable $x1, 10 :: (load (s32))
644     ; CHECK-NEXT: STPXi renamable $x0, renamable $x2, renamable $x1, 0 :: (store (s64))
645     ; CHECK-NEXT: RET undef $lr
646     early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 40 :: (load (s32))
647     renamable $x2 = LDURSWi renamable $x1, 4 :: (load (s32))
648     STRXui killed renamable $x0, renamable $x1, 0 :: (store (s64))
649     STRXui killed renamable $x2, renamable $x1, 1 :: (store (s64))
650     RET undef $lr
655 name:            23-ldrswui-ldrswpre-no-merge
656 tracksRegLiveness: true
657 liveins:
658   - { reg: '$x0' }
659   - { reg: '$x1' }
660   - { reg: '$x2' }
661 machineFunctionInfo:
662   hasRedZone:      false
663 body:             |
664   bb.0:
665     liveins: $x0, $x1, $x2
666     ; CHECK-LABEL: name: 23-ldrswui-ldrswpre-no-merge
667     ; CHECK: liveins: $x0, $x1, $x2
668     ; CHECK-NEXT: {{  $}}
669     ; CHECK-NEXT: renamable $x2 = LDRSWui renamable $x1, 1 :: (load (s32))
670     ; CHECK-NEXT: early-clobber renamable $x1, renamable $x0 = LDRSWpre renamable $x1, 40, implicit $w1 :: (load (s32))
671     ; CHECK-NEXT: STPXi renamable $x0, renamable $x2, renamable $x1, 0 :: (store (s64))
672     ; CHECK-NEXT: RET undef $lr
673     renamable $x2 = LDRSWui renamable $x1, 1 :: (load (s32))
674     early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 40 :: (load (s32))
675     STRXui killed renamable $x0, renamable $x1, 0 :: (store (s64))
676     STRXui killed renamable $x2, renamable $x1, 1 :: (store (s64))
677     RET undef $lr
682 name:            24-ldurswi-ldrswpre-no-merge
683 tracksRegLiveness: true
684 liveins:
685   - { reg: '$x0' }
686   - { reg: '$x1' }
687   - { reg: '$x2' }
688 machineFunctionInfo:
689   hasRedZone:      false
690 body:             |
691   bb.0:
692     liveins: $x0, $x1, $x2
693     ; CHECK-LABEL: name: 24-ldurswi-ldrswpre-no-merge
694     ; CHECK: liveins: $x0, $x1, $x2
695     ; CHECK-NEXT: {{  $}}
696     ; CHECK-NEXT: renamable $x2 = LDURSWi renamable $x1, 4 :: (load (s32))
697     ; CHECK-NEXT: early-clobber renamable $x1, renamable $x0 = LDRSWpre renamable $x1, 40, implicit $w1 :: (load (s32))
698     ; CHECK-NEXT: STPXi renamable $x0, renamable $x2, renamable $x1, 0 :: (store (s64))
699     ; CHECK-NEXT: RET undef $lr
700     renamable $x2 = LDURSWi renamable $x1, 4 :: (load (s32))
701     early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 40 :: (load (s32))
702     STRXui killed renamable $x0, renamable $x1, 0 :: (store (s64))
703     STRXui killed renamable $x2, renamable $x1, 1 :: (store (s64))
704     RET undef $lr
709 name:            25-ldrswpre-ldrswpre-no-merge
710 tracksRegLiveness: true
711 liveins:
712   - { reg: '$x0' }
713   - { reg: '$x1' }
714   - { reg: '$x2' }
715 machineFunctionInfo:
716   hasRedZone:      false
717 body:             |
718   bb.0:
719     liveins: $x0, $x1, $x2
720     ; CHECK-LABEL: name: 25-ldrswpre-ldrswpre-no-merge
721     ; CHECK: liveins: $x0, $x1, $x2
722     ; CHECK-NEXT: {{  $}}
723     ; CHECK-NEXT: early-clobber renamable $x1, dead renamable $x0 = LDRSWpre renamable $x1, 48, implicit $w1 :: (load (s32))
724     ; CHECK-NEXT: early-clobber renamable $x1, dead renamable $x2 = LDRSWpre renamable $x1, 1, implicit $w1 :: (load (s32))
725     ; CHECK-NEXT: early-clobber renamable $x1, dead renamable $x0 = LDRSWpre renamable $x1, 16, implicit $w1 :: (load (s32))
726     ; CHECK-NEXT: early-clobber renamable $x1, dead renamable $x2 = LDRSWpre renamable $x1, 12, implicit $w1 :: (load (s32))
727     ; CHECK-NEXT: early-clobber renamable $x1, renamable $x0 = LDRSWpre renamable $x1, 16, implicit $w1 :: (load (s32))
728     ; CHECK-NEXT: early-clobber renamable $x1, renamable $x2 = LDRSWpre renamable $x1, 16, implicit $w1 :: (load (s32))
729     ; CHECK-NEXT: STPXi renamable $x0, renamable $x2, renamable $x1, 0 :: (store (s64))
730     ; CHECK-NEXT: RET undef $lr
731     early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 48 :: (load (s32))
732     early-clobber renamable $x1, renamable $x2 = LDRSWpre killed renamable $x1, 1 :: (load (s32))
733     early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 16 :: (load (s32))
734     early-clobber renamable $x1, renamable $x2 = LDRSWpre killed renamable $x1, 12 :: (load (s32))
735     early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 16 :: (load (s32))
736     early-clobber renamable $x1, renamable $x2 = LDRSWpre killed renamable $x1, 16 :: (load (s32))
737     STRXui killed renamable $x0, renamable $x1, 0 :: (store (s64))
738     STRXui killed renamable $x2, renamable $x1, 1 :: (store (s64))
739     RET undef $lr
744 name:            26-ldrswpre-ldrwui-no-merge
745 tracksRegLiveness: true
746 liveins:
747   - { reg: '$x0' }
748   - { reg: '$x1' }
749   - { reg: '$x2' }
750 machineFunctionInfo:
751   hasRedZone:      false
752 body:             |
753   bb.0:
754     liveins: $x0, $x1, $x2
755     ; CHECK-LABEL: name: 26-ldrswpre-ldrwui-no-merge
756     ; CHECK: liveins: $x0, $x1, $x2
757     ; CHECK-NEXT: {{  $}}
758     ; CHECK-NEXT: early-clobber renamable $x1, renamable $x0 = LDRSWpre renamable $x1, 40, implicit $w1 :: (load (s32))
759     ; CHECK-NEXT: renamable $w2 = LDRWui renamable $x1, 1, implicit-def $x2 :: (load (s32))
760     ; CHECK-NEXT: STPXi renamable $x0, renamable $x2, renamable $x1, 0 :: (store (s64))
761     ; CHECK-NEXT: RET undef $lr
762     early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 40 :: (load (s32))
763     renamable $w2 = LDRWui renamable $x1, 1 :: (load (s32))
764     STRXui killed renamable $x0, renamable $x1, 0 :: (store (s64))
765     STRXui killed renamable $x2, renamable $x1, 1 :: (store (s64))
766     RET undef $lr
771 name:            27-ldrwpre-ldrswui-no-merge
772 tracksRegLiveness: true
773 liveins:
774   - { reg: '$x0' }
775   - { reg: '$x1' }
776   - { reg: '$x2' }
777 machineFunctionInfo:
778   hasRedZone:      false
779 body:             |
780   bb.0:
781     liveins: $x0, $x1, $x2
782     ; CHECK-LABEL: name: 27-ldrwpre-ldrswui-no-merge
783     ; CHECK: liveins: $x0, $x1, $x2
784     ; CHECK-NEXT: {{  $}}
785     ; CHECK-NEXT: early-clobber renamable $x1, renamable $w0 = LDRWpre renamable $x1, 40, implicit $w1 :: (load (s32))
786     ; CHECK-NEXT: renamable $x2 = LDRSWui renamable $x1, 1 :: (load (s32))
787     ; CHECK-NEXT: STPXi renamable $x0, renamable $x2, renamable $x1, 0 :: (store (s64))
788     ; CHECK-NEXT: RET undef $lr
789     early-clobber renamable $x1, renamable $w0 = LDRWpre killed renamable $x1, 40 :: (load (s32))
790     renamable $x2 = LDRSWui renamable $x1, 1 :: (load (s32))
791     STRXui killed renamable $x0, renamable $x1, 0 :: (store (s64))
792     STRXui killed renamable $x2, renamable $x1, 1 :: (store (s64))
793     RET undef $lr
798 name:            28-ldrswpre-ldrwpre-no-merge
799 tracksRegLiveness: true
800 liveins:
801   - { reg: '$x11' }
802   - { reg: '$x13' }
803 machineFunctionInfo:
804   hasRedZone:      false
805 body:             |
806   bb.0:
807     liveins: $x11, $x13
808     ; CHECK-LABEL: name: 28-ldrswpre-ldrwpre-no-merge
809     ; CHECK: liveins: $x11, $x13
810     ; CHECK-NEXT: {{  $}}
811     ; CHECK-NEXT: early-clobber renamable $x11, dead renamable $x10 = LDRSWpre renamable $x11, 8, implicit $w11 :: (load (s32), align 8)
812     ; CHECK-NEXT: $x14 = EORXrs renamable $x11, renamable $x13, 0
813     ; CHECK-NEXT: early-clobber renamable $x11, dead renamable $w12 = LDRWpre renamable $x11, 4, implicit $w11 :: (load (s32))
814     ; CHECK-NEXT: $x13 = EORXrs renamable $x11, renamable $x13, 0
815     ; CHECK-NEXT: STPXi renamable $x13, renamable $x14, renamable $x11, 0 :: (store (s64))
816     ; CHECK-NEXT: RET undef $lr
817     early-clobber renamable $x11, renamable $x10 = LDRSWpre killed renamable $x11, 8 :: (load (s32), align 8)
818     $x14 = EORXrs renamable $x11, renamable $x13, 0
819     early-clobber renamable $x11, renamable $w12 = LDRWpre killed renamable $x11, 4 :: (load (s32))
820     $x13 = EORXrs renamable $x11, killed renamable $x13, 0
821     STRXui killed renamable $x13, renamable $x11, 0 :: (store (s64))
822     STRXui killed renamable $x14, renamable $x11, 1 :: (store (s64))
823     RET undef $lr
828 name:            29-ldrwpre-ldrswpre-no-merge
829 tracksRegLiveness: true
830 liveins:
831   - { reg: '$x11' }
832   - { reg: '$x13' }
833 machineFunctionInfo:
834   hasRedZone:      false
835 body:             |
836   bb.0:
837     liveins: $x11, $x13
838     ; CHECK-LABEL: name: 29-ldrwpre-ldrswpre-no-merge
839     ; CHECK: liveins: $x11, $x13
840     ; CHECK-NEXT: {{  $}}
841     ; CHECK-NEXT: early-clobber renamable $x11, dead renamable $w12 = LDRWpre renamable $x11, 8, implicit $w11 :: (load (s32))
842     ; CHECK-NEXT: $x14 = EORXrs renamable $x11, renamable $x13, 0
843     ; CHECK-NEXT: early-clobber renamable $x11, dead renamable $x10 = LDRSWpre renamable $x11, 4, implicit $w11 :: (load (s32), align 8)
844     ; CHECK-NEXT: $x13 = EORXrs renamable $x11, renamable $x13, 0
845     ; CHECK-NEXT: STPXi renamable $x13, renamable $x14, renamable $x11, 0 :: (store (s64))
846     ; CHECK-NEXT: RET undef $lr
847     early-clobber renamable $x11, renamable $w12 = LDRWpre killed renamable $x11, 8 :: (load (s32))
848     $x14 = EORXrs renamable $x11, renamable $x13, 0
849     early-clobber renamable $x11, renamable $x10 = LDRSWpre killed renamable $x11, 4 :: (load (s32), align 8)
850     $x13 = EORXrs renamable $x11, killed renamable $x13, 0
851     STRXui killed renamable $x13, renamable $x11, 0 :: (store (s64))
852     STRXui killed renamable $x14, renamable $x11, 1 :: (store (s64))
853     RET undef $lr