Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-ext.mir
bloba431a6764d06f7b42f57bba92594f0c8184169ff
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -o - -mtriple=aarch64-unknown-unknown -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs  %s | FileCheck %s
3 ---
4 name:            test_combine_anyext_trunc
5 body:             |
6   bb.1:
7   liveins: $x0
8     ; CHECK-LABEL: name: test_combine_anyext_trunc
9     ; CHECK: liveins: $x0
10     ; CHECK-NEXT: {{  $}}
11     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
12     ; CHECK-NEXT: $x1 = COPY [[COPY]](s64)
13     %0:_(s64) = COPY $x0
14     %1:_(s32) = G_TRUNC %0(s64)
15     %2:_(s64) = G_ANYEXT %1(s32)
16     $x1 = COPY %2(s64)
17 ...
18 ---
19 name:            test_combine_anyext_trunc_with_hint
20 body:             |
21   bb.1:
22   liveins: $x0
23     ; CHECK-LABEL: name: test_combine_anyext_trunc_with_hint
24     ; CHECK: liveins: $x0
25     ; CHECK-NEXT: {{  $}}
26     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
27     ; CHECK-NEXT: $x1 = COPY [[COPY]](s64)
28     %0:_(s64) = COPY $x0
29     %1:_(s32) = G_TRUNC %0(s64)
30     %2:_(s32) = G_ASSERT_ZEXT %1(s32), 11
31     %3:_(s64) = G_ANYEXT %2(s32)
32     $x1 = COPY %3(s64)
33 ...
34 ---
35 name:            test_combine_anyext_trunc_vec
36 body:             |
37   bb.1:
38   liveins: $q0
39     ; CHECK-LABEL: name: test_combine_anyext_trunc_vec
40     ; CHECK: liveins: $q0
41     ; CHECK-NEXT: {{  $}}
42     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
43     ; CHECK-NEXT: $q0 = COPY [[COPY]](<2 x s64>)
44     %0:_(<2 x s64>) = COPY $q0
45     %1:_(<2 x s32>) = G_TRUNC %0(<2 x s64>)
46     %2:_(<2 x s64>) = G_ANYEXT %1(<2 x s32>)
47     $q0 = COPY %2(<2 x s64>)
48 ...
49 ---
50 name:            test_combine_anyext_anyext
51 body:             |
52   bb.1:
53   liveins: $h0
54     ; CHECK-LABEL: name: test_combine_anyext_anyext
55     ; CHECK: liveins: $h0
56     ; CHECK-NEXT: {{  $}}
57     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
58     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s16)
59     ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)
60     %0:_(s16) = COPY $h0
61     %1:_(s32) = G_ANYEXT %0(s16)
62     %2:_(s64) = G_ANYEXT %1(s32)
63     $x0 = COPY %2(s64)
64 ...
65 ---
66 name:            test_combine_anyext_anyext_with_hint
67 body:             |
68   bb.1:
69   liveins: $h0
70     ; CHECK-LABEL: name: test_combine_anyext_anyext_with_hint
71     ; CHECK: liveins: $h0
72     ; CHECK-NEXT: {{  $}}
73     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
74     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s16)
75     ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)
76     %0:_(s16) = COPY $h0
77     %1:_(s32) = G_ANYEXT %0(s16)
78     %2:_(s32) = G_ASSERT_ZEXT %1(s32), 11
79     %3:_(s64) = G_ANYEXT %2(s32)
80     $x0 = COPY %3(s64)
81 ...
82 ---
83 name:            test_combine_anyext_anyext_vec
84 body:             |
85   bb.1:
86   liveins: $s0
87     ; CHECK-LABEL: name: test_combine_anyext_anyext_vec
88     ; CHECK: liveins: $s0
89     ; CHECK-NEXT: {{  $}}
90     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $s0
91     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(<2 x s64>) = G_ANYEXT [[COPY]](<2 x s16>)
92     ; CHECK-NEXT: $q0 = COPY [[ANYEXT]](<2 x s64>)
93     %0:_(<2 x s16>) = COPY $s0
94     %1:_(<2 x s32>) = G_ANYEXT %0(<2 x s16>)
95     %2:_(<2 x s64>) = G_ANYEXT %1(<2 x s32>)
96     $q0 = COPY %2(<2 x s64>)
97 ...
98 ---
99 name:            test_combine_anyext_sext
100 body:             |
101   bb.1:
102   liveins: $h0
103     ; CHECK-LABEL: name: test_combine_anyext_sext
104     ; CHECK: liveins: $h0
105     ; CHECK-NEXT: {{  $}}
106     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
107     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s16)
108     ; CHECK-NEXT: $x0 = COPY [[SEXT]](s64)
109     %0:_(s16) = COPY $h0
110     %1:_(s32) = G_SEXT %0(s16)
111     %2:_(s64) = G_ANYEXT %1(s32)
112     $x0 = COPY %2(s64)
115 name:            test_combine_anyext_sext_with_hint
116 body:             |
117   bb.1:
118   liveins: $h0
119     ; CHECK-LABEL: name: test_combine_anyext_sext_with_hint
120     ; CHECK: liveins: $h0
121     ; CHECK-NEXT: {{  $}}
122     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
123     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s16)
124     ; CHECK-NEXT: $x0 = COPY [[SEXT]](s64)
125     %0:_(s16) = COPY $h0
126     %1:_(s32) = G_SEXT %0(s16)
127     %2:_(s32) = G_ASSERT_ZEXT %1(s32), 11
128     %3:_(s64) = G_ANYEXT %2(s32)
129     $x0 = COPY %3(s64)
132 name:            test_combine_anyext_sext_vec
133 body:             |
134   bb.1:
135   liveins: $s0
136     ; CHECK-LABEL: name: test_combine_anyext_sext_vec
137     ; CHECK: liveins: $s0
138     ; CHECK-NEXT: {{  $}}
139     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $s0
140     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(<2 x s64>) = G_SEXT [[COPY]](<2 x s16>)
141     ; CHECK-NEXT: $q0 = COPY [[SEXT]](<2 x s64>)
142     %0:_(<2 x s16>) = COPY $s0
143     %1:_(<2 x s32>) = G_SEXT %0(<2 x s16>)
144     %2:_(<2 x s64>) = G_ANYEXT %1(<2 x s32>)
145     $q0 = COPY %2(<2 x s64>)
148 name:            test_combine_anyext_zext
149 body:             |
150   bb.1:
151   liveins: $h0
152     ; CHECK-LABEL: name: test_combine_anyext_zext
153     ; CHECK: liveins: $h0
154     ; CHECK-NEXT: {{  $}}
155     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
156     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s16)
157     ; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
158     %0:_(s16) = COPY $h0
159     %1:_(s32) = G_ZEXT %0(s16)
160     %2:_(s64) = G_ANYEXT %1(s32)
161     $x0 = COPY %2(s64)
164 name:            test_combine_anyext_zext_with_hint
165 body:             |
166   bb.1:
167   liveins: $h0
168     ; CHECK-LABEL: name: test_combine_anyext_zext_with_hint
169     ; CHECK: liveins: $h0
170     ; CHECK-NEXT: {{  $}}
171     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
172     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s16)
173     ; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
174     %0:_(s16) = COPY $h0
175     %1:_(s32) = G_ZEXT %0(s16)
176     %2:_(s32) = G_ASSERT_ZEXT %1(s32), 11
177     %3:_(s64) = G_ANYEXT %2(s32)
178     $x0 = COPY %3(s64)
181 name:            test_combine_anyext_zext_vec
182 body:             |
183   bb.1:
184   liveins: $s0
185     ; CHECK-LABEL: name: test_combine_anyext_zext_vec
186     ; CHECK: liveins: $s0
187     ; CHECK-NEXT: {{  $}}
188     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $s0
189     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(<2 x s64>) = G_ZEXT [[COPY]](<2 x s16>)
190     ; CHECK-NEXT: $q0 = COPY [[ZEXT]](<2 x s64>)
191     %0:_(<2 x s16>) = COPY $s0
192     %1:_(<2 x s32>) = G_ZEXT %0(<2 x s16>)
193     %2:_(<2 x s64>) = G_ANYEXT %1(<2 x s32>)
194     $q0 = COPY %2(<2 x s64>)
197 name:            test_combine_sext_sext
198 body:             |
199   bb.1:
200   liveins: $h0
201     ; CHECK-LABEL: name: test_combine_sext_sext
202     ; CHECK: liveins: $h0
203     ; CHECK-NEXT: {{  $}}
204     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
205     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s16)
206     ; CHECK-NEXT: $x0 = COPY [[SEXT]](s64)
207     %0:_(s16) = COPY $h0
208     %1:_(s32) = G_SEXT %0(s16)
209     %2:_(s64) = G_SEXT %1(s32)
210     $x0 = COPY %2(s64)
213 name:            test_combine_sext_sext_with_hint
214 body:             |
215   bb.1:
216   liveins: $h0
217     ; CHECK-LABEL: name: test_combine_sext_sext_with_hint
218     ; CHECK: liveins: $h0
219     ; CHECK-NEXT: {{  $}}
220     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
221     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s16)
222     ; CHECK-NEXT: $x0 = COPY [[SEXT]](s64)
223     %0:_(s16) = COPY $h0
224     %1:_(s32) = G_SEXT %0(s16)
225     %2:_(s32) = G_ASSERT_SEXT %1(s32), 11
226     %3:_(s64) = G_SEXT %2(s32)
227     $x0 = COPY %3(s64)
230 name:            test_combine_sext_sext_vec
231 body:             |
232   bb.1:
233   liveins: $s0
234     ; CHECK-LABEL: name: test_combine_sext_sext_vec
235     ; CHECK: liveins: $s0
236     ; CHECK-NEXT: {{  $}}
237     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $s0
238     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(<2 x s64>) = G_SEXT [[COPY]](<2 x s16>)
239     ; CHECK-NEXT: $q0 = COPY [[SEXT]](<2 x s64>)
240     %0:_(<2 x s16>) = COPY $s0
241     %1:_(<2 x s32>) = G_SEXT %0(<2 x s16>)
242     %2:_(<2 x s64>) = G_SEXT %1(<2 x s32>)
243     $q0 = COPY %2(<2 x s64>)
246 name:            test_combine_sext_zext
247 body:             |
248   bb.1:
249   liveins: $h0
250     ; CHECK-LABEL: name: test_combine_sext_zext
251     ; CHECK: liveins: $h0
252     ; CHECK-NEXT: {{  $}}
253     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
254     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s16)
255     ; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
256     %0:_(s16) = COPY $h0
257     %1:_(s32) = G_ZEXT %0(s16)
258     %2:_(s64) = G_SEXT %1(s32)
259     $x0 = COPY %2(s64)
262 name:            test_combine_sext_zext_with_hint
263 body:             |
264   bb.1:
265   liveins: $h0
266     ; CHECK-LABEL: name: test_combine_sext_zext_with_hint
267     ; CHECK: liveins: $h0
268     ; CHECK-NEXT: {{  $}}
269     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
270     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s16)
271     ; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
272     %0:_(s16) = COPY $h0
273     %1:_(s32) = G_ZEXT %0(s16)
274     %2:_(s32) = G_ASSERT_ZEXT %1(s32), 11
275     %3:_(s64) = G_SEXT %2(s32)
276     $x0 = COPY %3(s64)
279 name:            test_combine_sext_zext_vec
280 body:             |
281   bb.1:
282   liveins: $s0
283     ; CHECK-LABEL: name: test_combine_sext_zext_vec
284     ; CHECK: liveins: $s0
285     ; CHECK-NEXT: {{  $}}
286     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $s0
287     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(<2 x s64>) = G_ZEXT [[COPY]](<2 x s16>)
288     ; CHECK-NEXT: $q0 = COPY [[ZEXT]](<2 x s64>)
289     %0:_(<2 x s16>) = COPY $s0
290     %1:_(<2 x s32>) = G_ZEXT %0(<2 x s16>)
291     %2:_(<2 x s64>) = G_SEXT %1(<2 x s32>)
292     $q0 = COPY %2(<2 x s64>)
295 name:            test_combine_zext_zext
296 body:             |
297   bb.1:
298   liveins: $h0
299     ; CHECK-LABEL: name: test_combine_zext_zext
300     ; CHECK: liveins: $h0
301     ; CHECK-NEXT: {{  $}}
302     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
303     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s16)
304     ; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
305     %0:_(s16) = COPY $h0
306     %1:_(s32) = G_ZEXT %0(s16)
307     %2:_(s64) = G_ZEXT %1(s32)
308     $x0 = COPY %2(s64)
311 name:            test_combine_zext_zext_with_hint
312 body:             |
313   bb.1:
314   liveins: $h0
315     ; CHECK-LABEL: name: test_combine_zext_zext_with_hint
316     ; CHECK: liveins: $h0
317     ; CHECK-NEXT: {{  $}}
318     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
319     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s16)
320     ; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
321     %0:_(s16) = COPY $h0
322     %1:_(s32) = G_ZEXT %0(s16)
323     %2:_(s32) = G_ASSERT_ZEXT %1(s32), 11
324     %3:_(s64) = G_ZEXT %2(s32)
325     $x0 = COPY %3(s64)
328 name:            test_combine_zext_zext_vec
329 body:             |
330   bb.1:
331   liveins: $s0
332     ; CHECK-LABEL: name: test_combine_zext_zext_vec
333     ; CHECK: liveins: $s0
334     ; CHECK-NEXT: {{  $}}
335     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $s0
336     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(<2 x s64>) = G_ZEXT [[COPY]](<2 x s16>)
337     ; CHECK-NEXT: $q0 = COPY [[ZEXT]](<2 x s64>)
338     %0:_(<2 x s16>) = COPY $s0
339     %1:_(<2 x s32>) = G_ZEXT %0(<2 x s16>)
340     %2:_(<2 x s64>) = G_ZEXT %1(<2 x s32>)
341     $q0 = COPY %2(<2 x s64>)