Revert "[clang][bytecode] Fix some shift edge cases (#119895)"
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / instruction-select / alu-rv64.mir
blob90d92b615c8769f0a42cbdae56c5e565782c674b
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv64 -run-pass=instruction-select -simplify-mir -verify-machineinstrs %s -o - \
3 # RUN: | FileCheck -check-prefix=RV64I %s
5 ---
6 name:            sll_i32
7 legalized:       true
8 regBankSelected: true
9 tracksRegLiveness: true
10 body:             |
11   bb.0.entry:
12     liveins: $x10, $x11
14     ; RV64I-LABEL: name: sll_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: [[SLLW:%[0-9]+]]:gpr = SLLW [[COPY]], [[COPY1]]
20     ; RV64I-NEXT: $x10 = COPY [[SLLW]]
21     ; RV64I-NEXT: PseudoRET implicit $x10
22     %0:gprb(s64) = COPY $x10
23     %1:gprb(s64) = COPY $x11
24     %2:gprb(s64) = G_SLLW %0, %1
25     $x10 = COPY %2(s64)
26     PseudoRET implicit $x10
28 ...
29 ---
30 name:            slli_i32
31 legalized:       true
32 regBankSelected: true
33 tracksRegLiveness: true
34 body:             |
35   bb.0.entry:
36     liveins: $x10
38     ; RV64I-LABEL: name: slli_i32
39     ; RV64I: liveins: $x10
40     ; RV64I-NEXT: {{  $}}
41     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
42     ; RV64I-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 31
43     ; RV64I-NEXT: $x10 = COPY [[SLLI]]
44     ; RV64I-NEXT: PseudoRET implicit $x10
45     %0:gprb(s64) = COPY $x10
46     %1:gprb(s64) = G_CONSTANT i64 31
47     %2:gprb(s64) = G_SHL %0, %1
48     $x10 = COPY %2(s64)
49     PseudoRET implicit $x10
51 ...
52 ---
53 name:            sra_i32
54 legalized:       true
55 regBankSelected: true
56 tracksRegLiveness: true
57 body:             |
58   bb.0.entry:
59     liveins: $x10, $x11
61     ; RV64I-LABEL: name: sra_i32
62     ; RV64I: liveins: $x10, $x11
63     ; RV64I-NEXT: {{  $}}
64     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
65     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
66     ; RV64I-NEXT: [[SRAW:%[0-9]+]]:gpr = SRAW [[COPY]], [[COPY1]]
67     ; RV64I-NEXT: $x10 = COPY [[SRAW]]
68     ; RV64I-NEXT: PseudoRET implicit $x10
69     %0:gprb(s64) = COPY $x10
70     %1:gprb(s64) = COPY $x11
71     %2:gprb(s64) = G_SRAW %0, %1
72     $x10 = COPY %2(s64)
73     PseudoRET implicit $x10
75 ...
76 ---
77 name:            srai_i32
78 legalized:       true
79 regBankSelected: true
80 tracksRegLiveness: true
81 body:             |
82   bb.0.entry:
83     liveins: $x10
85     ; RV64I-LABEL: name: srai_i32
86     ; RV64I: liveins: $x10
87     ; RV64I-NEXT: {{  $}}
88     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
89     ; RV64I-NEXT: [[SRAIW:%[0-9]+]]:gpr = SRAIW [[COPY]], 31
90     ; RV64I-NEXT: $x10 = COPY [[SRAIW]]
91     ; RV64I-NEXT: PseudoRET implicit $x10
92     %0:gprb(s64) = COPY $x10
93     %1:gprb(s64) = G_CONSTANT i64 31
94     %2:gprb(s64) = G_SEXT_INREG %0, 32
95     %3:gprb(s64) = G_ASHR %2, %1(s64)
96     $x10 = COPY %3(s64)
97     PseudoRET implicit $x10
99 ...
101 name:            srl_i32
102 legalized:       true
103 regBankSelected: true
104 tracksRegLiveness: true
105 body:             |
106   bb.0.entry:
107     liveins: $x10, $x11
109     ; RV64I-LABEL: name: srl_i32
110     ; RV64I: liveins: $x10, $x11
111     ; RV64I-NEXT: {{  $}}
112     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
113     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
114     ; RV64I-NEXT: [[SRLW:%[0-9]+]]:gpr = SRLW [[COPY]], [[COPY1]]
115     ; RV64I-NEXT: $x10 = COPY [[SRLW]]
116     ; RV64I-NEXT: PseudoRET implicit $x10
117     %0:gprb(s64) = COPY $x10
118     %1:gprb(s64) = COPY $x11
119     %2:gprb(s64) = G_SRLW %0, %1
120     $x10 = COPY %2(s64)
121     PseudoRET implicit $x10
125 name:            srli_i32
126 legalized:       true
127 regBankSelected: true
128 tracksRegLiveness: true
129 body:             |
130   bb.0.entry:
131     liveins: $x10
133     ; RV64I-LABEL: name: srli_i32
134     ; RV64I: liveins: $x10
135     ; RV64I-NEXT: {{  $}}
136     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
137     ; RV64I-NEXT: [[SRLIW:%[0-9]+]]:gpr = SRLIW [[COPY]], 31
138     ; RV64I-NEXT: $x10 = COPY [[SRLIW]]
139     ; RV64I-NEXT: PseudoRET implicit $x10
140     %0:gprb(s64) = COPY $x10
141     %1:gprb(s64) = G_CONSTANT i64 31
142     %2:gprb(s64) = G_CONSTANT i64 4294967295
143     %3:gprb(s64) = G_AND %0, %2
144     %4:gprb(s64) = G_LSHR %3, %1(s64)
145     $x10 = COPY %4(s64)
146     PseudoRET implicit $x10
150 name:            add_i64
151 legalized:       true
152 regBankSelected: true
153 tracksRegLiveness: true
154 body:             |
155   bb.0.entry:
156     liveins: $x10, $x11
158     ; RV64I-LABEL: name: add_i64
159     ; RV64I: liveins: $x10, $x11
160     ; RV64I-NEXT: {{  $}}
161     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
162     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
163     ; RV64I-NEXT: [[ADD:%[0-9]+]]:gpr = ADD [[COPY]], [[COPY1]]
164     ; RV64I-NEXT: $x10 = COPY [[ADD]]
165     ; RV64I-NEXT: PseudoRET implicit $x10
166     %0:gprb(s64) = COPY $x10
167     %1:gprb(s64) = COPY $x11
168     %2:gprb(s64) = G_ADD %0, %1
169     $x10 = COPY %2(s64)
170     PseudoRET implicit $x10
174 name:            addi_i64
175 legalized:       true
176 regBankSelected: true
177 tracksRegLiveness: true
178 body:             |
179   bb.0.entry:
180     liveins: $x10
182     ; RV64I-LABEL: name: addi_i64
183     ; RV64I: liveins: $x10
184     ; RV64I-NEXT: {{  $}}
185     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
186     ; RV64I-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI [[COPY]], 1234
187     ; RV64I-NEXT: $x10 = COPY [[ADDI]]
188     ; RV64I-NEXT: PseudoRET implicit $x10
189     %0:gprb(s64) = COPY $x10
190     %1:gprb(s64) = G_CONSTANT i64 1234
191     %2:gprb(s64) = G_ADD %0, %1
192     $x10 = COPY %2(s64)
193     PseudoRET implicit $x10
197 name:            sub_i64
198 legalized:       true
199 regBankSelected: true
200 tracksRegLiveness: true
201 body:             |
202   bb.0.entry:
203     liveins: $x10, $x11
205     ; RV64I-LABEL: name: sub_i64
206     ; RV64I: liveins: $x10, $x11
207     ; RV64I-NEXT: {{  $}}
208     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
209     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
210     ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[COPY1]]
211     ; RV64I-NEXT: $x10 = COPY [[SUB]]
212     ; RV64I-NEXT: PseudoRET implicit $x10
213     %0:gprb(s64) = COPY $x10
214     %1:gprb(s64) = COPY $x11
215     %2:gprb(s64) = G_SUB %0, %1
216     $x10 = COPY %2(s64)
217     PseudoRET implicit $x10
221 name:            subi_i64
222 legalized:       true
223 regBankSelected: true
224 tracksRegLiveness: true
225 body:             |
226   bb.0.entry:
227     liveins: $x10
229     ; RV64I-LABEL: name: subi_i64
230     ; RV64I: liveins: $x10
231     ; RV64I-NEXT: {{  $}}
232     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
233     ; RV64I-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI $x0, -1234
234     ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[ADDI]]
235     ; RV64I-NEXT: $x10 = COPY [[SUB]]
236     ; RV64I-NEXT: PseudoRET implicit $x10
237     %0:gprb(s64) = COPY $x10
238     %1:gprb(s64) = G_CONSTANT i64 -1234
239     %2:gprb(s64) = G_SUB %0, %1
240     $x10 = COPY %2(s64)
241     PseudoRET implicit $x10
245 name:            sll_i64
246 legalized:       true
247 regBankSelected: true
248 tracksRegLiveness: true
249 body:             |
250   bb.0.entry:
251     liveins: $x10, $x11
253     ; RV64I-LABEL: name: sll_i64
254     ; RV64I: liveins: $x10, $x11
255     ; RV64I-NEXT: {{  $}}
256     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
257     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
258     ; RV64I-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[COPY1]]
259     ; RV64I-NEXT: $x10 = COPY [[SLL]]
260     ; RV64I-NEXT: PseudoRET implicit $x10
261     %0:gprb(s64) = COPY $x10
262     %1:gprb(s64) = COPY $x11
263     %2:gprb(s64) = G_SHL %0, %1
264     $x10 = COPY %2(s64)
265     PseudoRET implicit $x10
269 name:            slli_i64
270 legalized:       true
271 regBankSelected: true
272 tracksRegLiveness: true
273 body:             |
274   bb.0.entry:
275     liveins: $x10
277     ; RV64I-LABEL: name: slli_i64
278     ; RV64I: liveins: $x10
279     ; RV64I-NEXT: {{  $}}
280     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
281     ; RV64I-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 63
282     ; RV64I-NEXT: $x10 = COPY [[SLLI]]
283     ; RV64I-NEXT: PseudoRET implicit $x10
284     %0:gprb(s64) = COPY $x10
285     %1:gprb(s64) = G_CONSTANT i64 63
286     %2:gprb(s64) = G_SHL %0, %1
287     $x10 = COPY %2(s64)
288     PseudoRET implicit $x10
292 name:            sra_i64
293 legalized:       true
294 regBankSelected: true
295 tracksRegLiveness: true
296 body:             |
297   bb.0.entry:
298     liveins: $x10, $x11
300     ; RV64I-LABEL: name: sra_i64
301     ; RV64I: liveins: $x10, $x11
302     ; RV64I-NEXT: {{  $}}
303     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
304     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
305     ; RV64I-NEXT: [[SRA:%[0-9]+]]:gpr = SRA [[COPY]], [[COPY1]]
306     ; RV64I-NEXT: $x10 = COPY [[SRA]]
307     ; RV64I-NEXT: PseudoRET implicit $x10
308     %0:gprb(s64) = COPY $x10
309     %1:gprb(s64) = COPY $x11
310     %2:gprb(s64) = G_ASHR %0, %1
311     $x10 = COPY %2(s64)
312     PseudoRET implicit $x10
316 name:            srai_i64
317 legalized:       true
318 regBankSelected: true
319 tracksRegLiveness: true
320 body:             |
321   bb.0.entry:
322     liveins: $x10
324     ; RV64I-LABEL: name: srai_i64
325     ; RV64I: liveins: $x10
326     ; RV64I-NEXT: {{  $}}
327     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
328     ; RV64I-NEXT: [[SRAI:%[0-9]+]]:gpr = SRAI [[COPY]], 63
329     ; RV64I-NEXT: $x10 = COPY [[SRAI]]
330     ; RV64I-NEXT: PseudoRET implicit $x10
331     %0:gprb(s64) = COPY $x10
332     %1:gprb(s64) = G_CONSTANT i64 63
333     %2:gprb(s64) = G_ASHR %0, %1
334     $x10 = COPY %2(s64)
335     PseudoRET implicit $x10
339 name:            lshr_i64
340 legalized:       true
341 regBankSelected: true
342 tracksRegLiveness: true
343 body:             |
344   bb.0.entry:
345     liveins: $x10, $x11
347     ; RV64I-LABEL: name: lshr_i64
348     ; RV64I: liveins: $x10, $x11
349     ; RV64I-NEXT: {{  $}}
350     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
351     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
352     ; RV64I-NEXT: [[SRL:%[0-9]+]]:gpr = SRL [[COPY]], [[COPY1]]
353     ; RV64I-NEXT: $x10 = COPY [[SRL]]
354     ; RV64I-NEXT: PseudoRET implicit $x10
355     %0:gprb(s64) = COPY $x10
356     %1:gprb(s64) = COPY $x11
357     %2:gprb(s64) = G_LSHR %0, %1
358     $x10 = COPY %2(s64)
359     PseudoRET implicit $x10
363 name:            srli_i64
364 legalized:       true
365 regBankSelected: true
366 tracksRegLiveness: true
367 body:             |
368   bb.0.entry:
369     liveins: $x10
371     ; RV64I-LABEL: name: srli_i64
372     ; RV64I: liveins: $x10
373     ; RV64I-NEXT: {{  $}}
374     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
375     ; RV64I-NEXT: [[SRLI:%[0-9]+]]:gpr = SRLI [[COPY]], 63
376     ; RV64I-NEXT: $x10 = COPY [[SRLI]]
377     ; RV64I-NEXT: PseudoRET implicit $x10
378     %0:gprb(s64) = COPY $x10
379     %1:gprb(s64) = G_CONSTANT i64 63
380     %2:gprb(s64) = G_LSHR %0, %1
381     $x10 = COPY %2(s64)
382     PseudoRET implicit $x10
386 name:            and_i64
387 legalized:       true
388 regBankSelected: true
389 tracksRegLiveness: true
390 body:             |
391   bb.0.entry:
392     liveins: $x10, $x11
394     ; RV64I-LABEL: name: and_i64
395     ; RV64I: liveins: $x10, $x11
396     ; RV64I-NEXT: {{  $}}
397     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
398     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
399     ; RV64I-NEXT: [[AND:%[0-9]+]]:gpr = AND [[COPY]], [[COPY1]]
400     ; RV64I-NEXT: $x10 = COPY [[AND]]
401     ; RV64I-NEXT: PseudoRET implicit $x10
402     %0:gprb(s64) = COPY $x10
403     %1:gprb(s64) = COPY $x11
404     %2:gprb(s64) = G_AND %0, %1
405     $x10 = COPY %2(s64)
406     PseudoRET implicit $x10
410 name:            andi_i64
411 legalized:       true
412 regBankSelected: true
413 tracksRegLiveness: true
414 body:             |
415   bb.0.entry:
416     liveins: $x10
418     ; RV64I-LABEL: name: andi_i64
419     ; RV64I: liveins: $x10
420     ; RV64I-NEXT: {{  $}}
421     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
422     ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[COPY]], 1234
423     ; RV64I-NEXT: $x10 = COPY [[ANDI]]
424     ; RV64I-NEXT: PseudoRET implicit $x10
425     %0:gprb(s64) = COPY $x10
426     %1:gprb(s64) = G_CONSTANT i64 1234
427     %2:gprb(s64) = G_AND %0, %1
428     $x10 = COPY %2(s64)
429     PseudoRET implicit $x10
433 name:            or_i64
434 legalized:       true
435 regBankSelected: true
436 tracksRegLiveness: true
437 body:             |
438   bb.0.entry:
439     liveins: $x10, $x11
441     ; RV64I-LABEL: name: or_i64
442     ; RV64I: liveins: $x10, $x11
443     ; RV64I-NEXT: {{  $}}
444     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
445     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
446     ; RV64I-NEXT: [[OR:%[0-9]+]]:gpr = OR [[COPY]], [[COPY1]]
447     ; RV64I-NEXT: $x10 = COPY [[OR]]
448     ; RV64I-NEXT: PseudoRET implicit $x10
449     %0:gprb(s64) = COPY $x10
450     %1:gprb(s64) = COPY $x11
451     %2:gprb(s64) = G_OR %0, %1
452     $x10 = COPY %2(s64)
453     PseudoRET implicit $x10
457 name:            ori_i64
458 legalized:       true
459 regBankSelected: true
460 tracksRegLiveness: true
461 body:             |
462   bb.0.entry:
463     liveins: $x10
465     ; RV64I-LABEL: name: ori_i64
466     ; RV64I: liveins: $x10
467     ; RV64I-NEXT: {{  $}}
468     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
469     ; RV64I-NEXT: [[ORI:%[0-9]+]]:gpr = ORI [[COPY]], 1234
470     ; RV64I-NEXT: $x10 = COPY [[ORI]]
471     ; RV64I-NEXT: PseudoRET implicit $x10
472     %0:gprb(s64) = COPY $x10
473     %1:gprb(s64) = G_CONSTANT i64 1234
474     %2:gprb(s64) = G_OR %0, %1
475     $x10 = COPY %2(s64)
476     PseudoRET implicit $x10
480 name:            xor_i64
481 legalized:       true
482 regBankSelected: true
483 tracksRegLiveness: true
484 body:             |
485   bb.0.entry:
486     liveins: $x10, $x11
488     ; RV64I-LABEL: name: xor_i64
489     ; RV64I: liveins: $x10, $x11
490     ; RV64I-NEXT: {{  $}}
491     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
492     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
493     ; RV64I-NEXT: [[XOR:%[0-9]+]]:gpr = XOR [[COPY]], [[COPY1]]
494     ; RV64I-NEXT: $x10 = COPY [[XOR]]
495     ; RV64I-NEXT: PseudoRET implicit $x10
496     %0:gprb(s64) = COPY $x10
497     %1:gprb(s64) = COPY $x11
498     %2:gprb(s64) = G_XOR %0, %1
499     $x10 = COPY %2(s64)
500     PseudoRET implicit $x10
504 name:            xori_i64
505 legalized:       true
506 regBankSelected: true
507 tracksRegLiveness: true
508 body:             |
509   bb.0.entry:
510     liveins: $x10
512     ; RV64I-LABEL: name: xori_i64
513     ; RV64I: liveins: $x10
514     ; RV64I-NEXT: {{  $}}
515     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
516     ; RV64I-NEXT: [[XORI:%[0-9]+]]:gpr = XORI [[COPY]], 1234
517     ; RV64I-NEXT: $x10 = COPY [[XORI]]
518     ; RV64I-NEXT: PseudoRET implicit $x10
519     %0:gprb(s64) = COPY $x10
520     %1:gprb(s64) = G_CONSTANT i64 1234
521     %2:gprb(s64) = G_XOR %0, %1
522     $x10 = COPY %2(s64)
523     PseudoRET implicit $x10
527 name:            add_i128
528 legalized:       true
529 regBankSelected: true
530 tracksRegLiveness: true
531 body:             |
532   bb.0.entry:
533     liveins: $x10, $x11, $x12, $x13
535     ; RV64I-LABEL: name: add_i128
536     ; RV64I: liveins: $x10, $x11, $x12, $x13
537     ; RV64I-NEXT: {{  $}}
538     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
539     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
540     ; RV64I-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12
541     ; RV64I-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x13
542     ; RV64I-NEXT: [[ADD:%[0-9]+]]:gpr = ADD [[COPY]], [[COPY2]]
543     ; RV64I-NEXT: [[SLTU:%[0-9]+]]:gpr = SLTU [[ADD]], [[COPY2]]
544     ; RV64I-NEXT: [[ADD1:%[0-9]+]]:gpr = ADD [[COPY1]], [[COPY3]]
545     ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[SLTU]], 1
546     ; RV64I-NEXT: [[ADD2:%[0-9]+]]:gpr = ADD [[ADD1]], [[ANDI]]
547     ; RV64I-NEXT: $x10 = COPY [[ADD]]
548     ; RV64I-NEXT: $x11 = COPY [[ADD2]]
549     ; RV64I-NEXT: PseudoRET implicit $x10, implicit $x11
550     %0:gprb(s64) = COPY $x10
551     %1:gprb(s64) = COPY $x11
552     %2:gprb(s64) = COPY $x12
553     %3:gprb(s64) = COPY $x13
554     %4:gprb(s64) = G_ADD %0, %2
555     %5:gprb(s64) = G_ICMP intpred(ult), %4(s64), %2
556     %6:gprb(s64) = G_ADD %1, %3
557     %7:gprb(s64) = G_CONSTANT i64 1
558     %8:gprb(s64) = G_AND %5, %7
559     %9:gprb(s64) = G_ADD %6, %8
560     $x10 = COPY %4(s64)
561     $x11 = COPY %9(s64)
562     PseudoRET implicit $x10, implicit $x11
566 name:            sub_i128
567 legalized:       true
568 regBankSelected: true
569 tracksRegLiveness: true
570 body:             |
571   bb.0.entry:
572     liveins: $x10, $x11, $x12, $x13
574     ; RV64I-LABEL: name: sub_i128
575     ; RV64I: liveins: $x10, $x11, $x12, $x13
576     ; RV64I-NEXT: {{  $}}
577     ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
578     ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
579     ; RV64I-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12
580     ; RV64I-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x13
581     ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[COPY2]]
582     ; RV64I-NEXT: [[SLTU:%[0-9]+]]:gpr = SLTU [[COPY]], [[COPY2]]
583     ; RV64I-NEXT: [[SUB1:%[0-9]+]]:gpr = SUB [[COPY1]], [[COPY3]]
584     ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[SLTU]], 1
585     ; RV64I-NEXT: [[SUB2:%[0-9]+]]:gpr = SUB [[SUB1]], [[ANDI]]
586     ; RV64I-NEXT: $x10 = COPY [[SUB]]
587     ; RV64I-NEXT: $x11 = COPY [[SUB2]]
588     ; RV64I-NEXT: PseudoRET implicit $x10, implicit $x11
589     %0:gprb(s64) = COPY $x10
590     %1:gprb(s64) = COPY $x11
591     %2:gprb(s64) = COPY $x12
592     %3:gprb(s64) = COPY $x13
593     %4:gprb(s64) = G_SUB %0, %2
594     %5:gprb(s64) = G_ICMP intpred(ult), %0(s64), %2
595     %6:gprb(s64) = G_SUB %1, %3
596     %7:gprb(s64) = G_CONSTANT i64 1
597     %8:gprb(s64) = G_AND %5, %7
598     %9:gprb(s64) = G_SUB %6, %8
599     $x10 = COPY %4(s64)
600     $x11 = COPY %9(s64)
601     PseudoRET implicit $x10, implicit $x11