[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-fshl.mir
blob176cf88ed5a96ecd984753c718c2c0cd10c42be1
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2 # RUN: llc -mtriple=arm64-unknown-unknown -global-isel -run-pass=aarch64-prelegalizer-combiner %s -o - | FileCheck %s
4 ---
5 name:            fshl_i8
6 alignment:       4
7 tracksRegLiveness: true
8 body:             |
9   bb.0:
10     liveins: $w0, $w1, $w2
12     ; CHECK-LABEL: name: fshl_i8
13     ; CHECK: liveins: $w0, $w1, $w2
14     ; CHECK-NEXT: {{  $}}
15     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
16     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
17     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
18     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
19     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
20     ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[COPY2]](s32)
21     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s8) = G_FSHL [[TRUNC]], [[TRUNC1]], [[TRUNC2]](s8)
22     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s8)
23     ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
24     ; CHECK-NEXT: RET_ReallyLR implicit $w0
25     %3:_(s32) = COPY $w0
26     %0:_(s8) = G_TRUNC %3(s32)
27     %4:_(s32) = COPY $w1
28     %1:_(s8) = G_TRUNC %4(s32)
29     %5:_(s32) = COPY $w2
30     %2:_(s8) = G_TRUNC %5(s32)
31     %6:_(s8) = G_FSHL %0, %1, %2(s8)
32     %7:_(s32) = G_ANYEXT %6(s8)
33     $w0 = COPY %7(s32)
34     RET_ReallyLR implicit $w0
36 ...
38 ---
39 name:            fshl_i16
40 alignment:       4
41 tracksRegLiveness: true
42 body:             |
43   bb.0:
44     liveins: $w0, $w1, $w2
46     ; CHECK-LABEL: name: fshl_i16
47     ; CHECK: liveins: $w0, $w1, $w2
48     ; CHECK-NEXT: {{  $}}
49     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
50     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
51     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
52     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
53     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
54     ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)
55     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s16) = G_FSHL [[TRUNC]], [[TRUNC1]], [[TRUNC2]](s16)
56     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s16)
57     ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
58     ; CHECK-NEXT: RET_ReallyLR implicit $w0
59     %3:_(s32) = COPY $w0
60     %0:_(s16) = G_TRUNC %3(s32)
61     %4:_(s32) = COPY $w1
62     %1:_(s16) = G_TRUNC %4(s32)
63     %5:_(s32) = COPY $w2
64     %2:_(s16) = G_TRUNC %5(s32)
65     %6:_(s16) = G_FSHL %0, %1, %2(s16)
66     %7:_(s32) = G_ANYEXT %6(s16)
67     $w0 = COPY %7(s32)
68     RET_ReallyLR implicit $w0
70 ...
72 ---
73 name:            fshl_i32
74 alignment:       4
75 tracksRegLiveness: true
76 body:             |
77   bb.0:
78     liveins: $w0, $w1, $w2
80     ; CHECK-LABEL: name: fshl_i32
81     ; CHECK: liveins: $w0, $w1, $w2
82     ; CHECK-NEXT: {{  $}}
83     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
84     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
85     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
86     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s32) = G_FSHL [[COPY]], [[COPY1]], [[COPY2]](s32)
87     ; CHECK-NEXT: $w0 = COPY [[FSHL]](s32)
88     ; CHECK-NEXT: RET_ReallyLR implicit $w0
89     %0:_(s32) = COPY $w0
90     %1:_(s32) = COPY $w1
91     %2:_(s32) = COPY $w2
92     %3:_(s32) = G_FSHL %0, %1, %2(s32)
93     $w0 = COPY %3(s32)
94     RET_ReallyLR implicit $w0
96 ...
98 ---
99 name:            fshl_i64
100 alignment:       4
101 tracksRegLiveness: true
102 body:             |
103   bb.0:
104     liveins: $x0, $x1, $x2
106     ; CHECK-LABEL: name: fshl_i64
107     ; CHECK: liveins: $x0, $x1, $x2
108     ; CHECK-NEXT: {{  $}}
109     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
110     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
111     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
112     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s64) = G_FSHL [[COPY]], [[COPY1]], [[COPY2]](s64)
113     ; CHECK-NEXT: $x0 = COPY [[FSHL]](s64)
114     ; CHECK-NEXT: RET_ReallyLR implicit $x0
115     %0:_(s64) = COPY $x0
116     %1:_(s64) = COPY $x1
117     %2:_(s64) = COPY $x2
118     %3:_(s64) = G_FSHL %0, %1, %2(s64)
119     $x0 = COPY %3(s64)
120     RET_ReallyLR implicit $x0
125 name:            fshl_i8_const_shift
126 alignment:       4
127 tracksRegLiveness: true
128 body:             |
129   bb.0:
130     liveins: $w0, $w1
132     ; CHECK-LABEL: name: fshl_i8_const_shift
133     ; CHECK: liveins: $w0, $w1
134     ; CHECK-NEXT: {{  $}}
135     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
136     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
137     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
138     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
139     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 5
140     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s8) = G_FSHL [[TRUNC]], [[TRUNC1]], [[C]](s8)
141     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s8)
142     ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
143     ; CHECK-NEXT: RET_ReallyLR implicit $w0
144     %2:_(s32) = COPY $w0
145     %0:_(s8) = G_TRUNC %2(s32)
146     %3:_(s32) = COPY $w1
147     %1:_(s8) = G_TRUNC %3(s32)
148     %4:_(s8) = G_CONSTANT i8 5
149     %5:_(s8) = G_FSHL %0, %1, %4(s8)
150     %6:_(s32) = G_ANYEXT %5(s8)
151     $w0 = COPY %6(s32)
152     RET_ReallyLR implicit $w0
157 name:            fshl_i8_const_overshift
158 alignment:       4
159 tracksRegLiveness: true
160 body:             |
161   bb.0:
162     liveins: $w0, $w1
164     ; CHECK-LABEL: name: fshl_i8_const_overshift
165     ; CHECK: liveins: $w0, $w1
166     ; CHECK-NEXT: {{  $}}
167     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
168     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
169     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
170     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
171     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 2
172     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s8) = G_FSHL [[TRUNC]], [[TRUNC1]], [[C]](s8)
173     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s8)
174     ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
175     ; CHECK-NEXT: RET_ReallyLR implicit $w0
176     %2:_(s32) = COPY $w0
177     %0:_(s8) = G_TRUNC %2(s32)
178     %3:_(s32) = COPY $w1
179     %1:_(s8) = G_TRUNC %3(s32)
180     %4:_(s8) = G_CONSTANT i8 10
181     %5:_(s8) = G_FSHL %0, %1, %4(s8)
182     %6:_(s32) = G_ANYEXT %5(s8)
183     $w0 = COPY %6(s32)
184     RET_ReallyLR implicit $w0
189 name:            fshl_i8_shift_by_bidwidth
190 alignment:       4
191 tracksRegLiveness: true
192 body:             |
193   bb.0:
194     liveins: $w0, $w1
196     ; CHECK-LABEL: name: fshl_i8_shift_by_bidwidth
197     ; CHECK: liveins: $w0, $w1
198     ; CHECK-NEXT: {{  $}}
199     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
200     ; CHECK-NEXT: $w0 = COPY [[COPY]](s32)
201     ; CHECK-NEXT: RET_ReallyLR implicit $w0
202     %2:_(s32) = COPY $w0
203     %0:_(s8) = G_TRUNC %2(s32)
204     %3:_(s32) = COPY $w1
205     %1:_(s8) = G_TRUNC %3(s32)
206     %4:_(s8) = G_CONSTANT i8 8
207     %5:_(s8) = G_FSHL %0, %1, %4(s8)
208     %6:_(s32) = G_ANYEXT %5(s8)
209     $w0 = COPY %6(s32)
210     RET_ReallyLR implicit $w0
215 name:            fshl_i16_const_shift
216 alignment:       4
217 tracksRegLiveness: true
218 body:             |
219   bb.0:
220     liveins: $w0, $w1
222     ; CHECK-LABEL: name: fshl_i16_const_shift
223     ; CHECK: liveins: $w0, $w1
224     ; CHECK-NEXT: {{  $}}
225     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
226     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
227     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
228     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
229     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 5
230     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s16) = G_FSHL [[TRUNC]], [[TRUNC1]], [[C]](s16)
231     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s16)
232     ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
233     ; CHECK-NEXT: RET_ReallyLR implicit $w0
234     %2:_(s32) = COPY $w0
235     %0:_(s16) = G_TRUNC %2(s32)
236     %3:_(s32) = COPY $w1
237     %1:_(s16) = G_TRUNC %3(s32)
238     %4:_(s16) = G_CONSTANT i16 5
239     %5:_(s16) = G_FSHL %0, %1, %4(s16)
240     %6:_(s32) = G_ANYEXT %5(s16)
241     $w0 = COPY %6(s32)
242     RET_ReallyLR implicit $w0
247 name:            fshl_i16_const_overshift
248 alignment:       4
249 tracksRegLiveness: true
250 body:             |
251   bb.0:
252     liveins: $w0, $w1
254     ; CHECK-LABEL: name: fshl_i16_const_overshift
255     ; CHECK: liveins: $w0, $w1
256     ; CHECK-NEXT: {{  $}}
257     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
258     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
259     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
260     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
261     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 4
262     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s16) = G_FSHL [[TRUNC]], [[TRUNC1]], [[C]](s16)
263     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FSHL]](s16)
264     ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
265     ; CHECK-NEXT: RET_ReallyLR implicit $w0
266     %2:_(s32) = COPY $w0
267     %0:_(s16) = G_TRUNC %2(s32)
268     %3:_(s32) = COPY $w1
269     %1:_(s16) = G_TRUNC %3(s32)
270     %4:_(s16) = G_CONSTANT i16 20
271     %5:_(s16) = G_FSHL %0, %1, %4(s16)
272     %6:_(s32) = G_ANYEXT %5(s16)
273     $w0 = COPY %6(s32)
274     RET_ReallyLR implicit $w0
279 name:            fshl_i16_shift_by_bidwidth
280 alignment:       4
281 tracksRegLiveness: true
282 body:             |
283   bb.0:
284     liveins: $w0, $w1
286     ; CHECK-LABEL: name: fshl_i16_shift_by_bidwidth
287     ; CHECK: liveins: $w0, $w1
288     ; CHECK-NEXT: {{  $}}
289     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
290     ; CHECK-NEXT: $w0 = COPY [[COPY]](s32)
291     ; CHECK-NEXT: RET_ReallyLR implicit $w0
292     %2:_(s32) = COPY $w0
293     %0:_(s16) = G_TRUNC %2(s32)
294     %3:_(s32) = COPY $w1
295     %1:_(s16) = G_TRUNC %3(s32)
296     %4:_(s16) = G_CONSTANT i16 16
297     %5:_(s16) = G_FSHL %0, %1, %4(s16)
298     %6:_(s32) = G_ANYEXT %5(s16)
299     $w0 = COPY %6(s32)
300     RET_ReallyLR implicit $w0
305 name:            fshl_i32_const_shift
306 alignment:       4
307 tracksRegLiveness: true
308 body:             |
309   bb.0:
310     liveins: $w0, $w1
312     ; CHECK-LABEL: name: fshl_i32_const_shift
313     ; CHECK: liveins: $w0, $w1
314     ; CHECK-NEXT: {{  $}}
315     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
316     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
317     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 5
318     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s32) = G_FSHL [[COPY]], [[COPY1]], [[C]](s32)
319     ; CHECK-NEXT: $w0 = COPY [[FSHL]](s32)
320     ; CHECK-NEXT: RET_ReallyLR implicit $w0
321     %0:_(s32) = COPY $w0
322     %1:_(s32) = COPY $w1
323     %2:_(s32) = G_CONSTANT i32 5
324     %3:_(s32) = G_FSHL %0, %1, %2(s32)
325     $w0 = COPY %3(s32)
326     RET_ReallyLR implicit $w0
331 name:            fshl_i32_const_overshift
332 alignment:       4
333 tracksRegLiveness: true
334 body:             |
335   bb.0:
336     liveins: $w0, $w1
338     ; CHECK-LABEL: name: fshl_i32_const_overshift
339     ; CHECK: liveins: $w0, $w1
340     ; CHECK-NEXT: {{  $}}
341     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
342     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
343     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
344     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s32) = G_FSHL [[COPY]], [[COPY1]], [[C]](s32)
345     ; CHECK-NEXT: $w0 = COPY [[FSHL]](s32)
346     ; CHECK-NEXT: RET_ReallyLR implicit $w0
347     %0:_(s32) = COPY $w0
348     %1:_(s32) = COPY $w1
349     %2:_(s32) = G_CONSTANT i32 42
350     %3:_(s32) = G_FSHL %0, %1, %2(s32)
351     $w0 = COPY %3(s32)
352     RET_ReallyLR implicit $w0
357 name:            fshl_i32_shift_by_bidwidth
358 alignment:       4
359 tracksRegLiveness: true
360 body:             |
361   bb.0:
362     liveins: $w0, $w1
364     ; CHECK-LABEL: name: fshl_i32_shift_by_bidwidth
365     ; CHECK: liveins: $w0, $w1
366     ; CHECK-NEXT: {{  $}}
367     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
368     ; CHECK-NEXT: $w0 = COPY [[COPY]](s32)
369     ; CHECK-NEXT: RET_ReallyLR implicit $w0
370     %0:_(s32) = COPY $w0
371     %1:_(s32) = COPY $w1
372     %2:_(s32) = G_CONSTANT i32 32
373     %3:_(s32) = G_FSHL %0, %1, %2(s32)
374     $w0 = COPY %3(s32)
375     RET_ReallyLR implicit $w0
380 name:            fshl_i64_const_shift
381 alignment:       4
382 tracksRegLiveness: true
383 body:             |
384   bb.0:
385     liveins: $x0, $x1
387     ; CHECK-LABEL: name: fshl_i64_const_shift
388     ; CHECK: liveins: $x0, $x1
389     ; CHECK-NEXT: {{  $}}
390     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
391     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
392     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5
393     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s64) = G_FSHL [[COPY]], [[COPY1]], [[C]](s64)
394     ; CHECK-NEXT: $x0 = COPY [[FSHL]](s64)
395     ; CHECK-NEXT: RET_ReallyLR implicit $x0
396     %0:_(s64) = COPY $x0
397     %1:_(s64) = COPY $x1
398     %2:_(s64) = G_CONSTANT i64 5
399     %3:_(s64) = G_FSHL %0, %1, %2(s64)
400     $x0 = COPY %3(s64)
401     RET_ReallyLR implicit $x0
406 name:            fshl_i64_const_overshift
407 alignment:       4
408 tracksRegLiveness: true
409 body:             |
410   bb.0:
411     liveins: $x0, $x1
413     ; CHECK-LABEL: name: fshl_i64_const_overshift
414     ; CHECK: liveins: $x0, $x1
415     ; CHECK-NEXT: {{  $}}
416     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
417     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
418     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
419     ; CHECK-NEXT: [[FSHL:%[0-9]+]]:_(s64) = G_FSHL [[COPY]], [[COPY1]], [[C]](s64)
420     ; CHECK-NEXT: $x0 = COPY [[FSHL]](s64)
421     ; CHECK-NEXT: RET_ReallyLR implicit $x0
422     %0:_(s64) = COPY $x0
423     %1:_(s64) = COPY $x1
424     %2:_(s64) = G_CONSTANT i64 72
425     %3:_(s64) = G_FSHL %0, %1, %2(s64)
426     $x0 = COPY %3(s64)
427     RET_ReallyLR implicit $x0
432 name:            fshl_i64_shift_by_bidwidth
433 alignment:       4
434 tracksRegLiveness: true
435 body:             |
436   bb.0:
437     liveins: $x0, $x1
439     ; CHECK-LABEL: name: fshl_i64_shift_by_bidwidth
440     ; CHECK: liveins: $x0, $x1
441     ; CHECK-NEXT: {{  $}}
442     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
443     ; CHECK-NEXT: $x0 = COPY [[COPY]](s64)
444     ; CHECK-NEXT: RET_ReallyLR implicit $x0
445     %0:_(s64) = COPY $x0
446     %1:_(s64) = COPY $x1
447     %2:_(s64) = G_CONSTANT i64 64
448     %3:_(s64) = G_FSHL %0, %1, %2(s64)
449     $x0 = COPY %3(s64)
450     RET_ReallyLR implicit $x0