[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-ext.mir
blobc751570634e1665606d80ff58af1adcf183e3225
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -march=aarch64 -run-pass=legalizer %s -o - | FileCheck %s
3 ---
4 name:            test_ext
5 body:             |
6   bb.0.entry:
7     ; CHECK-LABEL: name: test_ext
8     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
9     ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
10     ; CHECK: $w0 = COPY [[TRUNC]](s32)
11     ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
12     ; CHECK: $w0 = COPY [[TRUNC1]](s32)
13     ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
14     ; CHECK: $w0 = COPY [[TRUNC2]](s32)
15     ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
16     ; CHECK: $w0 = COPY [[TRUNC3]](s32)
17     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY [[COPY]](s64)
18     ; CHECK: $x0 = COPY [[COPY1]](s64)
19     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 255
20     ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY [[COPY]](s64)
21     ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]
22     ; CHECK: $x0 = COPY [[AND]](s64)
23     ; CHECK: [[COPY3:%[0-9]+]]:_(s64) = COPY [[COPY]](s64)
24     ; CHECK: $x0 = COPY [[COPY3]](s64)
25     ; CHECK: [[COPY4:%[0-9]+]]:_(s64) = COPY [[COPY]](s64)
26     ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY4]], 32
27     ; CHECK: $x0 = COPY [[SEXT_INREG]](s64)
28     ; CHECK: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
29     ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC4]], 1
30     ; CHECK: $w0 = COPY [[SEXT_INREG1]](s32)
31     ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
32     ; CHECK: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
33     ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC5]], [[C1]]
34     ; CHECK: $w0 = COPY [[AND1]](s32)
35     ; CHECK: [[TRUNC6:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
36     ; CHECK: $w0 = COPY [[TRUNC6]](s32)
37     ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
38     ; CHECK: [[TRUNC7:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
39     ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC7]], [[C2]]
40     ; CHECK: $w0 = COPY [[AND2]](s32)
41     ; CHECK: [[TRUNC8:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
42     ; CHECK: $w0 = COPY [[TRUNC8]](s32)
43     ; CHECK: [[TRUNC9:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
44     ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC9]], 16
45     ; CHECK: $w0 = COPY [[SEXT_INREG2]](s32)
46     ; CHECK: [[TRUNC10:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
47     ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC10]], [[C2]]
48     ; CHECK: $w0 = COPY [[AND3]](s32)
49     ; CHECK: [[TRUNC11:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
50     ; CHECK: $w0 = COPY [[TRUNC11]](s32)
51     ; CHECK: [[TRUNC12:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
52     ; CHECK: $w0 = COPY [[TRUNC12]](s32)
53     ; CHECK: [[FPEXT:%[0-9]+]]:_(s64) = G_FPEXT [[TRUNC12]](s32)
54     ; CHECK: $x0 = COPY [[FPEXT]](s64)
55     ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
56     ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[C3]](s32)
57     ; CHECK: $w0 = COPY [[COPY5]](s32)
58     ; CHECK: $w0 = COPY [[C3]](s32)
59     ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
60     ; CHECK: $w0 = COPY [[DEF]](s32)
61     %0:_(s64) = COPY $x0
62     %1:_(s1) = G_TRUNC %0(s64)
63     %19:_(s32) = G_ANYEXT %1(s1)
64     $w0 = COPY %19(s32)
65     %2:_(s8) = G_TRUNC %0(s64)
66     %20:_(s32) = G_ANYEXT %2(s8)
67     $w0 = COPY %20(s32)
68     %3:_(s16) = G_TRUNC %0(s64)
69     %21:_(s32) = G_ANYEXT %3(s16)
70     $w0 = COPY %21(s32)
71     %4:_(s32) = G_TRUNC %0(s64)
72     $w0 = COPY %4(s32)
73     %5:_(s64) = G_ANYEXT %1(s1)
74     $x0 = COPY %5(s64)
75     %6:_(s64) = G_ZEXT %2(s8)
76     $x0 = COPY %6(s64)
77     %7:_(s64) = G_ANYEXT %3(s16)
78     $x0 = COPY %7(s64)
79     %8:_(s64) = G_SEXT %4(s32)
80     $x0 = COPY %8(s64)
81     %9:_(s32) = G_SEXT %1(s1)
82     $w0 = COPY %9(s32)
83     %10:_(s32) = G_ZEXT %2(s8)
84     $w0 = COPY %10(s32)
85     %11:_(s32) = G_ANYEXT %3(s16)
86     $w0 = COPY %11(s32)
87     %12:_(s32) = G_ZEXT %1(s1)
88     $w0 = COPY %12(s32)
89     %13:_(s32) = G_ANYEXT %2(s8)
90     $w0 = COPY %13(s32)
91     %14:_(s32) = G_SEXT %3(s16)
92     $w0 = COPY %14(s32)
93     %15:_(s8) = G_ZEXT %1(s1)
94     %22:_(s32) = G_ANYEXT %15(s8)
95     $w0 = COPY %22(s32)
96     %16:_(s16) = G_ANYEXT %2(s8)
97     %23:_(s32) = G_ANYEXT %16(s16)
98     $w0 = COPY %23(s32)
99     %17:_(s32) = G_TRUNC %0(s64)
100     $w0 = COPY %17(s32)
101     %18:_(s64) = G_FPEXT %17(s32)
102     $x0 = COPY %18(s64)
103     %24:_(s16) = G_IMPLICIT_DEF
104     %25:_(s32) = G_ZEXT %24(s16)
105     $w0 = COPY %25(s32)
106     %26:_(s32) = G_SEXT %24(s16)
107     $w0 = COPY %26(s32)
108     %27:_(s32) = G_ANYEXT %24(s16)
109     $w0 = COPY %27(s32)
113 name:            test_anyext_anyext
114 body:             |
115   bb.0:
116     liveins: $w0
118     ; CHECK-LABEL: name: test_anyext_anyext
119     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
120     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
121     ; CHECK: $w0 = COPY [[COPY1]](s32)
122     %0:_(s32) = COPY $w0
123     %1:_(s1) = G_TRUNC %0(s32)
124     %2:_(s8) = G_ANYEXT %1(s1)
125     %3:_(s32) = G_ANYEXT %2(s8)
126     $w0 = COPY %3(s32)
130 name:            test_anyext_sext
131 body:             |
132   bb.0:
133     liveins: $w0
135     ; CHECK-LABEL: name: test_anyext_sext
136     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
137     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
138     ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 1
139     ; CHECK: $w0 = COPY [[SEXT_INREG]](s32)
140     %0:_(s32) = COPY $w0
141     %1:_(s1) = G_TRUNC %0(s32)
142     %2:_(s8) = G_SEXT %1(s1)
143     %3:_(s32) = G_ANYEXT %2(s8)
144     $w0 = COPY %3(s32)
148 name:            test_anyext_zext
149 body:             |
150   bb.0:
151     liveins: $w0
153     ; CHECK-LABEL: name: test_anyext_zext
154     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
155     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
156     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
157     ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
158     ; CHECK: $w0 = COPY [[AND]](s32)
159     %0:_(s32) = COPY $w0
160     %1:_(s1) = G_TRUNC %0(s32)
161     %2:_(s8) = G_ZEXT %1(s1)
162     %3:_(s32) = G_ANYEXT %2(s8)
163     $w0 = COPY %3(s32)
167 name:            test_zext_v8s16_from_v8s8
168 alignment:       4
169 tracksRegLiveness: true
170 machineFunctionInfo: {}
171 body:             |
172   bb.0:
173     liveins: $d0
174     ; CHECK-LABEL: name: test_zext_v8s16_from_v8s8
175     ; CHECK: liveins: $d0
176     ; CHECK: [[COPY:%[0-9]+]]:fpr(<8 x s8>) = COPY $d0
177     ; CHECK: [[ZEXT:%[0-9]+]]:_(<8 x s16>) = G_ZEXT [[COPY]](<8 x s8>)
178     ; CHECK: $q0 = COPY [[ZEXT]](<8 x s16>)
179     ; CHECK: RET_ReallyLR implicit $q0
180     %1:fpr(<8 x s8>) = COPY $d0
181     %2:_(<8 x s16>) = G_ZEXT %1(<8 x s8>)
182     $q0 = COPY %2(<8 x s16>)
183     RET_ReallyLR implicit $q0
187 name:            test_sext_v8s16_from_v8s8
188 alignment:       4
189 tracksRegLiveness: true
190 machineFunctionInfo: {}
191 body:             |
192   bb.0:
193     liveins: $d0
194     ; CHECK-LABEL: name: test_sext_v8s16_from_v8s8
195     ; CHECK: liveins: $d0
196     ; CHECK: [[COPY:%[0-9]+]]:fpr(<8 x s8>) = COPY $d0
197     ; CHECK: [[SEXT:%[0-9]+]]:_(<8 x s16>) = G_SEXT [[COPY]](<8 x s8>)
198     ; CHECK: $q0 = COPY [[SEXT]](<8 x s16>)
199     ; CHECK: RET_ReallyLR implicit $q0
200     %1:fpr(<8 x s8>) = COPY $d0
201     %2:_(<8 x s16>) = G_SEXT %1(<8 x s8>)
202     $q0 = COPY %2(<8 x s16>)
203     RET_ReallyLR implicit $q0
207 name:            test_anyext_v8s16_from_v8s8
208 alignment:       4
209 tracksRegLiveness: true
210 machineFunctionInfo: {}
211 body:             |
212   bb.0:
213     liveins: $d0
214     ; CHECK-LABEL: name: test_anyext_v8s16_from_v8s8
215     ; CHECK: liveins: $d0
216     ; CHECK: [[COPY:%[0-9]+]]:fpr(<8 x s8>) = COPY $d0
217     ; CHECK: [[ANYEXT:%[0-9]+]]:_(<8 x s16>) = G_ANYEXT [[COPY]](<8 x s8>)
218     ; CHECK: $q0 = COPY [[ANYEXT]](<8 x s16>)
219     ; CHECK: RET_ReallyLR implicit $q0
220     %1:fpr(<8 x s8>) = COPY $d0
221     %2:_(<8 x s16>) = G_ANYEXT %1(<8 x s8>)
222     $q0 = COPY %2(<8 x s16>)
223     RET_ReallyLR implicit $q0
227 name:            test_zext_v4s32_from_v4s16
228 alignment:       4
229 tracksRegLiveness: true
230 machineFunctionInfo: {}
231 body:             |
232   bb.0:
233     liveins: $d0
235     ; CHECK-LABEL: name: test_zext_v4s32_from_v4s16
236     ; CHECK: liveins: $d0
237     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
238     ; CHECK: [[ZEXT:%[0-9]+]]:_(<4 x s32>) = G_ZEXT [[COPY]](<4 x s16>)
239     ; CHECK: $q0 = COPY [[ZEXT]](<4 x s32>)
240     ; CHECK: RET_ReallyLR implicit $q0
241     %0:_(<4 x s16>) = COPY $d0
242     %1:_(<4 x s32>) = G_ZEXT %0(<4 x s16>)
243     $q0 = COPY %1(<4 x s32>)
244     RET_ReallyLR implicit $q0
248 name:            test_sext_v4s32_from_v4s16
249 alignment:       4
250 tracksRegLiveness: true
251 machineFunctionInfo: {}
252 body:             |
253   bb.0:
254     liveins: $d0
256     ; CHECK-LABEL: name: test_sext_v4s32_from_v4s16
257     ; CHECK: liveins: $d0
258     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
259     ; CHECK: [[SEXT:%[0-9]+]]:_(<4 x s32>) = G_SEXT [[COPY]](<4 x s16>)
260     ; CHECK: $q0 = COPY [[SEXT]](<4 x s32>)
261     ; CHECK: RET_ReallyLR implicit $q0
262     %0:_(<4 x s16>) = COPY $d0
263     %1:_(<4 x s32>) = G_SEXT %0(<4 x s16>)
264     $q0 = COPY %1(<4 x s32>)
265     RET_ReallyLR implicit $q0
269 name:            test_anyext_v4s32_from_v4s16
270 alignment:       4
271 tracksRegLiveness: true
272 machineFunctionInfo: {}
273 body:             |
274   bb.0:
275     liveins: $d0
277     ; CHECK-LABEL: name: test_anyext_v4s32_from_v4s16
278     ; CHECK: liveins: $d0
279     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
280     ; CHECK: [[ANYEXT:%[0-9]+]]:_(<4 x s32>) = G_ANYEXT [[COPY]](<4 x s16>)
281     ; CHECK: $q0 = COPY [[ANYEXT]](<4 x s32>)
282     ; CHECK: RET_ReallyLR implicit $q0
283     %0:_(<4 x s16>) = COPY $d0
284     %1:_(<4 x s32>) = G_ANYEXT %0(<4 x s16>)
285     $q0 = COPY %1(<4 x s32>)
286     RET_ReallyLR implicit $q0
290 name:            test_zext_v2s64_from_v2s32
291 alignment:       4
292 tracksRegLiveness: true
293 registers:
294   - { id: 0, class: _ }
295   - { id: 1, class: _ }
296 machineFunctionInfo: {}
297 body:             |
298   bb.0:
299     liveins: $d0
301     ; CHECK-LABEL: name: test_zext_v2s64_from_v2s32
302     ; CHECK: liveins: $d0
303     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
304     ; CHECK: [[ZEXT:%[0-9]+]]:_(<2 x s64>) = G_ZEXT [[COPY]](<2 x s32>)
305     ; CHECK: $q0 = COPY [[ZEXT]](<2 x s64>)
306     ; CHECK: RET_ReallyLR implicit $q0
307     %0:_(<2 x s32>) = COPY $d0
308     %1:_(<2 x s64>) = G_ZEXT %0(<2 x s32>)
309     $q0 = COPY %1(<2 x s64>)
310     RET_ReallyLR implicit $q0
314 name:            test_sext_v2s64_from_v2s32
315 alignment:       4
316 tracksRegLiveness: true
317 registers:
318   - { id: 0, class: _ }
319   - { id: 1, class: _ }
320 machineFunctionInfo: {}
321 body:             |
322   bb.0:
323     liveins: $d0
325     ; CHECK-LABEL: name: test_sext_v2s64_from_v2s32
326     ; CHECK: liveins: $d0
327     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
328     ; CHECK: [[SEXT:%[0-9]+]]:_(<2 x s64>) = G_SEXT [[COPY]](<2 x s32>)
329     ; CHECK: $q0 = COPY [[SEXT]](<2 x s64>)
330     ; CHECK: RET_ReallyLR implicit $q0
331     %0:_(<2 x s32>) = COPY $d0
332     %1:_(<2 x s64>) = G_SEXT %0(<2 x s32>)
333     $q0 = COPY %1(<2 x s64>)
334     RET_ReallyLR implicit $q0
338 name:            test_anyext_v2s64_from_v2s32
339 alignment:       4
340 tracksRegLiveness: true
341 registers:
342   - { id: 0, class: _ }
343   - { id: 1, class: _ }
344 machineFunctionInfo: {}
345 body:             |
346   bb.0:
347     liveins: $d0
349     ; CHECK-LABEL: name: test_anyext_v2s64_from_v2s32
350     ; CHECK: liveins: $d0
351     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
352     ; CHECK: [[ANYEXT:%[0-9]+]]:_(<2 x s64>) = G_ANYEXT [[COPY]](<2 x s32>)
353     ; CHECK: $q0 = COPY [[ANYEXT]](<2 x s64>)
354     ; CHECK: RET_ReallyLR implicit $q0
355     %0:_(<2 x s32>) = COPY $d0
356     %1:_(<2 x s64>) = G_ANYEXT %0(<2 x s32>)
357     $q0 = COPY %1(<2 x s64>)
358     RET_ReallyLR implicit $q0