xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/select-arith-shifted-reg.mir (revision 490a867f16c064b774aeae9661dc699a65909ce2)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=aarch64-unknown-unknown -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3
4---
5name:            add_shl_s64_rhs
6legalized:       true
7regBankSelected: true
8tracksRegLiveness: true
9body:             |
10  bb.0:
11    liveins: $x0
12    ; CHECK-LABEL: name: add_shl_s64_rhs
13    ; CHECK: liveins: $x0
14    ; CHECK-NEXT: {{  $}}
15    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
16    ; CHECK-NEXT: [[ADDXrs:%[0-9]+]]:gpr64 = ADDXrs [[COPY]], [[COPY]], 8
17    ; CHECK-NEXT: $x0 = COPY [[ADDXrs]]
18    ; CHECK-NEXT: RET_ReallyLR implicit $x0
19    %0:gpr(s64) = COPY $x0
20    %1:gpr(s64) = G_CONSTANT i64 8
21    %2:gpr(s64) = G_SHL %0, %1:gpr(s64)
22    %3:gpr(s64) = G_ADD %0, %2:gpr(s64)
23    $x0 = COPY %3:gpr(s64)
24    RET_ReallyLR implicit $x0
25
26...
27---
28name:            add_shl_s64_lhs
29legalized:       true
30regBankSelected: true
31tracksRegLiveness: true
32body:             |
33  bb.0:
34    liveins: $x0, $x1
35    ; CHECK-LABEL: name: add_shl_s64_lhs
36    ; CHECK: liveins: $x0, $x1
37    ; CHECK-NEXT: {{  $}}
38    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
39    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
40    ; CHECK-NEXT: [[ADDXrs:%[0-9]+]]:gpr64 = ADDXrs [[COPY1]], [[COPY]], 8
41    ; CHECK-NEXT: $x0 = COPY [[ADDXrs]]
42    ; CHECK-NEXT: RET_ReallyLR implicit $x0
43    %0:gpr(s64) = COPY $x0
44    %4:gpr(s64) = COPY $x1
45    %1:gpr(s64) = G_CONSTANT i64 8
46    %2:gpr(s64) = G_SHL %0, %1:gpr(s64)
47    %3:gpr(s64) = G_ADD %2, %4:gpr(s64)
48    $x0 = COPY %3:gpr(s64)
49    RET_ReallyLR implicit $x0
50
51...
52---
53name:            sub_shl_s64_rhs
54legalized:       true
55regBankSelected: true
56tracksRegLiveness: true
57body:             |
58  bb.0:
59    liveins: $x0
60    ; CHECK-LABEL: name: sub_shl_s64_rhs
61    ; CHECK: liveins: $x0
62    ; CHECK-NEXT: {{  $}}
63    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
64    ; CHECK-NEXT: [[SUBSXrs:%[0-9]+]]:gpr64 = SUBSXrs [[COPY]], [[COPY]], 8, implicit-def dead $nzcv
65    ; CHECK-NEXT: $x0 = COPY [[SUBSXrs]]
66    ; CHECK-NEXT: RET_ReallyLR implicit $x0
67    %0:gpr(s64) = COPY $x0
68    %1:gpr(s64) = G_CONSTANT i64 8
69    %2:gpr(s64) = G_SHL %0, %1:gpr(s64)
70    %3:gpr(s64) = G_SUB %0, %2:gpr(s64)
71    $x0 = COPY %3:gpr(s64)
72    RET_ReallyLR implicit $x0
73
74---
75name:            add_lshr_s64_rhs
76legalized:       true
77regBankSelected: true
78tracksRegLiveness: true
79body:             |
80  bb.0:
81    liveins: $x0
82    %0:gpr(s64) = COPY $x0
83    %1:gpr(s64) = G_CONSTANT i64 8
84    %2:gpr(s64) = G_LSHR %0, %1:gpr(s64)
85    %3:gpr(s64) = G_ADD %0, %2:gpr(s64)
86    $x0 = COPY %3:gpr(s64)
87    RET_ReallyLR implicit $x0
88
89...
90---
91name:            add_lshr_s64_lhs
92legalized:       true
93regBankSelected: true
94tracksRegLiveness: true
95body:             |
96  bb.0:
97    liveins: $x0, $x1
98    ; CHECK-LABEL: name: add_lshr_s64_lhs
99    ; CHECK: liveins: $x0, $x1
100    ; CHECK-NEXT: {{  $}}
101    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
102    ; CHECK-NEXT: %param2:gpr64 = COPY $x1
103    ; CHECK-NEXT: [[ADDXrs:%[0-9]+]]:gpr64 = ADDXrs %param2, [[COPY]], 72
104    ; CHECK-NEXT: $x0 = COPY [[ADDXrs]]
105    ; CHECK-NEXT: RET_ReallyLR implicit $x0
106    %0:gpr(s64) = COPY $x0
107    %param2:gpr(s64) = COPY $x1
108    %1:gpr(s64) = G_CONSTANT i64 8
109    %2:gpr(s64) = G_LSHR %0, %1:gpr(s64)
110    %3:gpr(s64) = G_ADD %2, %param2:gpr(s64)
111    $x0 = COPY %3:gpr(s64)
112    RET_ReallyLR implicit $x0
113
114...
115---
116name:            sub_lshr_s64_rhs
117legalized:       true
118regBankSelected: true
119tracksRegLiveness: true
120body:             |
121  bb.0:
122    liveins: $x0
123    ; CHECK-LABEL: name: sub_lshr_s64_rhs
124    ; CHECK: liveins: $x0
125    ; CHECK-NEXT: {{  $}}
126    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
127    ; CHECK-NEXT: [[SUBSXrs:%[0-9]+]]:gpr64 = SUBSXrs [[COPY]], [[COPY]], 72, implicit-def dead $nzcv
128    ; CHECK-NEXT: $x0 = COPY [[SUBSXrs]]
129    ; CHECK-NEXT: RET_ReallyLR implicit $x0
130    %0:gpr(s64) = COPY $x0
131    %1:gpr(s64) = G_CONSTANT i64 8
132    %2:gpr(s64) = G_LSHR %0, %1:gpr(s64)
133    %3:gpr(s64) = G_SUB %0, %2:gpr(s64)
134    $x0 = COPY %3:gpr(s64)
135    RET_ReallyLR implicit $x0
136
137...
138---
139name:            add_ashr_s64_rhs
140legalized:       true
141regBankSelected: true
142tracksRegLiveness: true
143body:             |
144  bb.0:
145    liveins: $x0
146    ; CHECK-LABEL: name: add_ashr_s64_rhs
147    ; CHECK: liveins: $x0
148    ; CHECK-NEXT: {{  $}}
149    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
150    ; CHECK-NEXT: [[ADDXrs:%[0-9]+]]:gpr64 = ADDXrs [[COPY]], [[COPY]], 136
151    ; CHECK-NEXT: $x0 = COPY [[ADDXrs]]
152    ; CHECK-NEXT: RET_ReallyLR implicit $x0
153    %0:gpr(s64) = COPY $x0
154    %1:gpr(s64) = G_CONSTANT i64 8
155    %2:gpr(s64) = G_ASHR %0, %1:gpr(s64)
156    %3:gpr(s64) = G_ADD %0, %2:gpr(s64)
157    $x0 = COPY %3:gpr(s64)
158    RET_ReallyLR implicit $x0
159
160...
161---
162name:            add_ashr_s64_lhs
163legalized:       true
164regBankSelected: true
165tracksRegLiveness: true
166body:             |
167  bb.0:
168    liveins: $x0, $x1
169    ; CHECK-LABEL: name: add_ashr_s64_lhs
170    ; CHECK: liveins: $x0, $x1
171    ; CHECK-NEXT: {{  $}}
172    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
173    ; CHECK-NEXT: %param2:gpr64 = COPY $x1
174    ; CHECK-NEXT: [[ADDXrs:%[0-9]+]]:gpr64 = ADDXrs %param2, [[COPY]], 136
175    ; CHECK-NEXT: $x0 = COPY [[ADDXrs]]
176    ; CHECK-NEXT: RET_ReallyLR implicit $x0
177    %0:gpr(s64) = COPY $x0
178    %param2:gpr(s64) = COPY $x1
179    %1:gpr(s64) = G_CONSTANT i64 8
180    %2:gpr(s64) = G_ASHR %0, %1:gpr(s64)
181    %3:gpr(s64) = G_ADD %2, %param2:gpr(s64)
182    $x0 = COPY %3:gpr(s64)
183    RET_ReallyLR implicit $x0
184
185...
186---
187name:            sub_ashr_s64_rhs
188legalized:       true
189regBankSelected: true
190tracksRegLiveness: true
191body:             |
192  bb.0:
193    liveins: $x0
194    ; CHECK-LABEL: name: sub_ashr_s64_rhs
195    ; CHECK: liveins: $x0
196    ; CHECK-NEXT: {{  $}}
197    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
198    ; CHECK-NEXT: [[SUBSXrs:%[0-9]+]]:gpr64 = SUBSXrs [[COPY]], [[COPY]], 136, implicit-def dead $nzcv
199    ; CHECK-NEXT: $x0 = COPY [[SUBSXrs]]
200    ; CHECK-NEXT: RET_ReallyLR implicit $x0
201    %0:gpr(s64) = COPY $x0
202    %1:gpr(s64) = G_CONSTANT i64 8
203    %2:gpr(s64) = G_ASHR %0, %1:gpr(s64)
204    %3:gpr(s64) = G_SUB %0, %2:gpr(s64)
205    $x0 = COPY %3:gpr(s64)
206    RET_ReallyLR implicit $x0
207
208---
209name:            add_shl_s32_rhs
210legalized:       true
211regBankSelected: true
212tracksRegLiveness: true
213body:             |
214  bb.0:
215    liveins: $w0
216    %0:gpr(s32) = COPY $w0
217    %1:gpr(s32) = G_CONSTANT i32 8
218    %2:gpr(s32) = G_SHL %0, %1:gpr(s32)
219    %3:gpr(s32) = G_ADD %0, %2:gpr(s32)
220    $w0 = COPY %3:gpr(s32)
221    RET_ReallyLR implicit $w0
222
223...
224---
225name:            add_shl_s32_lhs
226legalized:       true
227regBankSelected: true
228tracksRegLiveness: true
229body:             |
230  bb.0:
231    liveins: $w0, $w1
232    ; CHECK-LABEL: name: add_shl_s32_lhs
233    ; CHECK: liveins: $w0, $w1
234    ; CHECK-NEXT: {{  $}}
235    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
236    ; CHECK-NEXT: %param2:gpr32 = COPY $w1
237    ; CHECK-NEXT: [[ADDWrs:%[0-9]+]]:gpr32 = ADDWrs %param2, [[COPY]], 8
238    ; CHECK-NEXT: $w0 = COPY [[ADDWrs]]
239    ; CHECK-NEXT: RET_ReallyLR implicit $w0
240    %0:gpr(s32) = COPY $w0
241    %param2:gpr(s32) = COPY $w1
242    %1:gpr(s32) = G_CONSTANT i32 8
243    %2:gpr(s32) = G_SHL %0, %1:gpr(s32)
244    %3:gpr(s32) = G_ADD %2, %param2:gpr(s32)
245    $w0 = COPY %3:gpr(s32)
246    RET_ReallyLR implicit $w0
247
248...
249---
250name:            sub_shl_s32_rhs
251legalized:       true
252regBankSelected: true
253tracksRegLiveness: true
254body:             |
255  bb.0:
256    liveins: $w0
257    ; CHECK-LABEL: name: sub_shl_s32_rhs
258    ; CHECK: liveins: $w0
259    ; CHECK-NEXT: {{  $}}
260    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
261    ; CHECK-NEXT: [[SUBSWrs:%[0-9]+]]:gpr32 = SUBSWrs [[COPY]], [[COPY]], 8, implicit-def dead $nzcv
262    ; CHECK-NEXT: $w0 = COPY [[SUBSWrs]]
263    ; CHECK-NEXT: RET_ReallyLR implicit $w0
264    %0:gpr(s32) = COPY $w0
265    %1:gpr(s32) = G_CONSTANT i32 8
266    %2:gpr(s32) = G_SHL %0, %1:gpr(s32)
267    %3:gpr(s32) = G_SUB %0, %2:gpr(s32)
268    $w0 = COPY %3:gpr(s32)
269    RET_ReallyLR implicit $w0
270
271...
272---
273name:            add_lshr_s32_rhs
274legalized:       true
275regBankSelected: true
276tracksRegLiveness: true
277body:             |
278  bb.0:
279    liveins: $w0
280    ; CHECK-LABEL: name: add_lshr_s32_rhs
281    ; CHECK: liveins: $w0
282    ; CHECK-NEXT: {{  $}}
283    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
284    ; CHECK-NEXT: [[ADDWrs:%[0-9]+]]:gpr32 = ADDWrs [[COPY]], [[COPY]], 72
285    ; CHECK-NEXT: $w0 = COPY [[ADDWrs]]
286    ; CHECK-NEXT: RET_ReallyLR implicit $w0
287    %0:gpr(s32) = COPY $w0
288    %1:gpr(s32) = G_CONSTANT i32 8
289    %2:gpr(s32) = G_LSHR %0, %1:gpr(s32)
290    %3:gpr(s32) = G_ADD %0, %2:gpr(s32)
291    $w0 = COPY %3:gpr(s32)
292    RET_ReallyLR implicit $w0
293
294...
295---
296name:            add_lshr_s32_lhs
297legalized:       true
298regBankSelected: true
299tracksRegLiveness: true
300body:             |
301  bb.0:
302    liveins: $w0, $w1
303    ; CHECK-LABEL: name: add_lshr_s32_lhs
304    ; CHECK: liveins: $w0, $w1
305    ; CHECK-NEXT: {{  $}}
306    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
307    ; CHECK-NEXT: %param2:gpr32 = COPY $w1
308    ; CHECK-NEXT: [[ADDWrs:%[0-9]+]]:gpr32 = ADDWrs %param2, [[COPY]], 72
309    ; CHECK-NEXT: $w0 = COPY [[ADDWrs]]
310    ; CHECK-NEXT: RET_ReallyLR implicit $w0
311    %0:gpr(s32) = COPY $w0
312    %param2:gpr(s32) = COPY $w1
313    %1:gpr(s32) = G_CONSTANT i32 8
314    %2:gpr(s32) = G_LSHR %0, %1:gpr(s32)
315    %3:gpr(s32) = G_ADD %2, %param2:gpr(s32)
316    $w0 = COPY %3:gpr(s32)
317    RET_ReallyLR implicit $w0
318
319...
320---
321name:            sub_lshr_s32_rhs
322legalized:       true
323regBankSelected: true
324tracksRegLiveness: true
325body:             |
326  bb.0:
327    liveins: $w0
328    ; CHECK-LABEL: name: sub_lshr_s32_rhs
329    ; CHECK: liveins: $w0
330    ; CHECK-NEXT: {{  $}}
331    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
332    ; CHECK-NEXT: [[SUBSWrs:%[0-9]+]]:gpr32 = SUBSWrs [[COPY]], [[COPY]], 72, implicit-def dead $nzcv
333    ; CHECK-NEXT: $w0 = COPY [[SUBSWrs]]
334    ; CHECK-NEXT: RET_ReallyLR implicit $w0
335    %0:gpr(s32) = COPY $w0
336    %1:gpr(s32) = G_CONSTANT i32 8
337    %2:gpr(s32) = G_LSHR %0, %1:gpr(s32)
338    %3:gpr(s32) = G_SUB %0, %2:gpr(s32)
339    $w0 = COPY %3:gpr(s32)
340    RET_ReallyLR implicit $w0
341
342...
343---
344name:            add_ashr_s32_rhs
345legalized:       true
346regBankSelected: true
347tracksRegLiveness: true
348body:             |
349  bb.0:
350    liveins: $w0
351    ; CHECK-LABEL: name: add_ashr_s32_rhs
352    ; CHECK: liveins: $w0
353    ; CHECK-NEXT: {{  $}}
354    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
355    ; CHECK-NEXT: [[ADDWrs:%[0-9]+]]:gpr32 = ADDWrs [[COPY]], [[COPY]], 136
356    ; CHECK-NEXT: $w0 = COPY [[ADDWrs]]
357    ; CHECK-NEXT: RET_ReallyLR implicit $w0
358    %0:gpr(s32) = COPY $w0
359    %1:gpr(s32) = G_CONSTANT i32 8
360    %2:gpr(s32) = G_ASHR %0, %1:gpr(s32)
361    %3:gpr(s32) = G_ADD %0, %2:gpr(s32)
362    $w0 = COPY %3:gpr(s32)
363    RET_ReallyLR implicit $w0
364
365...
366---
367name:            add_ashr_s32_lhs
368legalized:       true
369regBankSelected: true
370tracksRegLiveness: true
371body:             |
372  bb.0:
373    liveins: $w0, $w1
374    ; CHECK-LABEL: name: add_ashr_s32_lhs
375    ; CHECK: liveins: $w0, $w1
376    ; CHECK-NEXT: {{  $}}
377    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
378    ; CHECK-NEXT: %param2:gpr32 = COPY $w1
379    ; CHECK-NEXT: [[ADDWrs:%[0-9]+]]:gpr32 = ADDWrs %param2, [[COPY]], 136
380    ; CHECK-NEXT: $w0 = COPY [[ADDWrs]]
381    ; CHECK-NEXT: RET_ReallyLR implicit $w0
382    %0:gpr(s32) = COPY $w0
383    %param2:gpr(s32) = COPY $w1
384    %1:gpr(s32) = G_CONSTANT i32 8
385    %2:gpr(s32) = G_ASHR %0, %1:gpr(s32)
386    %3:gpr(s32) = G_ADD %2, %param2:gpr(s32)
387    $w0 = COPY %3:gpr(s32)
388    RET_ReallyLR implicit $w0
389
390...
391---
392name:            sub_ashr_s32_rhs
393legalized:       true
394regBankSelected: true
395tracksRegLiveness: true
396body:             |
397  bb.0:
398    liveins: $w0
399    ; CHECK-LABEL: name: sub_ashr_s32_rhs
400    ; CHECK: liveins: $w0
401    ; CHECK-NEXT: {{  $}}
402    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
403    ; CHECK-NEXT: [[SUBSWrs:%[0-9]+]]:gpr32 = SUBSWrs [[COPY]], [[COPY]], 136, implicit-def dead $nzcv
404    ; CHECK-NEXT: $w0 = COPY [[SUBSWrs]]
405    ; CHECK-NEXT: RET_ReallyLR implicit $w0
406    %0:gpr(s32) = COPY $w0
407    %1:gpr(s32) = G_CONSTANT i32 8
408    %2:gpr(s32) = G_ASHR %0, %1:gpr(s32)
409    %3:gpr(s32) = G_SUB %0, %2:gpr(s32)
410    $w0 = COPY %3:gpr(s32)
411    RET_ReallyLR implicit $w0
412