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