[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / prelegalizercombiner-extending-loads.mir
blob627585e65ddfaf9c54fb031e828881227d388659
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 -O0 -run-pass=aarch64-prelegalizer-combiner -global-isel -verify-machineinstrs %s -o - | FileCheck %s
3 ---
4 name:            test_anyext
5 body: |
6   bb.0:
7     liveins: $x0
8     ; CHECK-LABEL: name: test_anyext
9     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
10     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
11     ; CHECK: $w0 = COPY [[LOAD]](s32)
12     %0:_(p0) = COPY $x0
13     %1:_(s8) = G_LOAD %0 :: (load (s8))
14     %2:_(s32) = G_ANYEXT %1
15     $w0 = COPY %2
16 ...
18 ---
19 name:            test_anyext_with_copy
20 body: |
21   bb.0:
22     liveins: $x0
23     ; CHECK-LABEL: name: test_anyext_with_copy
24     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
25     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
26     ; CHECK: $w0 = COPY [[LOAD]](s32)
27     %0:_(p0) = COPY $x0
28     %1:_(s8) = G_LOAD %0 :: (load (s8))
29     %2:_(s8) = COPY %1
30     %3:_(s32) = G_ANYEXT %1
31     $w0 = COPY %3
32 ...
34 ---
35 name:            test_signext
36 body: |
37   bb.0:
38     liveins: $x0
39     ; CHECK-LABEL: name: test_signext
40     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
41     ; CHECK: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
42     ; CHECK: $w0 = COPY [[SEXTLOAD]](s32)
43     %0:_(p0) = COPY $x0
44     %1:_(s8) = G_LOAD %0 :: (load (s8))
45     %2:_(s32) = G_SEXT %1
46     $w0 = COPY %2
47 ...
49 ---
50 name:            test_zeroext
51 body: |
52   bb.0:
53     liveins: $x0
54     ; CHECK-LABEL: name: test_zeroext
55     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
56     ; CHECK: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
57     ; CHECK: $w0 = COPY [[ZEXTLOAD]](s32)
58     %0:_(p0) = COPY $x0
59     %1:_(s8) = G_LOAD %0 :: (load (s8))
60     %2:_(s32) = G_ZEXT %1
61     $w0 = COPY %2
62 ...
64 ---
65 name:            test_2anyext
66 body: |
67   bb.0:
68     liveins: $x0
69     ; CHECK-LABEL: name: test_2anyext
70     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
71     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
72     ; CHECK: $w0 = COPY [[LOAD]](s32)
73     ; CHECK: $w1 = COPY [[LOAD]](s32)
74     %0:_(p0) = COPY $x0
75     %1:_(s8) = G_LOAD %0 :: (load (s8))
76     %2:_(s32) = G_ANYEXT %1
77     %3:_(s32) = G_ANYEXT %1
78     $w0 = COPY %2
79     $w1 = COPY %3
80 ...
82 ---
83 name:            test_1anyext_1signext
84 body: |
85   bb.0:
86     liveins: $x0
87     ; CHECK-LABEL: name: test_1anyext_1signext
88     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
89     ; CHECK: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
90     ; CHECK: $w0 = COPY [[SEXTLOAD]](s32)
91     ; CHECK: $w1 = COPY [[SEXTLOAD]](s32)
92     %0:_(p0) = COPY $x0
93     %1:_(s8) = G_LOAD %0 :: (load (s8))
94     %2:_(s32) = G_ANYEXT %1
95     %3:_(s32) = G_SEXT %1
96     $w0 = COPY %2
97     $w1 = COPY %3
98 ...
101 name:            test_1xor_1signext
102 body: |
103   bb.0:
104     liveins: $x0
105     ; CHECK-LABEL: name: test_1xor_1signext
106     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
107     ; CHECK: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
108     ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s32)
109     ; CHECK: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1
110     ; CHECK: [[XOR:%[0-9]+]]:_(s8) = G_XOR [[TRUNC]], [[C]]
111     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[XOR]](s8)
112     ; CHECK: $w0 = COPY [[ANYEXT]](s32)
113     ; CHECK: $w1 = COPY [[SEXTLOAD]](s32)
114     %0:_(p0) = COPY $x0
115     %1:_(s8) = G_LOAD %0 :: (load (s8))
116     %2:_(s8) = G_CONSTANT i8 -1
117     %3:_(s8) = G_XOR %1, %2
118     %5:_(s32) = G_ANYEXT %3
119     %6:_(s32) = G_SEXT %1
120     $w0 = COPY %5
121     $w1 = COPY %6
125 name:            test_1anyext_1zeroext
126 body: |
127   bb.0:
128     liveins: $x0
129     ; CHECK-LABEL: name: test_1anyext_1zeroext
130     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
131     ; CHECK: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
132     ; CHECK: $w0 = COPY [[ZEXTLOAD]](s32)
133     ; CHECK: $w1 = COPY [[ZEXTLOAD]](s32)
134     %0:_(p0) = COPY $x0
135     %1:_(s8) = G_LOAD %0 :: (load (s8))
136     %2:_(s32) = G_ANYEXT %1
137     %3:_(s32) = G_ZEXT %1
138     $w0 = COPY %2
139     $w1 = COPY %3
143 name:            test_1signext_1zeroext
144 body: |
145   bb.0:
146     liveins: $x0
147     ; CHECK-LABEL: name: test_1signext_1zeroext
148     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
149     ; CHECK: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
150     ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s32)
151     ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s8)
152     ; CHECK: $w0 = COPY [[ZEXT]](s32)
153     ; CHECK: $w1 = COPY [[SEXTLOAD]](s32)
154     %0:_(p0) = COPY $x0
155     %1:_(s8) = G_LOAD %0 :: (load (s8))
156     %2:_(s32) = G_ZEXT %1
157     %3:_(s32) = G_SEXT %1
158     $w0 = COPY %2
159     $w1 = COPY %3
163 name:            test_1anyext64_1signext32
164 body: |
165   bb.0:
166     liveins: $x0
167     ; CHECK-LABEL: name: test_1anyext64_1signext32
168     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
169     ; CHECK: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
170     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SEXTLOAD]](s32)
171     ; CHECK: $x0 = COPY [[ANYEXT]](s64)
172     ; CHECK: $w1 = COPY [[SEXTLOAD]](s32)
173     %0:_(p0) = COPY $x0
174     %1:_(s8) = G_LOAD %0 :: (load (s8))
175     %2:_(s64) = G_ANYEXT %1
176     %3:_(s32) = G_SEXT %1
177     $x0 = COPY %2
178     $w1 = COPY %3
182 name:            test_1anyext32_1signext64
183 body: |
184   bb.0:
185     liveins: $x0
186     ; CHECK-LABEL: name: test_1anyext32_1signext64
187     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
188     ; CHECK: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
189     ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
190     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
191     ; CHECK: $w0 = COPY [[ANYEXT]](s32)
192     ; CHECK: $x1 = COPY [[SEXTLOAD]](s64)
193     %0:_(p0) = COPY $x0
194     %1:_(s8) = G_LOAD %0 :: (load (s8))
195     %2:_(s32) = G_ANYEXT %1
196     %3:_(s64) = G_SEXT %1
197     $w0 = COPY %2
198     $x1 = COPY %3
202 name:            test_2anyext32_1signext64
203 body: |
204   bb.0:
205     liveins: $x0
206     ; CHECK-LABEL: name: test_2anyext32_1signext64
207     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
208     ; CHECK: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
209     ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
210     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
211     ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
212     ; CHECK: $w0 = COPY [[ANYEXT]](s32)
213     ; CHECK: $x1 = COPY [[SEXTLOAD]](s64)
214     ; CHECK: $w2 = COPY [[ANYEXT1]](s32)
215     %0:_(p0) = COPY $x0
216     %1:_(s8) = G_LOAD %0 :: (load (s8))
217     %2:_(s32) = G_ANYEXT %1
218     %3:_(s64) = G_SEXT %1
219     %4:_(s32) = G_ANYEXT %1
220     $w0 = COPY %2
221     $x1 = COPY %3
222     $w2 = COPY %4
226 name:            test_multiblock_anyext
227 body: |
228   ; CHECK-LABEL: name: test_multiblock_anyext
229   ; CHECK: bb.0:
230   ; CHECK:   successors: %bb.1(0x80000000)
231   ; CHECK:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
232   ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
233   ; CHECK:   G_BR %bb.1
234   ; CHECK: bb.1:
235   ; CHECK:   $w0 = COPY [[LOAD]](s32)
236   bb.0:
237     liveins: $x0
238     %0:_(p0) = COPY $x0
239     %1:_(s8) = G_LOAD %0 :: (load (s8))
240     G_BR %bb.1
241   bb.1:
242     %2:_(s32) = G_ANYEXT %1
243     $w0 = COPY %2
247 name:            test_multiblock_signext
248 body: |
249   ; CHECK-LABEL: name: test_multiblock_signext
250   ; CHECK: bb.0:
251   ; CHECK:   successors: %bb.1(0x80000000)
252   ; CHECK:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
253   ; CHECK:   [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
254   ; CHECK:   G_BR %bb.1
255   ; CHECK: bb.1:
256   ; CHECK:   $w0 = COPY [[SEXTLOAD]](s32)
257   bb.0:
258     liveins: $x0
259     %0:_(p0) = COPY $x0
260     %1:_(s8) = G_LOAD %0 :: (load (s8))
261     G_BR %bb.1
262   bb.1:
263     %2:_(s32) = G_SEXT %1
264     $w0 = COPY %2
268 name:            test_multiblock_zeroext
269 body: |
270   ; CHECK-LABEL: name: test_multiblock_zeroext
271   ; CHECK: bb.0:
272   ; CHECK:   successors: %bb.1(0x80000000)
273   ; CHECK:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
274   ; CHECK:   [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
275   ; CHECK:   G_BR %bb.1
276   ; CHECK: bb.1:
277   ; CHECK:   $w0 = COPY [[ZEXTLOAD]](s32)
278   bb.0:
279     liveins: $x0
280     %0:_(p0) = COPY $x0
281     %1:_(s8) = G_LOAD %0 :: (load (s8))
282     G_BR %bb.1
283   bb.1:
284     %2:_(s32) = G_ZEXT %1
285     $w0 = COPY %2
289 name:            test_multiblock_2anyext
290 body: |
291   ; CHECK-LABEL: name: test_multiblock_2anyext
292   ; CHECK: bb.0:
293   ; CHECK:   successors: %bb.1(0x80000000)
294   ; CHECK:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
295   ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
296   ; CHECK:   G_BR %bb.1
297   ; CHECK: bb.1:
298   ; CHECK:   $w0 = COPY [[LOAD]](s32)
299   ; CHECK:   $w1 = COPY [[LOAD]](s32)
300   bb.0:
301     liveins: $x0
302     %0:_(p0) = COPY $x0
303     %1:_(s8) = G_LOAD %0 :: (load (s8))
304     %2:_(s32) = G_ANYEXT %1
305     G_BR %bb.1
306   bb.1:
307     %3:_(s32) = G_ANYEXT %1
308     $w0 = COPY %2
309     $w1 = COPY %3
313 name:            test_multiblock_1anyext64_1signext32
314 body: |
315   ; CHECK-LABEL: name: test_multiblock_1anyext64_1signext32
316   ; CHECK: bb.0:
317   ; CHECK:   successors: %bb.1(0x80000000)
318   ; CHECK:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
319   ; CHECK:   [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
320   ; CHECK:   G_BR %bb.1
321   ; CHECK: bb.1:
322   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SEXTLOAD]](s32)
323   ; CHECK:   $x0 = COPY [[ANYEXT]](s64)
324   ; CHECK:   $w1 = COPY [[SEXTLOAD]](s32)
325   bb.0:
326     liveins: $x0
327     %0:_(p0) = COPY $x0
328     %1:_(s8) = G_LOAD %0 :: (load (s8))
329     G_BR %bb.1
330   bb.1:
331     %2:_(s64) = G_ANYEXT %1
332     %3:_(s32) = G_SEXT %1
333     $x0 = COPY %2
334     $w1 = COPY %3
338 name:            test_multiblock_1anyext32_1signext64
339 body: |
340   ; CHECK-LABEL: name: test_multiblock_1anyext32_1signext64
341   ; CHECK: bb.0:
342   ; CHECK:   successors: %bb.1(0x80000000)
343   ; CHECK:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
344   ; CHECK:   [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
345   ; CHECK:   G_BR %bb.1
346   ; CHECK: bb.1:
347   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
348   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
349   ; CHECK:   $w0 = COPY [[ANYEXT]](s32)
350   ; CHECK:   $x1 = COPY [[SEXTLOAD]](s64)
351   bb.0:
352     liveins: $x0
353     %0:_(p0) = COPY $x0
354     %1:_(s8) = G_LOAD %0 :: (load (s8))
355     G_BR %bb.1
356   bb.1:
357     %2:_(s32) = G_ANYEXT %1
358     %3:_(s64) = G_SEXT %1
359     $w0 = COPY %2
360     $x1 = COPY %3
364 name:            test_multiblock_2anyext32_1signext64
365 body: |
366   ; CHECK-LABEL: name: test_multiblock_2anyext32_1signext64
367   ; CHECK: bb.0:
368   ; CHECK:   successors: %bb.1(0x80000000)
369   ; CHECK:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
370   ; CHECK:   [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
371   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
372   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
373   ; CHECK:   G_BR %bb.1
374   ; CHECK: bb.1:
375   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
376   ; CHECK:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s8)
377   ; CHECK:   $w0 = COPY [[ANYEXT1]](s32)
378   ; CHECK:   $x1 = COPY [[SEXTLOAD]](s64)
379   ; CHECK:   $w2 = COPY [[ANYEXT]](s32)
380   bb.0:
381     liveins: $x0
382     %0:_(p0) = COPY $x0
383     %1:_(s8) = G_LOAD %0 :: (load (s8))
384     %4:_(s32) = G_ANYEXT %1
385     G_BR %bb.1
386   bb.1:
387     %2:_(s32) = G_ANYEXT %1
388     %3:_(s64) = G_SEXT %1
389     $w0 = COPY %2
390     $x1 = COPY %3
391     $w2 = COPY %4
394 name:            test_atomic
395 alignment:       4
396 tracksRegLiveness: true
397 liveins:
398   - { reg: '$x0' }
399 body:             |
400   bb.1:
401     liveins: $x0
403     ; CHECK-LABEL: name: test_atomic
404     ; CHECK: liveins: $x0
405     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
406     ; CHECK: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load unordered (s16))
407     ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[LOAD]](s16)
408     ; CHECK: $w0 = COPY [[ZEXT]](s32)
409     ; CHECK: RET_ReallyLR implicit $w0
410     %0:_(p0) = COPY $x0
411     %1:_(s16) = G_LOAD %0(p0) :: (load unordered (s16))
412     %2:_(s32) = G_ZEXT %1(s16)
413     $w0 = COPY %2(s32)
414     RET_ReallyLR implicit $w0