Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-commute-int-const-lhs.mir
blob16365494f5f4ec02bdf025127e54b278e50dc64e
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 ---
4 name:            add
5 tracksRegLiveness: true
6 body:             |
7   bb.1:
8     liveins: $s0
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
24 ...
25 ---
26 name:            mul
27 tracksRegLiveness: true
28 body:             |
29   bb.1:
30     liveins: $s0
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 ---
47 name:            and
48 tracksRegLiveness: true
49 body:             |
50   bb.1:
51     liveins: $s0
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 ---
68 name:            or
69 tracksRegLiveness: true
70 body:             |
71   bb.1:
72     liveins: $s0
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 ---
89 name:            xor
90 tracksRegLiveness: true
91 body:             |
92   bb.1:
93     liveins: $s0
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
110 name:            smin
111 tracksRegLiveness: true
112 body:             |
113   bb.1:
114     liveins: $s0
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
131 name:            smax
132 tracksRegLiveness: true
133 body:             |
134   bb.1:
135     liveins: $s0
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
152 name:            umin
153 tracksRegLiveness: true
154 body:             |
155   bb.1:
156     liveins: $s0
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
173 name:            umax
174 tracksRegLiveness: true
175 body:             |
176   bb.1:
177     liveins: $s0
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
194 name:            uaddo
195 tracksRegLiveness: true
196 body:             |
197   bb.1:
198     liveins: $s0
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
218 name:            saddo
219 tracksRegLiveness: true
220 body:             |
221   bb.1:
222     liveins: $s0
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
242 name:            umulo
243 tracksRegLiveness: true
244 body:             |
245   bb.1:
246     liveins: $s0
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
265 name:            smulo
266 tracksRegLiveness: true
267 body:             |
268   bb.1:
269     liveins: $s0
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
288 name:            umulh
289 tracksRegLiveness: true
290 body:             |
291   bb.1:
292     liveins: $s0
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
309 name:            smulh
310 tracksRegLiveness: true
311 body:             |
312   bb.1:
313     liveins: $s0
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
330 name:            uaddsat
331 tracksRegLiveness: true
332 body:             |
333   bb.1:
334     liveins: $s0
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
352 name:            saddsat
353 tracksRegLiveness: true
354 body:             |
355   bb.1:
356     liveins: $s0
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
374 name:            smulfix
375 tracksRegLiveness: true
376 body:             |
377   bb.1:
378     liveins: $s0
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
395 name:            umulfix
396 tracksRegLiveness: true
397 body:             |
398   bb.1:
399     liveins: $s0
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
416 name:            smulfixsat
417 tracksRegLiveness: true
418 body:             |
419   bb.1:
420     liveins: $s0
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
437 name:            umulfixsat
438 tracksRegLiveness: true
439 body:             |
440   bb.1:
441     liveins: $s0
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