[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / regbankselect / alu-rv64.mir
blobcef929f1e05be1a4b0dfacbf7beba48f40215ad3
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv64 -mattr=+m -run-pass=regbankselect \
3 # RUN:   -simplify-mir -verify-machineinstrs %s \
4 # RUN:   -o - | FileCheck -check-prefix=RV64I %s
6 ---
7 name:            add_i64
8 legalized:       true
9 tracksRegLiveness: true
10 body:             |
11   bb.0.entry:
12     liveins: $x10, $x11
14     ; RV64I-LABEL: name: add_i64
15     ; RV64I: liveins: $x10, $x11
16     ; RV64I-NEXT: {{  $}}
17     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
18     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
19     ; RV64I-NEXT: [[ADD:%[0-9]+]]:gprb(s64) = G_ADD [[COPY]], [[COPY1]]
20     ; RV64I-NEXT: $x10 = COPY [[ADD]](s64)
21     ; RV64I-NEXT: PseudoRET implicit $x10
22     %0:_(s64) = COPY $x10
23     %1:_(s64) = COPY $x11
24     %2:_(s64) = G_ADD %0, %1
25     $x10 = COPY %2(s64)
26     PseudoRET implicit $x10
28 ...
29 ---
30 name:            sub_i64
31 legalized:       true
32 tracksRegLiveness: true
33 body:             |
34   bb.0.entry:
35     liveins: $x10, $x11
37     ; RV64I-LABEL: name: sub_i64
38     ; RV64I: liveins: $x10, $x11
39     ; RV64I-NEXT: {{  $}}
40     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
41     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
42     ; RV64I-NEXT: [[SUB:%[0-9]+]]:gprb(s64) = G_SUB [[COPY]], [[COPY1]]
43     ; RV64I-NEXT: $x10 = COPY [[SUB]](s64)
44     ; RV64I-NEXT: PseudoRET implicit $x10
45     %0:_(s64) = COPY $x10
46     %1:_(s64) = COPY $x11
47     %2:_(s64) = G_SUB %0, %1
48     $x10 = COPY %2(s64)
49     PseudoRET implicit $x10
51 ...
52 ---
53 name:            shl_i64
54 legalized:       true
55 tracksRegLiveness: true
56 body:             |
57   bb.0.entry:
58     liveins: $x10, $x11
60     ; RV64I-LABEL: name: shl_i64
61     ; RV64I: liveins: $x10, $x11
62     ; RV64I-NEXT: {{  $}}
63     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
64     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
65     ; RV64I-NEXT: [[SHL:%[0-9]+]]:gprb(s64) = G_SHL [[COPY]], [[COPY1]](s64)
66     ; RV64I-NEXT: $x10 = COPY [[SHL]](s64)
67     ; RV64I-NEXT: PseudoRET implicit $x10
68     %0:_(s64) = COPY $x10
69     %1:_(s64) = COPY $x11
70     %2:_(s64) = G_SHL %0, %1
71     $x10 = COPY %2(s64)
72     PseudoRET implicit $x10
74 ...
75 ---
76 name:            ashr_i64
77 legalized:       true
78 tracksRegLiveness: true
79 body:             |
80   bb.0.entry:
81     liveins: $x10, $x11
83     ; RV64I-LABEL: name: ashr_i64
84     ; RV64I: liveins: $x10, $x11
85     ; RV64I-NEXT: {{  $}}
86     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
87     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
88     ; RV64I-NEXT: [[ASHR:%[0-9]+]]:gprb(s64) = G_ASHR [[COPY]], [[COPY1]](s64)
89     ; RV64I-NEXT: $x10 = COPY [[ASHR]](s64)
90     ; RV64I-NEXT: PseudoRET implicit $x10
91     %0:_(s64) = COPY $x10
92     %1:_(s64) = COPY $x11
93     %2:_(s64) = G_ASHR %0, %1
94     $x10 = COPY %2(s64)
95     PseudoRET implicit $x10
97 ...
98 ---
99 name:            lshr_i64
100 legalized:       true
101 tracksRegLiveness: true
102 body:             |
103   bb.0.entry:
104     liveins: $x10, $x11
106     ; RV64I-LABEL: name: lshr_i64
107     ; RV64I: liveins: $x10, $x11
108     ; RV64I-NEXT: {{  $}}
109     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
110     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
111     ; RV64I-NEXT: [[LSHR:%[0-9]+]]:gprb(s64) = G_LSHR [[COPY]], [[COPY1]](s64)
112     ; RV64I-NEXT: $x10 = COPY [[LSHR]](s64)
113     ; RV64I-NEXT: PseudoRET implicit $x10
114     %0:_(s64) = COPY $x10
115     %1:_(s64) = COPY $x11
116     %2:_(s64) = G_LSHR %0, %1
117     $x10 = COPY %2(s64)
118     PseudoRET implicit $x10
122 name:            and_i64
123 legalized:       true
124 tracksRegLiveness: true
125 body:             |
126   bb.0.entry:
127     liveins: $x10, $x11
129     ; RV64I-LABEL: name: and_i64
130     ; RV64I: liveins: $x10, $x11
131     ; RV64I-NEXT: {{  $}}
132     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
133     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
134     ; RV64I-NEXT: [[AND:%[0-9]+]]:gprb(s64) = G_AND [[COPY]], [[COPY1]]
135     ; RV64I-NEXT: $x10 = COPY [[AND]](s64)
136     ; RV64I-NEXT: PseudoRET implicit $x10
137     %0:_(s64) = COPY $x10
138     %1:_(s64) = COPY $x11
139     %2:_(s64) = G_AND %0, %1
140     $x10 = COPY %2(s64)
141     PseudoRET implicit $x10
145 name:            or_i64
146 legalized:       true
147 tracksRegLiveness: true
148 body:             |
149   bb.0.entry:
150     liveins: $x10, $x11
152     ; RV64I-LABEL: name: or_i64
153     ; RV64I: liveins: $x10, $x11
154     ; RV64I-NEXT: {{  $}}
155     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
156     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
157     ; RV64I-NEXT: [[OR:%[0-9]+]]:gprb(s64) = G_OR [[COPY]], [[COPY1]]
158     ; RV64I-NEXT: $x10 = COPY [[OR]](s64)
159     ; RV64I-NEXT: PseudoRET implicit $x10
160     %0:_(s64) = COPY $x10
161     %1:_(s64) = COPY $x11
162     %2:_(s64) = G_OR %0, %1
163     $x10 = COPY %2(s64)
164     PseudoRET implicit $x10
168 name:            xor_i64
169 legalized:       true
170 tracksRegLiveness: true
171 body:             |
172   bb.0.entry:
173     liveins: $x10, $x11
175     ; RV64I-LABEL: name: xor_i64
176     ; RV64I: liveins: $x10, $x11
177     ; RV64I-NEXT: {{  $}}
178     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
179     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
180     ; RV64I-NEXT: [[XOR:%[0-9]+]]:gprb(s64) = G_XOR [[COPY]], [[COPY1]]
181     ; RV64I-NEXT: $x10 = COPY [[XOR]](s64)
182     ; RV64I-NEXT: PseudoRET implicit $x10
183     %0:_(s64) = COPY $x10
184     %1:_(s64) = COPY $x11
185     %2:_(s64) = G_XOR %0, %1
186     $x10 = COPY %2(s64)
187     PseudoRET implicit $x10
191 name:            mul_i64
192 legalized:       true
193 tracksRegLiveness: true
194 body:             |
195   bb.0.entry:
196     liveins: $x10, $x11
198     ; RV64I-LABEL: name: mul_i64
199     ; RV64I: liveins: $x10, $x11
200     ; RV64I-NEXT: {{  $}}
201     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
202     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
203     ; RV64I-NEXT: [[MUL:%[0-9]+]]:gprb(s64) = G_MUL [[COPY]], [[COPY1]]
204     ; RV64I-NEXT: $x10 = COPY [[MUL]](s64)
205     ; RV64I-NEXT: PseudoRET implicit $x10
206     %0:_(s64) = COPY $x10
207     %1:_(s64) = COPY $x11
208     %2:_(s64) = G_MUL %0, %1
209     $x10 = COPY %2(s64)
210     PseudoRET implicit $x10
214 name:            sdiv_i64
215 legalized:       true
216 tracksRegLiveness: true
217 body:             |
218   bb.0.entry:
219     liveins: $x10, $x11
221     ; RV64I-LABEL: name: sdiv_i64
222     ; RV64I: liveins: $x10, $x11
223     ; RV64I-NEXT: {{  $}}
224     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
225     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
226     ; RV64I-NEXT: [[SDIV:%[0-9]+]]:gprb(s64) = G_SDIV [[COPY]], [[COPY1]]
227     ; RV64I-NEXT: $x10 = COPY [[SDIV]](s64)
228     ; RV64I-NEXT: PseudoRET implicit $x10
229     %0:_(s64) = COPY $x10
230     %1:_(s64) = COPY $x11
231     %2:_(s64) = G_SDIV %0, %1
232     $x10 = COPY %2(s64)
233     PseudoRET implicit $x10
237 name:            srem_i64
238 legalized:       true
239 tracksRegLiveness: true
240 body:             |
241   bb.0.entry:
242     liveins: $x10, $x11
244     ; RV64I-LABEL: name: srem_i64
245     ; RV64I: liveins: $x10, $x11
246     ; RV64I-NEXT: {{  $}}
247     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
248     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
249     ; RV64I-NEXT: [[SREM:%[0-9]+]]:gprb(s64) = G_SREM [[COPY]], [[COPY1]]
250     ; RV64I-NEXT: $x10 = COPY [[SREM]](s64)
251     ; RV64I-NEXT: PseudoRET implicit $x10
252     %0:_(s64) = COPY $x10
253     %1:_(s64) = COPY $x11
254     %2:_(s64) = G_SREM %0, %1
255     $x10 = COPY %2(s64)
256     PseudoRET implicit $x10
260 name:            smulh_i64
261 legalized:       true
262 tracksRegLiveness: true
263 body:             |
264   bb.0.entry:
265     liveins: $x10, $x11
267     ; RV64I-LABEL: name: smulh_i64
268     ; RV64I: liveins: $x10, $x11
269     ; RV64I-NEXT: {{  $}}
270     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
271     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
272     ; RV64I-NEXT: [[SMULH:%[0-9]+]]:gprb(s64) = G_SMULH [[COPY]], [[COPY1]]
273     ; RV64I-NEXT: $x10 = COPY [[SMULH]](s64)
274     ; RV64I-NEXT: PseudoRET implicit $x10
275     %0:_(s64) = COPY $x10
276     %1:_(s64) = COPY $x11
277     %2:_(s64) = G_SMULH %0, %1
278     $x10 = COPY %2(s64)
279     PseudoRET implicit $x10
283 name:            udiv_i64
284 legalized:       true
285 tracksRegLiveness: true
286 body:             |
287   bb.0.entry:
288     liveins: $x10, $x11
290     ; RV64I-LABEL: name: udiv_i64
291     ; RV64I: liveins: $x10, $x11
292     ; RV64I-NEXT: {{  $}}
293     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
294     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
295     ; RV64I-NEXT: [[UDIV:%[0-9]+]]:gprb(s64) = G_UDIV [[COPY]], [[COPY1]]
296     ; RV64I-NEXT: $x10 = COPY [[UDIV]](s64)
297     ; RV64I-NEXT: PseudoRET implicit $x10
298     %0:_(s64) = COPY $x10
299     %1:_(s64) = COPY $x11
300     %2:_(s64) = G_UDIV %0, %1
301     $x10 = COPY %2(s64)
302     PseudoRET implicit $x10
306 name:            urem_i64
307 legalized:       true
308 tracksRegLiveness: true
309 body:             |
310   bb.0.entry:
311     liveins: $x10, $x11
313     ; RV64I-LABEL: name: urem_i64
314     ; RV64I: liveins: $x10, $x11
315     ; RV64I-NEXT: {{  $}}
316     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
317     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
318     ; RV64I-NEXT: [[UREM:%[0-9]+]]:gprb(s64) = G_UREM [[COPY]], [[COPY1]]
319     ; RV64I-NEXT: $x10 = COPY [[UREM]](s64)
320     ; RV64I-NEXT: PseudoRET implicit $x10
321     %0:_(s64) = COPY $x10
322     %1:_(s64) = COPY $x11
323     %2:_(s64) = G_UREM %0, %1
324     $x10 = COPY %2(s64)
325     PseudoRET implicit $x10
329 name:            umulh_i64
330 legalized:       true
331 tracksRegLiveness: true
332 body:             |
333   bb.0.entry:
334     liveins: $x10, $x11
336     ; RV64I-LABEL: name: umulh_i64
337     ; RV64I: liveins: $x10, $x11
338     ; RV64I-NEXT: {{  $}}
339     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
340     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
341     ; RV64I-NEXT: [[UMULH:%[0-9]+]]:gprb(s64) = G_UMULH [[COPY]], [[COPY1]]
342     ; RV64I-NEXT: $x10 = COPY [[UMULH]](s64)
343     ; RV64I-NEXT: PseudoRET implicit $x10
344     %0:_(s64) = COPY $x10
345     %1:_(s64) = COPY $x11
346     %2:_(s64) = G_UMULH %0, %1
347     $x10 = COPY %2(s64)
348     PseudoRET implicit $x10
352 name:            icmp_i64
353 legalized:       true
354 tracksRegLiveness: true
355 body:             |
356   bb.0.entry:
357     liveins: $x10, $x11
359     ; RV64I-LABEL: name: icmp_i64
360     ; RV64I: liveins: $x10, $x11
361     ; RV64I-NEXT: {{  $}}
362     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
363     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
364     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:gprb(s64) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
365     ; RV64I-NEXT: $x10 = COPY [[ICMP]](s64)
366     ; RV64I-NEXT: PseudoRET implicit $x10
367     %0:_(s64) = COPY $x10
368     %1:_(s64) = COPY $x11
369     %2:_(s64) = G_ICMP intpred(eq), %0(s64), %1
370     $x10 = COPY %2(s64)
371     PseudoRET implicit $x10
375 name:            icmp_ptr
376 legalized:       true
377 tracksRegLiveness: true
378 body:             |
379   bb.0.entry:
380     liveins: $x10, $x11
382     ; RV64I-LABEL: name: icmp_ptr
383     ; RV64I: liveins: $x10, $x11
384     ; RV64I-NEXT: {{  $}}
385     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
386     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(p0) = COPY $x11
387     ; RV64I-NEXT: [[ICMP:%[0-9]+]]:gprb(s64) = G_ICMP intpred(eq), [[COPY]](p0), [[COPY1]]
388     ; RV64I-NEXT: $x10 = COPY [[ICMP]](s64)
389     ; RV64I-NEXT: PseudoRET implicit $x10
390     %0:_(p0) = COPY $x10
391     %1:_(p0) = COPY $x11
392     %2:_(s64) = G_ICMP intpred(eq), %0(p0), %1
393     $x10 = COPY %2(s64)
394     PseudoRET implicit $x10
398 name:            sext_inreg_i64
399 legalized:       true
400 tracksRegLiveness: true
401 body:             |
402   bb.0.entry:
403     liveins: $x10
405     ; RV64I-LABEL: name: sext_inreg_i64
406     ; RV64I: liveins: $x10
407     ; RV64I-NEXT: {{  $}}
408     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
409     ; RV64I-NEXT: [[SEXT_INREG:%[0-9]+]]:gprb(s64) = G_SEXT_INREG [[COPY]], 32
410     ; RV64I-NEXT: $x10 = COPY [[SEXT_INREG]](s64)
411     ; RV64I-NEXT: PseudoRET implicit $x10
412     %0:_(s64) = COPY $x10
413     %1:_(s64) = G_SEXT_INREG %0, 32
414     $x10 = COPY %1(s64)
415     PseudoRET implicit $x10
419 name:            gep
420 legalized:       true
421 tracksRegLiveness: true
422 body:             |
423   bb.0.entry:
424     liveins: $x10, $x11
426     ; RV64I-LABEL: name: gep
427     ; RV64I: liveins: $x10, $x11
428     ; RV64I-NEXT: {{  $}}
429     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
430     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
431     ; RV64I-NEXT: [[PTR_ADD:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[COPY]], [[COPY1]](s64)
432     ; RV64I-NEXT: $x10 = COPY [[PTR_ADD]](p0)
433     ; RV64I-NEXT: PseudoRET implicit $x10
434     %0:_(p0) = COPY $x10
435     %1:_(s64) = COPY $x11
436     %2:_(p0) = G_PTR_ADD %0, %1(s64)
437     $x10 = COPY %2(p0)
438     PseudoRET implicit $x10
442 name:            ptrtoint
443 legalized:       true
444 tracksRegLiveness: true
445 body:             |
446   bb.0.entry:
447     liveins: $x10
449     ; RV64I-LABEL: name: ptrtoint
450     ; RV64I: liveins: $x10
451     ; RV64I-NEXT: {{  $}}
452     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
453     ; RV64I-NEXT: [[PTRTOINT:%[0-9]+]]:gprb(s64) = G_PTRTOINT [[COPY]](p0)
454     ; RV64I-NEXT: $x10 = COPY [[PTRTOINT]](s64)
455     ; RV64I-NEXT: PseudoRET implicit $x10
456     %0:_(p0) = COPY $x10
457     %1:_(s64) = G_PTRTOINT %0(p0)
458     $x10 = COPY %1(s64)
459     PseudoRET implicit $x10
463 name:            inttoprt
464 legalized:       true
465 tracksRegLiveness: true
466 body:             |
467   bb.0.entry:
468     liveins: $x10
470     ; RV64I-LABEL: name: inttoprt
471     ; RV64I: liveins: $x10
472     ; RV64I-NEXT: {{  $}}
473     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10
474     ; RV64I-NEXT: [[INTTOPTR:%[0-9]+]]:gprb(p0) = G_INTTOPTR [[COPY]](s64)
475     ; RV64I-NEXT: $x10 = COPY [[INTTOPTR]](p0)
476     ; RV64I-NEXT: PseudoRET implicit $x10
477     %0:_(s64) = COPY $x10
478     %1:_(p0) = G_INTTOPTR %0(s64)
479     $x10 = COPY %1(p0)
480     PseudoRET implicit $x10