xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/combine-commute-int-const-lhs.mir (revision e2c91091e537a54f1469610ab407e7c9561e7ffc)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
3---
4name:            add
5tracksRegLiveness: true
6body:             |
7  bb.1:
8    liveins: $s0
9
10    ; CHECK-LABEL: name: add
11    ; CHECK: liveins: $s0
12    ; CHECK-NEXT: {{  $}}
13    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
14    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
15    ; CHECK-NEXT: %add:_(s32) = G_ADD [[COPY]], %cst
16    ; CHECK-NEXT: $s0 = COPY %add(s32)
17    ; CHECK-NEXT: RET_ReallyLR
18    %0:_(s32) = COPY $s0
19    %cst:_(s32) = G_CONSTANT i32 1
20    %add:_(s32) = G_ADD %cst, %0
21    $s0 = COPY %add
22    RET_ReallyLR
23
24...
25---
26name:            mul
27tracksRegLiveness: true
28body:             |
29  bb.1:
30    liveins: $s0
31
32    ; CHECK-LABEL: name: mul
33    ; CHECK: liveins: $s0
34    ; CHECK-NEXT: {{  $}}
35    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
36    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
37    ; CHECK-NEXT: %mul:_(s32) = G_MUL [[COPY]], %cst
38    ; CHECK-NEXT: $s0 = COPY %mul(s32)
39    ; CHECK-NEXT: RET_ReallyLR
40    %0:_(s32) = COPY $s0
41    %cst:_(s32) = G_CONSTANT i32 3
42    %mul:_(s32) = G_MUL %cst, %0
43    $s0 = COPY %mul
44    RET_ReallyLR
45...
46---
47name:            and
48tracksRegLiveness: true
49body:             |
50  bb.1:
51    liveins: $s0
52
53    ; CHECK-LABEL: name: and
54    ; CHECK: liveins: $s0
55    ; CHECK-NEXT: {{  $}}
56    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
57    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5
58    ; CHECK-NEXT: %and:_(s32) = G_AND [[COPY]], %cst
59    ; CHECK-NEXT: $s0 = COPY %and(s32)
60    ; CHECK-NEXT: RET_ReallyLR
61    %0:_(s32) = COPY $s0
62    %cst:_(s32) = G_CONSTANT i32 5
63    %and:_(s32) = G_AND %cst, %0
64    $s0 = COPY %and
65    RET_ReallyLR
66...
67---
68name:            or
69tracksRegLiveness: true
70body:             |
71  bb.1:
72    liveins: $s0
73
74    ; CHECK-LABEL: name: or
75    ; CHECK: liveins: $s0
76    ; CHECK-NEXT: {{  $}}
77    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
78    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5
79    ; CHECK-NEXT: %or:_(s32) = G_OR [[COPY]], %cst
80    ; CHECK-NEXT: $s0 = COPY %or(s32)
81    ; CHECK-NEXT: RET_ReallyLR
82    %0:_(s32) = COPY $s0
83    %cst:_(s32) = G_CONSTANT i32 5
84    %or:_(s32) = G_OR %cst, %0
85    $s0 = COPY %or
86    RET_ReallyLR
87...
88---
89name:            xor
90tracksRegLiveness: true
91body:             |
92  bb.1:
93    liveins: $s0
94
95    ; CHECK-LABEL: name: xor
96    ; CHECK: liveins: $s0
97    ; CHECK-NEXT: {{  $}}
98    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
99    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5
100    ; CHECK-NEXT: %xor:_(s32) = G_XOR [[COPY]], %cst
101    ; CHECK-NEXT: $s0 = COPY %xor(s32)
102    ; CHECK-NEXT: RET_ReallyLR
103    %0:_(s32) = COPY $s0
104    %cst:_(s32) = G_CONSTANT i32 5
105    %xor:_(s32) = G_XOR %cst, %0
106    $s0 = COPY %xor
107    RET_ReallyLR
108...
109---
110name:            smin
111tracksRegLiveness: true
112body:             |
113  bb.1:
114    liveins: $s0
115
116    ; CHECK-LABEL: name: smin
117    ; CHECK: liveins: $s0
118    ; CHECK-NEXT: {{  $}}
119    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
120    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10
121    ; CHECK-NEXT: %min:_(s32) = G_SMIN [[COPY]], %cst
122    ; CHECK-NEXT: $s0 = COPY %min(s32)
123    ; CHECK-NEXT: RET_ReallyLR
124    %0:_(s32) = COPY $s0
125    %cst:_(s32) = G_CONSTANT i32 10
126    %min:_(s32) = G_SMIN %cst, %0
127    $s0 = COPY %min
128    RET_ReallyLR
129...
130---
131name:            smax
132tracksRegLiveness: true
133body:             |
134  bb.1:
135    liveins: $s0
136
137    ; CHECK-LABEL: name: smax
138    ; CHECK: liveins: $s0
139    ; CHECK-NEXT: {{  $}}
140    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
141    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10
142    ; CHECK-NEXT: %max:_(s32) = G_SMAX [[COPY]], %cst
143    ; CHECK-NEXT: $s0 = COPY %max(s32)
144    ; CHECK-NEXT: RET_ReallyLR
145    %0:_(s32) = COPY $s0
146    %cst:_(s32) = G_CONSTANT i32 10
147    %max:_(s32) = G_SMAX %cst, %0
148    $s0 = COPY %max
149    RET_ReallyLR
150...
151---
152name:            umin
153tracksRegLiveness: true
154body:             |
155  bb.1:
156    liveins: $s0
157
158    ; CHECK-LABEL: name: umin
159    ; CHECK: liveins: $s0
160    ; CHECK-NEXT: {{  $}}
161    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
162    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10
163    ; CHECK-NEXT: %min:_(s32) = G_UMIN [[COPY]], %cst
164    ; CHECK-NEXT: $s0 = COPY %min(s32)
165    ; CHECK-NEXT: RET_ReallyLR
166    %0:_(s32) = COPY $s0
167    %cst:_(s32) = G_CONSTANT i32 10
168    %min:_(s32) = G_UMIN %cst, %0
169    $s0 = COPY %min
170    RET_ReallyLR
171...
172---
173name:            umax
174tracksRegLiveness: true
175body:             |
176  bb.1:
177    liveins: $s0
178
179    ; CHECK-LABEL: name: umax
180    ; CHECK: liveins: $s0
181    ; CHECK-NEXT: {{  $}}
182    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
183    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10
184    ; CHECK-NEXT: %max:_(s32) = G_UMAX [[COPY]], %cst
185    ; CHECK-NEXT: $s0 = COPY %max(s32)
186    ; CHECK-NEXT: RET_ReallyLR
187    %0:_(s32) = COPY $s0
188    %cst:_(s32) = G_CONSTANT i32 10
189    %max:_(s32) = G_UMAX %cst, %0
190    $s0 = COPY %max
191    RET_ReallyLR
192...
193---
194name:            uaddo
195tracksRegLiveness: true
196body:             |
197  bb.1:
198    liveins: $s0
199
200    ; CHECK-LABEL: name: uaddo
201    ; CHECK: liveins: $s0
202    ; CHECK-NEXT: {{  $}}
203    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
204    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
205    ; CHECK-NEXT: %add:_(s32), %overflow:_(s1) = G_UADDO [[COPY]], %cst
206    ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1)
207    ; CHECK-NEXT: $s0 = COPY %ret(s32)
208    ; CHECK-NEXT: RET_ReallyLR
209    %0:_(s32) = COPY $s0
210    %cst:_(s32) = G_CONSTANT i32 1
211    %add:_(s32), %overflow:_(s1) = G_UADDO %cst, %0
212    %ret:_(s32) = G_ANYEXT %overflow
213    $s0 = COPY %ret
214    RET_ReallyLR
215
216...
217---
218name:            saddo
219tracksRegLiveness: true
220body:             |
221  bb.1:
222    liveins: $s0
223
224    ; CHECK-LABEL: name: saddo
225    ; CHECK: liveins: $s0
226    ; CHECK-NEXT: {{  $}}
227    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
228    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
229    ; CHECK-NEXT: %add:_(s32), %overflow:_(s1) = G_SADDO [[COPY]], %cst
230    ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1)
231    ; CHECK-NEXT: $s0 = COPY %ret(s32)
232    ; CHECK-NEXT: RET_ReallyLR
233    %0:_(s32) = COPY $s0
234    %cst:_(s32) = G_CONSTANT i32 1
235    %add:_(s32), %overflow:_(s1) = G_SADDO %cst, %0
236    %ret:_(s32) = G_ANYEXT %overflow
237    $s0 = COPY %ret
238    RET_ReallyLR
239
240...
241---
242name:            umulo
243tracksRegLiveness: true
244body:             |
245  bb.1:
246    liveins: $s0
247
248    ; CHECK-LABEL: name: umulo
249    ; CHECK: liveins: $s0
250    ; CHECK-NEXT: {{  $}}
251    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
252    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
253    ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_UMULO [[COPY]], %cst
254    ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1)
255    ; CHECK-NEXT: $s0 = COPY %ret(s32)
256    ; CHECK-NEXT: RET_ReallyLR
257    %0:_(s32) = COPY $s0
258    %cst:_(s32) = G_CONSTANT i32 3
259    %mul:_(s32), %overflow:_(s1) = G_UMULO %cst, %0
260    %ret:_(s32) = G_ANYEXT %overflow
261    $s0 = COPY %ret
262    RET_ReallyLR
263...
264---
265name:            smulo
266tracksRegLiveness: true
267body:             |
268  bb.1:
269    liveins: $s0
270
271    ; CHECK-LABEL: name: smulo
272    ; CHECK: liveins: $s0
273    ; CHECK-NEXT: {{  $}}
274    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
275    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
276    ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO [[COPY]], %cst
277    ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1)
278    ; CHECK-NEXT: $s0 = COPY %ret(s32)
279    ; CHECK-NEXT: RET_ReallyLR
280    %0:_(s32) = COPY $s0
281    %cst:_(s32) = G_CONSTANT i32 3
282    %mul:_(s32), %overflow:_(s1) = G_SMULO %cst, %0
283    %ret:_(s32) = G_ANYEXT %overflow
284    $s0 = COPY %ret
285    RET_ReallyLR
286...
287---
288name:            umulh
289tracksRegLiveness: true
290body:             |
291  bb.1:
292    liveins: $s0
293
294    ; CHECK-LABEL: name: umulh
295    ; CHECK: liveins: $s0
296    ; CHECK-NEXT: {{  $}}
297    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
298    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
299    ; CHECK-NEXT: %mul:_(s32) = G_UMULH [[COPY]], %cst
300    ; CHECK-NEXT: $s0 = COPY %mul(s32)
301    ; CHECK-NEXT: RET_ReallyLR
302    %0:_(s32) = COPY $s0
303    %cst:_(s32) = G_CONSTANT i32 3
304    %mul:_(s32) = G_UMULH %cst, %0
305    $s0 = COPY %mul
306    RET_ReallyLR
307...
308---
309name:            smulh
310tracksRegLiveness: true
311body:             |
312  bb.1:
313    liveins: $s0
314
315    ; CHECK-LABEL: name: smulh
316    ; CHECK: liveins: $s0
317    ; CHECK-NEXT: {{  $}}
318    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
319    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
320    ; CHECK-NEXT: %mul:_(s32) = G_UMULH [[COPY]], %cst
321    ; CHECK-NEXT: $s0 = COPY %mul(s32)
322    ; CHECK-NEXT: RET_ReallyLR
323    %0:_(s32) = COPY $s0
324    %cst:_(s32) = G_CONSTANT i32 3
325    %mul:_(s32) = G_UMULH %cst, %0
326    $s0 = COPY %mul
327    RET_ReallyLR
328...
329---
330name:            uaddsat
331tracksRegLiveness: true
332body:             |
333  bb.1:
334    liveins: $s0
335
336    ; CHECK-LABEL: name: uaddsat
337    ; CHECK: liveins: $s0
338    ; CHECK-NEXT: {{  $}}
339    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
340    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
341    ; CHECK-NEXT: %add:_(s32) = G_UADDSAT [[COPY]], %cst
342    ; CHECK-NEXT: $s0 = COPY %add(s32)
343    ; CHECK-NEXT: RET_ReallyLR
344    %0:_(s32) = COPY $s0
345    %cst:_(s32) = G_CONSTANT i32 1
346    %add:_(s32) = G_UADDSAT %cst, %0
347    $s0 = COPY %add
348    RET_ReallyLR
349
350...
351---
352name:            saddsat
353tracksRegLiveness: true
354body:             |
355  bb.1:
356    liveins: $s0
357
358    ; CHECK-LABEL: name: saddsat
359    ; CHECK: liveins: $s0
360    ; CHECK-NEXT: {{  $}}
361    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
362    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
363    ; CHECK-NEXT: %add:_(s32) = G_SADDSAT [[COPY]], %cst
364    ; CHECK-NEXT: $s0 = COPY %add(s32)
365    ; CHECK-NEXT: RET_ReallyLR
366    %0:_(s32) = COPY $s0
367    %cst:_(s32) = G_CONSTANT i32 1
368    %add:_(s32) = G_SADDSAT %cst, %0
369    $s0 = COPY %add
370    RET_ReallyLR
371
372...
373---
374name:            smulfix
375tracksRegLiveness: true
376body:             |
377  bb.1:
378    liveins: $s0
379
380    ; CHECK-LABEL: name: smulfix
381    ; CHECK: liveins: $s0
382    ; CHECK-NEXT: {{  $}}
383    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
384    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
385    ; CHECK-NEXT: %mul:_(s32) = G_SMULFIX [[COPY]], %cst, 7
386    ; CHECK-NEXT: $s0 = COPY %mul(s32)
387    ; CHECK-NEXT: RET_ReallyLR
388    %0:_(s32) = COPY $s0
389    %cst:_(s32) = G_CONSTANT i32 3
390    %mul:_(s32) = G_SMULFIX %cst, %0, 7
391    $s0 = COPY %mul
392    RET_ReallyLR
393...
394---
395name:            umulfix
396tracksRegLiveness: true
397body:             |
398  bb.1:
399    liveins: $s0
400
401    ; CHECK-LABEL: name: umulfix
402    ; CHECK: liveins: $s0
403    ; CHECK-NEXT: {{  $}}
404    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
405    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
406    ; CHECK-NEXT: %mul:_(s32) = G_UMULFIX [[COPY]], %cst, 7
407    ; CHECK-NEXT: $s0 = COPY %mul(s32)
408    ; CHECK-NEXT: RET_ReallyLR
409    %0:_(s32) = COPY $s0
410    %cst:_(s32) = G_CONSTANT i32 3
411    %mul:_(s32) = G_UMULFIX %cst, %0, 7
412    $s0 = COPY %mul
413    RET_ReallyLR
414...
415---
416name:            smulfixsat
417tracksRegLiveness: true
418body:             |
419  bb.1:
420    liveins: $s0
421
422    ; CHECK-LABEL: name: smulfixsat
423    ; CHECK: liveins: $s0
424    ; CHECK-NEXT: {{  $}}
425    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
426    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
427    ; CHECK-NEXT: %mul:_(s32) = G_SMULFIXSAT [[COPY]], %cst, 7
428    ; CHECK-NEXT: $s0 = COPY %mul(s32)
429    ; CHECK-NEXT: RET_ReallyLR
430    %0:_(s32) = COPY $s0
431    %cst:_(s32) = G_CONSTANT i32 3
432    %mul:_(s32) = G_SMULFIXSAT %cst, %0, 7
433    $s0 = COPY %mul
434    RET_ReallyLR
435...
436---
437name:            umulfixsat
438tracksRegLiveness: true
439body:             |
440  bb.1:
441    liveins: $s0
442
443    ; CHECK-LABEL: name: umulfixsat
444    ; CHECK: liveins: $s0
445    ; CHECK-NEXT: {{  $}}
446    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0
447    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3
448    ; CHECK-NEXT: %mul:_(s32) = G_UMULFIXSAT [[COPY]], %cst, 7
449    ; CHECK-NEXT: $s0 = COPY %mul(s32)
450    ; CHECK-NEXT: RET_ReallyLR
451    %0:_(s32) = COPY $s0
452    %cst:_(s32) = G_CONSTANT i32 3
453    %mul:_(s32) = G_UMULFIXSAT %cst, %0, 7
454    $s0 = COPY %mul
455    RET_ReallyLR
456...
457