Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / Mips / GlobalISel / legalizer / rem_and_div.mir
blobe72836424c44a109bba92cffaccb710d4a062830
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
3 --- |
5   define void @sdiv_i8() {entry: ret void}
6   define void @sdiv_i16() {entry: ret void}
7   define void @sdiv_i32() {entry: ret void}
8   define void @sdiv_i64() {entry: ret void}
9   define void @srem_i8() {entry: ret void}
10   define void @srem_i16() {entry: ret void}
11   define void @srem_i32() {entry: ret void}
12   define void @srem_i64() {entry: ret void}
13   define void @udiv_i8() {entry: ret void}
14   define void @udiv_i16() {entry: ret void}
15   define void @udiv_i32() {entry: ret void}
16   define void @udiv_i64() {entry: ret void}
17   define void @urem_i8() {entry: ret void}
18   define void @urem_i16() {entry: ret void}
19   define void @urem_i32() {entry: ret void}
20   define void @urem_i64() {entry: ret void}
22 ...
23 ---
24 name:            sdiv_i8
25 alignment:       4
26 tracksRegLiveness: true
27 body:             |
28   bb.1.entry:
29     liveins: $a0, $a1
31     ; MIPS32-LABEL: name: sdiv_i8
32     ; MIPS32: liveins: $a0, $a1
33     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
34     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
35     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
36     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
37     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
38     ; MIPS32: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
39     ; MIPS32: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
40     ; MIPS32: [[SDIV:%[0-9]+]]:_(s32) = G_SDIV [[ASHR]], [[ASHR1]]
41     ; MIPS32: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[SDIV]], [[C]](s32)
42     ; MIPS32: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
43     ; MIPS32: $v0 = COPY [[ASHR2]](s32)
44     ; MIPS32: RetRA implicit $v0
45     %2:_(s32) = COPY $a0
46     %0:_(s8) = G_TRUNC %2(s32)
47     %3:_(s32) = COPY $a1
48     %1:_(s8) = G_TRUNC %3(s32)
49     %4:_(s8) = G_SDIV %1, %0
50     %5:_(s32) = G_SEXT %4(s8)
51     $v0 = COPY %5(s32)
52     RetRA implicit $v0
54 ...
55 ---
56 name:            sdiv_i16
57 alignment:       4
58 tracksRegLiveness: true
59 body:             |
60   bb.1.entry:
61     liveins: $a0, $a1
63     ; MIPS32-LABEL: name: sdiv_i16
64     ; MIPS32: liveins: $a0, $a1
65     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
66     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
67     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
68     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
69     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
70     ; MIPS32: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
71     ; MIPS32: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
72     ; MIPS32: [[SDIV:%[0-9]+]]:_(s32) = G_SDIV [[ASHR]], [[ASHR1]]
73     ; MIPS32: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[SDIV]], [[C]](s32)
74     ; MIPS32: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
75     ; MIPS32: $v0 = COPY [[ASHR2]](s32)
76     ; MIPS32: RetRA implicit $v0
77     %2:_(s32) = COPY $a0
78     %0:_(s16) = G_TRUNC %2(s32)
79     %3:_(s32) = COPY $a1
80     %1:_(s16) = G_TRUNC %3(s32)
81     %4:_(s16) = G_SDIV %1, %0
82     %5:_(s32) = G_SEXT %4(s16)
83     $v0 = COPY %5(s32)
84     RetRA implicit $v0
86 ...
87 ---
88 name:            sdiv_i32
89 alignment:       4
90 tracksRegLiveness: true
91 body:             |
92   bb.1.entry:
93     liveins: $a0, $a1
95     ; MIPS32-LABEL: name: sdiv_i32
96     ; MIPS32: liveins: $a0, $a1
97     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
98     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
99     ; MIPS32: [[SDIV:%[0-9]+]]:_(s32) = G_SDIV [[COPY1]], [[COPY]]
100     ; MIPS32: $v0 = COPY [[SDIV]](s32)
101     ; MIPS32: RetRA implicit $v0
102     %0:_(s32) = COPY $a0
103     %1:_(s32) = COPY $a1
104     %2:_(s32) = G_SDIV %1, %0
105     $v0 = COPY %2(s32)
106     RetRA implicit $v0
110 name:            sdiv_i64
111 alignment:       4
112 tracksRegLiveness: true
113 body:             |
114   bb.1.entry:
115     liveins: $a0, $a1, $a2, $a3
117     ; MIPS32-LABEL: name: sdiv_i64
118     ; MIPS32: liveins: $a0, $a1, $a2, $a3
119     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
120     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
121     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
122     ; MIPS32: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3
123     ; MIPS32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
124     ; MIPS32: $a0 = COPY [[COPY2]](s32)
125     ; MIPS32: $a1 = COPY [[COPY3]](s32)
126     ; MIPS32: $a2 = COPY [[COPY]](s32)
127     ; MIPS32: $a3 = COPY [[COPY1]](s32)
128     ; MIPS32: JAL &__divdi3, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0, implicit-def $v1
129     ; MIPS32: [[COPY4:%[0-9]+]]:_(s32) = COPY $v0
130     ; MIPS32: [[COPY5:%[0-9]+]]:_(s32) = COPY $v1
131     ; MIPS32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
132     ; MIPS32: $v0 = COPY [[COPY4]](s32)
133     ; MIPS32: $v1 = COPY [[COPY5]](s32)
134     ; MIPS32: RetRA implicit $v0, implicit $v1
135     %2:_(s32) = COPY $a0
136     %3:_(s32) = COPY $a1
137     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
138     %4:_(s32) = COPY $a2
139     %5:_(s32) = COPY $a3
140     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
141     %6:_(s64) = G_SDIV %1, %0
142     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
143     $v0 = COPY %7(s32)
144     $v1 = COPY %8(s32)
145     RetRA implicit $v0, implicit $v1
149 name:            srem_i8
150 alignment:       4
151 tracksRegLiveness: true
152 body:             |
153   bb.1.entry:
154     liveins: $a0, $a1
156     ; MIPS32-LABEL: name: srem_i8
157     ; MIPS32: liveins: $a0, $a1
158     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
159     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
160     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
161     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
162     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
163     ; MIPS32: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
164     ; MIPS32: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
165     ; MIPS32: [[SREM:%[0-9]+]]:_(s32) = G_SREM [[ASHR]], [[ASHR1]]
166     ; MIPS32: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[SREM]], [[C]](s32)
167     ; MIPS32: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
168     ; MIPS32: $v0 = COPY [[ASHR2]](s32)
169     ; MIPS32: RetRA implicit $v0
170     %2:_(s32) = COPY $a0
171     %0:_(s8) = G_TRUNC %2(s32)
172     %3:_(s32) = COPY $a1
173     %1:_(s8) = G_TRUNC %3(s32)
174     %4:_(s8) = G_SREM %1, %0
175     %5:_(s32) = G_SEXT %4(s8)
176     $v0 = COPY %5(s32)
177     RetRA implicit $v0
181 name:            srem_i16
182 alignment:       4
183 tracksRegLiveness: true
184 body:             |
185   bb.1.entry:
186     liveins: $a0, $a1
188     ; MIPS32-LABEL: name: srem_i16
189     ; MIPS32: liveins: $a0, $a1
190     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
191     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
192     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
193     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
194     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
195     ; MIPS32: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
196     ; MIPS32: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
197     ; MIPS32: [[SREM:%[0-9]+]]:_(s32) = G_SREM [[ASHR]], [[ASHR1]]
198     ; MIPS32: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[SREM]], [[C]](s32)
199     ; MIPS32: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
200     ; MIPS32: $v0 = COPY [[ASHR2]](s32)
201     ; MIPS32: RetRA implicit $v0
202     %2:_(s32) = COPY $a0
203     %0:_(s16) = G_TRUNC %2(s32)
204     %3:_(s32) = COPY $a1
205     %1:_(s16) = G_TRUNC %3(s32)
206     %4:_(s16) = G_SREM %1, %0
207     %5:_(s32) = G_SEXT %4(s16)
208     $v0 = COPY %5(s32)
209     RetRA implicit $v0
213 name:            srem_i32
214 alignment:       4
215 tracksRegLiveness: true
216 body:             |
217   bb.1.entry:
218     liveins: $a0, $a1
220     ; MIPS32-LABEL: name: srem_i32
221     ; MIPS32: liveins: $a0, $a1
222     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
223     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
224     ; MIPS32: [[SREM:%[0-9]+]]:_(s32) = G_SREM [[COPY1]], [[COPY]]
225     ; MIPS32: $v0 = COPY [[SREM]](s32)
226     ; MIPS32: RetRA implicit $v0
227     %0:_(s32) = COPY $a0
228     %1:_(s32) = COPY $a1
229     %2:_(s32) = G_SREM %1, %0
230     $v0 = COPY %2(s32)
231     RetRA implicit $v0
235 name:            srem_i64
236 alignment:       4
237 tracksRegLiveness: true
238 body:             |
239   bb.1.entry:
240     liveins: $a0, $a1, $a2, $a3
242     ; MIPS32-LABEL: name: srem_i64
243     ; MIPS32: liveins: $a0, $a1, $a2, $a3
244     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
245     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
246     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
247     ; MIPS32: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3
248     ; MIPS32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
249     ; MIPS32: $a0 = COPY [[COPY2]](s32)
250     ; MIPS32: $a1 = COPY [[COPY3]](s32)
251     ; MIPS32: $a2 = COPY [[COPY]](s32)
252     ; MIPS32: $a3 = COPY [[COPY1]](s32)
253     ; MIPS32: JAL &__moddi3, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0, implicit-def $v1
254     ; MIPS32: [[COPY4:%[0-9]+]]:_(s32) = COPY $v0
255     ; MIPS32: [[COPY5:%[0-9]+]]:_(s32) = COPY $v1
256     ; MIPS32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
257     ; MIPS32: $v0 = COPY [[COPY4]](s32)
258     ; MIPS32: $v1 = COPY [[COPY5]](s32)
259     ; MIPS32: RetRA implicit $v0, implicit $v1
260     %2:_(s32) = COPY $a0
261     %3:_(s32) = COPY $a1
262     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
263     %4:_(s32) = COPY $a2
264     %5:_(s32) = COPY $a3
265     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
266     %6:_(s64) = G_SREM %1, %0
267     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
268     $v0 = COPY %7(s32)
269     $v1 = COPY %8(s32)
270     RetRA implicit $v0, implicit $v1
274 name:            udiv_i8
275 alignment:       4
276 tracksRegLiveness: true
277 body:             |
278   bb.1.entry:
279     liveins: $a0, $a1
281     ; MIPS32-LABEL: name: udiv_i8
282     ; MIPS32: liveins: $a0, $a1
283     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
284     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
285     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
286     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
287     ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
288     ; MIPS32: [[UDIV:%[0-9]+]]:_(s32) = G_UDIV [[AND]], [[AND1]]
289     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
290     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UDIV]], [[C1]](s32)
291     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
292     ; MIPS32: $v0 = COPY [[ASHR]](s32)
293     ; MIPS32: RetRA implicit $v0
294     %2:_(s32) = COPY $a0
295     %0:_(s8) = G_TRUNC %2(s32)
296     %3:_(s32) = COPY $a1
297     %1:_(s8) = G_TRUNC %3(s32)
298     %4:_(s8) = G_UDIV %1, %0
299     %5:_(s32) = G_SEXT %4(s8)
300     $v0 = COPY %5(s32)
301     RetRA implicit $v0
305 name:            udiv_i16
306 alignment:       4
307 tracksRegLiveness: true
308 body:             |
309   bb.1.entry:
310     liveins: $a0, $a1
312     ; MIPS32-LABEL: name: udiv_i16
313     ; MIPS32: liveins: $a0, $a1
314     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
315     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
316     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
317     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
318     ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
319     ; MIPS32: [[UDIV:%[0-9]+]]:_(s32) = G_UDIV [[AND]], [[AND1]]
320     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
321     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UDIV]], [[C1]](s32)
322     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
323     ; MIPS32: $v0 = COPY [[ASHR]](s32)
324     ; MIPS32: RetRA implicit $v0
325     %2:_(s32) = COPY $a0
326     %0:_(s16) = G_TRUNC %2(s32)
327     %3:_(s32) = COPY $a1
328     %1:_(s16) = G_TRUNC %3(s32)
329     %4:_(s16) = G_UDIV %1, %0
330     %5:_(s32) = G_SEXT %4(s16)
331     $v0 = COPY %5(s32)
332     RetRA implicit $v0
336 name:            udiv_i32
337 alignment:       4
338 tracksRegLiveness: true
339 body:             |
340   bb.1.entry:
341     liveins: $a0, $a1
343     ; MIPS32-LABEL: name: udiv_i32
344     ; MIPS32: liveins: $a0, $a1
345     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
346     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
347     ; MIPS32: [[UDIV:%[0-9]+]]:_(s32) = G_UDIV [[COPY1]], [[COPY]]
348     ; MIPS32: $v0 = COPY [[UDIV]](s32)
349     ; MIPS32: RetRA implicit $v0
350     %0:_(s32) = COPY $a0
351     %1:_(s32) = COPY $a1
352     %2:_(s32) = G_UDIV %1, %0
353     $v0 = COPY %2(s32)
354     RetRA implicit $v0
358 name:            udiv_i64
359 alignment:       4
360 tracksRegLiveness: true
361 body:             |
362   bb.1.entry:
363     liveins: $a0, $a1, $a2, $a3
365     ; MIPS32-LABEL: name: udiv_i64
366     ; MIPS32: liveins: $a0, $a1, $a2, $a3
367     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
368     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
369     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
370     ; MIPS32: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3
371     ; MIPS32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
372     ; MIPS32: $a0 = COPY [[COPY2]](s32)
373     ; MIPS32: $a1 = COPY [[COPY3]](s32)
374     ; MIPS32: $a2 = COPY [[COPY]](s32)
375     ; MIPS32: $a3 = COPY [[COPY1]](s32)
376     ; MIPS32: JAL &__udivdi3, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0, implicit-def $v1
377     ; MIPS32: [[COPY4:%[0-9]+]]:_(s32) = COPY $v0
378     ; MIPS32: [[COPY5:%[0-9]+]]:_(s32) = COPY $v1
379     ; MIPS32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
380     ; MIPS32: $v0 = COPY [[COPY4]](s32)
381     ; MIPS32: $v1 = COPY [[COPY5]](s32)
382     ; MIPS32: RetRA implicit $v0, implicit $v1
383     %2:_(s32) = COPY $a0
384     %3:_(s32) = COPY $a1
385     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
386     %4:_(s32) = COPY $a2
387     %5:_(s32) = COPY $a3
388     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
389     %6:_(s64) = G_UDIV %1, %0
390     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
391     $v0 = COPY %7(s32)
392     $v1 = COPY %8(s32)
393     RetRA implicit $v0, implicit $v1
397 name:            urem_i8
398 alignment:       4
399 tracksRegLiveness: true
400 body:             |
401   bb.1.entry:
402     liveins: $a0, $a1
404     ; MIPS32-LABEL: name: urem_i8
405     ; MIPS32: liveins: $a0, $a1
406     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
407     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
408     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
409     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
410     ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
411     ; MIPS32: [[UREM:%[0-9]+]]:_(s32) = G_UREM [[AND]], [[AND1]]
412     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
413     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UREM]], [[C1]](s32)
414     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
415     ; MIPS32: $v0 = COPY [[ASHR]](s32)
416     ; MIPS32: RetRA implicit $v0
417     %2:_(s32) = COPY $a0
418     %0:_(s8) = G_TRUNC %2(s32)
419     %3:_(s32) = COPY $a1
420     %1:_(s8) = G_TRUNC %3(s32)
421     %4:_(s8) = G_UREM %1, %0
422     %5:_(s32) = G_SEXT %4(s8)
423     $v0 = COPY %5(s32)
424     RetRA implicit $v0
428 name:            urem_i16
429 alignment:       4
430 tracksRegLiveness: true
431 body:             |
432   bb.1.entry:
433     liveins: $a0, $a1
435     ; MIPS32-LABEL: name: urem_i16
436     ; MIPS32: liveins: $a0, $a1
437     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
438     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
439     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
440     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
441     ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
442     ; MIPS32: [[UREM:%[0-9]+]]:_(s32) = G_UREM [[AND]], [[AND1]]
443     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
444     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UREM]], [[C1]](s32)
445     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
446     ; MIPS32: $v0 = COPY [[ASHR]](s32)
447     ; MIPS32: RetRA implicit $v0
448     %2:_(s32) = COPY $a0
449     %0:_(s16) = G_TRUNC %2(s32)
450     %3:_(s32) = COPY $a1
451     %1:_(s16) = G_TRUNC %3(s32)
452     %4:_(s16) = G_UREM %1, %0
453     %5:_(s32) = G_SEXT %4(s16)
454     $v0 = COPY %5(s32)
455     RetRA implicit $v0
459 name:            urem_i32
460 alignment:       4
461 tracksRegLiveness: true
462 body:             |
463   bb.1.entry:
464     liveins: $a0, $a1
466     ; MIPS32-LABEL: name: urem_i32
467     ; MIPS32: liveins: $a0, $a1
468     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
469     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
470     ; MIPS32: [[UREM:%[0-9]+]]:_(s32) = G_UREM [[COPY1]], [[COPY]]
471     ; MIPS32: $v0 = COPY [[UREM]](s32)
472     ; MIPS32: RetRA implicit $v0
473     %0:_(s32) = COPY $a0
474     %1:_(s32) = COPY $a1
475     %2:_(s32) = G_UREM %1, %0
476     $v0 = COPY %2(s32)
477     RetRA implicit $v0
481 name:            urem_i64
482 alignment:       4
483 tracksRegLiveness: true
484 body:             |
485   bb.1.entry:
486     liveins: $a0, $a1, $a2, $a3
488     ; MIPS32-LABEL: name: urem_i64
489     ; MIPS32: liveins: $a0, $a1, $a2, $a3
490     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
491     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
492     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
493     ; MIPS32: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3
494     ; MIPS32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
495     ; MIPS32: $a0 = COPY [[COPY2]](s32)
496     ; MIPS32: $a1 = COPY [[COPY3]](s32)
497     ; MIPS32: $a2 = COPY [[COPY]](s32)
498     ; MIPS32: $a3 = COPY [[COPY1]](s32)
499     ; MIPS32: JAL &__umoddi3, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit $a1, implicit $a2, implicit $a3, implicit-def $v0, implicit-def $v1
500     ; MIPS32: [[COPY4:%[0-9]+]]:_(s32) = COPY $v0
501     ; MIPS32: [[COPY5:%[0-9]+]]:_(s32) = COPY $v1
502     ; MIPS32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
503     ; MIPS32: $v0 = COPY [[COPY4]](s32)
504     ; MIPS32: $v1 = COPY [[COPY5]](s32)
505     ; MIPS32: RetRA implicit $v0, implicit $v1
506     %2:_(s32) = COPY $a0
507     %3:_(s32) = COPY $a1
508     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
509     %4:_(s32) = COPY $a2
510     %5:_(s32) = COPY $a3
511     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
512     %6:_(s64) = G_UREM %1, %0
513     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
514     $v0 = COPY %7(s32)
515     $v1 = COPY %8(s32)
516     RetRA implicit $v0, implicit $v1