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
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)
62 %1:_(s1) = G_TRUNC %0(s64)
63 %19:_(s32) = G_ANYEXT %1(s1)
65 %2:_(s8) = G_TRUNC %0(s64)
66 %20:_(s32) = G_ANYEXT %2(s8)
68 %3:_(s16) = G_TRUNC %0(s64)
69 %21:_(s32) = G_ANYEXT %3(s16)
71 %4:_(s32) = G_TRUNC %0(s64)
73 %5:_(s64) = G_ANYEXT %1(s1)
75 %6:_(s64) = G_ZEXT %2(s8)
77 %7:_(s64) = G_ANYEXT %3(s16)
79 %8:_(s64) = G_SEXT %4(s32)
81 %9:_(s32) = G_SEXT %1(s1)
83 %10:_(s32) = G_ZEXT %2(s8)
85 %11:_(s32) = G_ANYEXT %3(s16)
87 %12:_(s32) = G_ZEXT %1(s1)
89 %13:_(s32) = G_ANYEXT %2(s8)
91 %14:_(s32) = G_SEXT %3(s16)
93 %15:_(s8) = G_ZEXT %1(s1)
94 %22:_(s32) = G_ANYEXT %15(s8)
96 %16:_(s16) = G_ANYEXT %2(s8)
97 %23:_(s32) = G_ANYEXT %16(s16)
99 %17:_(s32) = G_TRUNC %0(s64)
101 %18:_(s64) = G_FPEXT %17(s32)
103 %24:_(s16) = G_IMPLICIT_DEF
104 %25:_(s32) = G_ZEXT %24(s16)
106 %26:_(s32) = G_SEXT %24(s16)
108 %27:_(s32) = G_ANYEXT %24(s16)
113 name: test_anyext_anyext
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)
123 %1:_(s1) = G_TRUNC %0(s32)
124 %2:_(s8) = G_ANYEXT %1(s1)
125 %3:_(s32) = G_ANYEXT %2(s8)
130 name: test_anyext_sext
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)
141 %1:_(s1) = G_TRUNC %0(s32)
142 %2:_(s8) = G_SEXT %1(s1)
143 %3:_(s32) = G_ANYEXT %2(s8)
148 name: test_anyext_zext
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)
160 %1:_(s1) = G_TRUNC %0(s32)
161 %2:_(s8) = G_ZEXT %1(s1)
162 %3:_(s32) = G_ANYEXT %2(s8)
167 name: test_zext_v8s16_from_v8s8
169 tracksRegLiveness: true
170 machineFunctionInfo: {}
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
189 tracksRegLiveness: true
190 machineFunctionInfo: {}
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
209 tracksRegLiveness: true
210 machineFunctionInfo: {}
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
229 tracksRegLiveness: true
230 machineFunctionInfo: {}
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
250 tracksRegLiveness: true
251 machineFunctionInfo: {}
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
271 tracksRegLiveness: true
272 machineFunctionInfo: {}
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
292 tracksRegLiveness: true
294 - { id: 0, class: _ }
295 - { id: 1, class: _ }
296 machineFunctionInfo: {}
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
316 tracksRegLiveness: true
318 - { id: 0, class: _ }
319 - { id: 1, class: _ }
320 machineFunctionInfo: {}
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
340 tracksRegLiveness: true
342 - { id: 0, class: _ }
343 - { id: 1, class: _ }
344 machineFunctionInfo: {}
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