Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / instruction-select / alu_m-rv64.mir
blobf748f0811a99c6795b0d100a15accaa1d51bef96
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv64 -mattr=+m -run-pass=instruction-select -simplify-mir -verify-machineinstrs %s -o - \
3 # RUN: | FileCheck -check-prefix=RV64I %s
5 ---
6 name:            mul_i32
7 legalized:       true
8 regBankSelected: true
9 tracksRegLiveness: true
10 body:             |
11   bb.0.entry:
12     liveins: $x10, $x11
14     ; RV64I-LABEL: name: mul_i32
15     ; RV64I: liveins: $x10, $x11
16     ; RV64I-NEXT: {{  $}}
17     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
18     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
19     ; RV64I-NEXT: [[MULW:%[0-9]+]]:gpr = MULW [[COPY]], [[COPY1]]
20     ; RV64I-NEXT: $x10 = COPY [[MULW]]
21     ; RV64I-NEXT: PseudoRET implicit $x10
22     %0:gprb(s64) = COPY $x10
23     %1:gprb(s32) = G_TRUNC %0(s64)
24     %2:gprb(s64) = COPY $x11
25     %3:gprb(s32) = G_TRUNC %2(s64)
26     %4:gprb(s32) = G_MUL %1, %3
27     %5:gprb(s64) = G_ANYEXT %4(s32)
28     $x10 = COPY %5(s64)
29     PseudoRET implicit $x10
31 ...
32 ---
33 name:            sdiv_i32
34 legalized:       true
35 regBankSelected: true
36 tracksRegLiveness: true
37 body:             |
38   bb.0.entry:
39     liveins: $x10, $x11
41     ; RV64I-LABEL: name: sdiv_i32
42     ; RV64I: liveins: $x10, $x11
43     ; RV64I-NEXT: {{  $}}
44     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
45     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
46     ; RV64I-NEXT: [[DIVW:%[0-9]+]]:gpr = DIVW [[COPY]], [[COPY1]]
47     ; RV64I-NEXT: $x10 = COPY [[DIVW]]
48     ; RV64I-NEXT: PseudoRET implicit $x10
49     %0:gprb(s64) = COPY $x10
50     %1:gprb(s32) = G_TRUNC %0(s64)
51     %2:gprb(s64) = COPY $x11
52     %3:gprb(s32) = G_TRUNC %2(s64)
53     %4:gprb(s32) = G_SDIV %1, %3
54     %5:gprb(s64) = G_ANYEXT %4(s32)
55     $x10 = COPY %5(s64)
56     PseudoRET implicit $x10
58 ...
59 ---
60 name:            srem_i32
61 legalized:       true
62 regBankSelected: true
63 tracksRegLiveness: true
64 body:             |
65   bb.0.entry:
66     liveins: $x10, $x11
68     ; RV64I-LABEL: name: srem_i32
69     ; RV64I: liveins: $x10, $x11
70     ; RV64I-NEXT: {{  $}}
71     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
72     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
73     ; RV64I-NEXT: [[REMW:%[0-9]+]]:gpr = REMW [[COPY]], [[COPY1]]
74     ; RV64I-NEXT: $x10 = COPY [[REMW]]
75     ; RV64I-NEXT: PseudoRET implicit $x10
76     %0:gprb(s64) = COPY $x10
77     %1:gprb(s32) = G_TRUNC %0(s64)
78     %2:gprb(s64) = COPY $x11
79     %3:gprb(s32) = G_TRUNC %2(s64)
80     %4:gprb(s32) = G_SREM %1, %3
81     %5:gprb(s64) = G_ANYEXT %4(s32)
82     $x10 = COPY %5(s64)
83     PseudoRET implicit $x10
85 ...
86 ---
87 name:            udiv_i32
88 legalized:       true
89 regBankSelected: true
90 tracksRegLiveness: true
91 body:             |
92   bb.0.entry:
93     liveins: $x10, $x11
95     ; RV64I-LABEL: name: udiv_i32
96     ; RV64I: liveins: $x10, $x11
97     ; RV64I-NEXT: {{  $}}
98     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
99     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
100     ; RV64I-NEXT: [[DIVUW:%[0-9]+]]:gpr = DIVUW [[COPY]], [[COPY1]]
101     ; RV64I-NEXT: $x10 = COPY [[DIVUW]]
102     ; RV64I-NEXT: PseudoRET implicit $x10
103     %0:gprb(s64) = COPY $x10
104     %1:gprb(s32) = G_TRUNC %0(s64)
105     %2:gprb(s64) = COPY $x11
106     %3:gprb(s32) = G_TRUNC %2(s64)
107     %4:gprb(s32) = G_UDIV %1, %3
108     %5:gprb(s64) = G_ANYEXT %4(s32)
109     $x10 = COPY %5(s64)
110     PseudoRET implicit $x10
114 name:            urem_i32
115 legalized:       true
116 regBankSelected: true
117 tracksRegLiveness: true
118 body:             |
119   bb.0.entry:
120     liveins: $x10, $x11
122     ; RV64I-LABEL: name: urem_i32
123     ; RV64I: liveins: $x10, $x11
124     ; RV64I-NEXT: {{  $}}
125     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
126     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
127     ; RV64I-NEXT: [[REMUW:%[0-9]+]]:gpr = REMUW [[COPY]], [[COPY1]]
128     ; RV64I-NEXT: $x10 = COPY [[REMUW]]
129     ; RV64I-NEXT: PseudoRET implicit $x10
130     %0:gprb(s64) = COPY $x10
131     %1:gprb(s32) = G_TRUNC %0(s64)
132     %2:gprb(s64) = COPY $x11
133     %3:gprb(s32) = G_TRUNC %2(s64)
134     %4:gprb(s32) = G_UREM %1, %3
135     %5:gprb(s64) = G_ANYEXT %4(s32)
136     $x10 = COPY %5(s64)
137     PseudoRET implicit $x10
141 name:            mul_i64
142 legalized:       true
143 regBankSelected: true
144 tracksRegLiveness: true
145 body:             |
146   bb.0.entry:
147     liveins: $x10, $x11
149     ; RV64I-LABEL: name: mul_i64
150     ; RV64I: liveins: $x10, $x11
151     ; RV64I-NEXT: {{  $}}
152     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
153     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
154     ; RV64I-NEXT: [[MUL:%[0-9]+]]:gpr = MUL [[COPY]], [[COPY1]]
155     ; RV64I-NEXT: $x10 = COPY [[MUL]]
156     ; RV64I-NEXT: PseudoRET implicit $x10
157     %0:gprb(s64) = COPY $x10
158     %1:gprb(s64) = COPY $x11
159     %2:gprb(s64) = G_MUL %0, %1
160     $x10 = COPY %2(s64)
161     PseudoRET implicit $x10
165 name:            sdiv_i64
166 legalized:       true
167 regBankSelected: true
168 tracksRegLiveness: true
169 body:             |
170   bb.0.entry:
171     liveins: $x10, $x11
173     ; RV64I-LABEL: name: sdiv_i64
174     ; RV64I: liveins: $x10, $x11
175     ; RV64I-NEXT: {{  $}}
176     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
177     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
178     ; RV64I-NEXT: [[DIV:%[0-9]+]]:gpr = DIV [[COPY]], [[COPY1]]
179     ; RV64I-NEXT: $x10 = COPY [[DIV]]
180     ; RV64I-NEXT: PseudoRET implicit $x10
181     %0:gprb(s64) = COPY $x10
182     %1:gprb(s64) = COPY $x11
183     %2:gprb(s64) = G_SDIV %0, %1
184     $x10 = COPY %2(s64)
185     PseudoRET implicit $x10
189 name:            srem_i64
190 legalized:       true
191 regBankSelected: true
192 tracksRegLiveness: true
193 body:             |
194   bb.0.entry:
195     liveins: $x10, $x11
197     ; RV64I-LABEL: name: srem_i64
198     ; RV64I: liveins: $x10, $x11
199     ; RV64I-NEXT: {{  $}}
200     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
201     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
202     ; RV64I-NEXT: [[REM:%[0-9]+]]:gpr = REM [[COPY]], [[COPY1]]
203     ; RV64I-NEXT: $x10 = COPY [[REM]]
204     ; RV64I-NEXT: PseudoRET implicit $x10
205     %0:gprb(s64) = COPY $x10
206     %1:gprb(s64) = COPY $x11
207     %2:gprb(s64) = G_SREM %0, %1
208     $x10 = COPY %2(s64)
209     PseudoRET implicit $x10
213 name:            smulh_i64
214 legalized:       true
215 regBankSelected: true
216 tracksRegLiveness: true
217 body:             |
218   bb.0.entry:
219     liveins: $x10, $x11
221     ; RV64I-LABEL: name: smulh_i64
222     ; RV64I: liveins: $x10, $x11
223     ; RV64I-NEXT: {{  $}}
224     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
225     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
226     ; RV64I-NEXT: [[MULH:%[0-9]+]]:gpr = MULH [[COPY]], [[COPY1]]
227     ; RV64I-NEXT: $x10 = COPY [[MULH]]
228     ; RV64I-NEXT: PseudoRET implicit $x10
229     %0:gprb(s64) = COPY $x10
230     %1:gprb(s64) = COPY $x11
231     %2:gprb(s64) = G_SMULH %0, %1
232     $x10 = COPY %2(s64)
233     PseudoRET implicit $x10
237 name:            udiv_i64
238 legalized:       true
239 regBankSelected: true
240 tracksRegLiveness: true
241 body:             |
242   bb.0.entry:
243     liveins: $x10, $x11
245     ; RV64I-LABEL: name: udiv_i64
246     ; RV64I: liveins: $x10, $x11
247     ; RV64I-NEXT: {{  $}}
248     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
249     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
250     ; RV64I-NEXT: [[DIVU:%[0-9]+]]:gpr = DIVU [[COPY]], [[COPY1]]
251     ; RV64I-NEXT: $x10 = COPY [[DIVU]]
252     ; RV64I-NEXT: PseudoRET implicit $x10
253     %0:gprb(s64) = COPY $x10
254     %1:gprb(s64) = COPY $x11
255     %2:gprb(s64) = G_UDIV %0, %1
256     $x10 = COPY %2(s64)
257     PseudoRET implicit $x10
261 name:            urem_i64
262 legalized:       true
263 regBankSelected: true
264 tracksRegLiveness: true
265 body:             |
266   bb.0.entry:
267     liveins: $x10, $x11
269     ; RV64I-LABEL: name: urem_i64
270     ; RV64I: liveins: $x10, $x11
271     ; RV64I-NEXT: {{  $}}
272     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
273     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
274     ; RV64I-NEXT: [[REMU:%[0-9]+]]:gpr = REMU [[COPY]], [[COPY1]]
275     ; RV64I-NEXT: $x10 = COPY [[REMU]]
276     ; RV64I-NEXT: PseudoRET implicit $x10
277     %0:gprb(s64) = COPY $x10
278     %1:gprb(s64) = COPY $x11
279     %2:gprb(s64) = G_UREM %0, %1
280     $x10 = COPY %2(s64)
281     PseudoRET implicit $x10
285 name:            mul_i128
286 legalized:       true
287 regBankSelected: true
288 tracksRegLiveness: true
289 body:             |
290   bb.0.entry:
291     liveins: $x10, $x11, $x12, $x13
293     ; RV64I-LABEL: name: mul_i128
294     ; RV64I: liveins: $x10, $x11, $x12, $x13
295     ; RV64I-NEXT: {{  $}}
296     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
297     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
298     ; RV64I-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12
299     ; RV64I-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x13
300     ; RV64I-NEXT: [[MUL:%[0-9]+]]:gpr = MUL [[COPY]], [[COPY2]]
301     ; RV64I-NEXT: [[MUL1:%[0-9]+]]:gpr = MUL [[COPY1]], [[COPY2]]
302     ; RV64I-NEXT: [[MUL2:%[0-9]+]]:gpr = MUL [[COPY]], [[COPY3]]
303     ; RV64I-NEXT: [[MULHU:%[0-9]+]]:gpr = MULHU [[COPY]], [[COPY2]]
304     ; RV64I-NEXT: [[ADD:%[0-9]+]]:gpr = ADD [[MUL1]], [[MUL2]]
305     ; RV64I-NEXT: [[ADD1:%[0-9]+]]:gpr = ADD [[ADD]], [[MULHU]]
306     ; RV64I-NEXT: $x10 = COPY [[MUL]]
307     ; RV64I-NEXT: $x11 = COPY [[ADD1]]
308     ; RV64I-NEXT: PseudoRET implicit $x10, implicit $x11
309     %0:gprb(s64) = COPY $x10
310     %1:gprb(s64) = COPY $x11
311     %2:gprb(s64) = COPY $x12
312     %3:gprb(s64) = COPY $x13
313     %4:gprb(s64) = G_MUL %0, %2
314     %5:gprb(s64) = G_MUL %1, %2
315     %6:gprb(s64) = G_MUL %0, %3
316     %7:gprb(s64) = G_UMULH %0, %2
317     %8:gprb(s64) = G_ADD %5, %6
318     %9:gprb(s64) = G_ADD %8, %7
319     $x10 = COPY %4(s64)
320     $x11 = COPY %9(s64)
321     PseudoRET implicit $x10, implicit $x11