xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/combine-fshl.mir (revision b7a305deca809e281e7b28a5714d708906821773)
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
3
4---
5name:            fshl_i8
6alignment:       4
7tracksRegLiveness: true
8body:             |
9  bb.0:
10    liveins: $w0, $w1, $w2
11
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
35
36...
37
38---
39name:            fshl_i16
40alignment:       4
41tracksRegLiveness: true
42body:             |
43  bb.0:
44    liveins: $w0, $w1, $w2
45
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
69
70...
71
72---
73name:            fshl_i32
74alignment:       4
75tracksRegLiveness: true
76body:             |
77  bb.0:
78    liveins: $w0, $w1, $w2
79
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
95
96...
97
98---
99name:            fshl_i64
100alignment:       4
101tracksRegLiveness: true
102body:             |
103  bb.0:
104    liveins: $x0, $x1, $x2
105
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
121
122...
123
124---
125name:            fshl_i8_const_shift
126alignment:       4
127tracksRegLiveness: true
128body:             |
129  bb.0:
130    liveins: $w0, $w1
131
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
153
154...
155
156---
157name:            fshl_i8_const_overshift
158alignment:       4
159tracksRegLiveness: true
160body:             |
161  bb.0:
162    liveins: $w0, $w1
163
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
185
186...
187
188---
189name:            fshl_i8_shift_by_bidwidth
190alignment:       4
191tracksRegLiveness: true
192body:             |
193  bb.0:
194    liveins: $w0, $w1
195
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
211
212...
213
214---
215name:            fshl_i16_const_shift
216alignment:       4
217tracksRegLiveness: true
218body:             |
219  bb.0:
220    liveins: $w0, $w1
221
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
243
244...
245
246---
247name:            fshl_i16_const_overshift
248alignment:       4
249tracksRegLiveness: true
250body:             |
251  bb.0:
252    liveins: $w0, $w1
253
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
275
276...
277
278---
279name:            fshl_i16_shift_by_bidwidth
280alignment:       4
281tracksRegLiveness: true
282body:             |
283  bb.0:
284    liveins: $w0, $w1
285
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
301
302...
303
304---
305name:            fshl_i32_const_shift
306alignment:       4
307tracksRegLiveness: true
308body:             |
309  bb.0:
310    liveins: $w0, $w1
311
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
327
328...
329
330---
331name:            fshl_i32_const_overshift
332alignment:       4
333tracksRegLiveness: true
334body:             |
335  bb.0:
336    liveins: $w0, $w1
337
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
353
354...
355
356---
357name:            fshl_i32_shift_by_bidwidth
358alignment:       4
359tracksRegLiveness: true
360body:             |
361  bb.0:
362    liveins: $w0, $w1
363
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
376
377...
378
379---
380name:            fshl_i64_const_shift
381alignment:       4
382tracksRegLiveness: true
383body:             |
384  bb.0:
385    liveins: $x0, $x1
386
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
402
403...
404
405---
406name:            fshl_i64_const_overshift
407alignment:       4
408tracksRegLiveness: true
409body:             |
410  bb.0:
411    liveins: $x0, $x1
412
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
428
429...
430
431---
432name:            fshl_i64_shift_by_bidwidth
433alignment:       4
434tracksRegLiveness: true
435body:             |
436  bb.0:
437    liveins: $x0, $x1
438
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
451
452...
453