1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32
3 ; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64
4 ; RUN: llc --mtriple=loongarch32 -mattr=+d -loongarch-check-zero-division < %s \
5 ; RUN: | FileCheck %s --check-prefix=LA32-TRAP
6 ; RUN: llc --mtriple=loongarch64 -mattr=+d -loongarch-check-zero-division < %s \
7 ; RUN: | FileCheck %s --check-prefix=LA64-TRAP
9 ;; Test the sdiv/udiv/srem/urem LLVM IR.
11 define i1 @sdiv_i1(i1 %a, i1 %b) {
12 ; LA32-LABEL: sdiv_i1:
13 ; LA32: # %bb.0: # %entry
16 ; LA64-LABEL: sdiv_i1:
17 ; LA64: # %bb.0: # %entry
20 ; LA32-TRAP-LABEL: sdiv_i1:
21 ; LA32-TRAP: # %bb.0: # %entry
24 ; LA64-TRAP-LABEL: sdiv_i1:
25 ; LA64-TRAP: # %bb.0: # %entry
32 define i8 @sdiv_i8(i8 %a, i8 %b) {
33 ; LA32-LABEL: sdiv_i8:
34 ; LA32: # %bb.0: # %entry
35 ; LA32-NEXT: ext.w.b $a1, $a1
36 ; LA32-NEXT: ext.w.b $a0, $a0
37 ; LA32-NEXT: div.w $a0, $a0, $a1
40 ; LA64-LABEL: sdiv_i8:
41 ; LA64: # %bb.0: # %entry
42 ; LA64-NEXT: ext.w.b $a1, $a1
43 ; LA64-NEXT: ext.w.b $a0, $a0
44 ; LA64-NEXT: div.d $a0, $a0, $a1
47 ; LA32-TRAP-LABEL: sdiv_i8:
48 ; LA32-TRAP: # %bb.0: # %entry
49 ; LA32-TRAP-NEXT: ext.w.b $a1, $a1
50 ; LA32-TRAP-NEXT: ext.w.b $a0, $a0
51 ; LA32-TRAP-NEXT: div.w $a0, $a0, $a1
52 ; LA32-TRAP-NEXT: bnez $a1, .LBB1_2
53 ; LA32-TRAP-NEXT: # %bb.1: # %entry
54 ; LA32-TRAP-NEXT: break 7
55 ; LA32-TRAP-NEXT: .LBB1_2: # %entry
58 ; LA64-TRAP-LABEL: sdiv_i8:
59 ; LA64-TRAP: # %bb.0: # %entry
60 ; LA64-TRAP-NEXT: ext.w.b $a1, $a1
61 ; LA64-TRAP-NEXT: ext.w.b $a0, $a0
62 ; LA64-TRAP-NEXT: div.d $a0, $a0, $a1
63 ; LA64-TRAP-NEXT: bnez $a1, .LBB1_2
64 ; LA64-TRAP-NEXT: # %bb.1: # %entry
65 ; LA64-TRAP-NEXT: break 7
66 ; LA64-TRAP-NEXT: .LBB1_2: # %entry
73 define i16 @sdiv_i16(i16 %a, i16 %b) {
74 ; LA32-LABEL: sdiv_i16:
75 ; LA32: # %bb.0: # %entry
76 ; LA32-NEXT: ext.w.h $a1, $a1
77 ; LA32-NEXT: ext.w.h $a0, $a0
78 ; LA32-NEXT: div.w $a0, $a0, $a1
81 ; LA64-LABEL: sdiv_i16:
82 ; LA64: # %bb.0: # %entry
83 ; LA64-NEXT: ext.w.h $a1, $a1
84 ; LA64-NEXT: ext.w.h $a0, $a0
85 ; LA64-NEXT: div.d $a0, $a0, $a1
88 ; LA32-TRAP-LABEL: sdiv_i16:
89 ; LA32-TRAP: # %bb.0: # %entry
90 ; LA32-TRAP-NEXT: ext.w.h $a1, $a1
91 ; LA32-TRAP-NEXT: ext.w.h $a0, $a0
92 ; LA32-TRAP-NEXT: div.w $a0, $a0, $a1
93 ; LA32-TRAP-NEXT: bnez $a1, .LBB2_2
94 ; LA32-TRAP-NEXT: # %bb.1: # %entry
95 ; LA32-TRAP-NEXT: break 7
96 ; LA32-TRAP-NEXT: .LBB2_2: # %entry
99 ; LA64-TRAP-LABEL: sdiv_i16:
100 ; LA64-TRAP: # %bb.0: # %entry
101 ; LA64-TRAP-NEXT: ext.w.h $a1, $a1
102 ; LA64-TRAP-NEXT: ext.w.h $a0, $a0
103 ; LA64-TRAP-NEXT: div.d $a0, $a0, $a1
104 ; LA64-TRAP-NEXT: bnez $a1, .LBB2_2
105 ; LA64-TRAP-NEXT: # %bb.1: # %entry
106 ; LA64-TRAP-NEXT: break 7
107 ; LA64-TRAP-NEXT: .LBB2_2: # %entry
108 ; LA64-TRAP-NEXT: ret
114 define i32 @sdiv_i32(i32 %a, i32 %b) {
115 ; LA32-LABEL: sdiv_i32:
116 ; LA32: # %bb.0: # %entry
117 ; LA32-NEXT: div.w $a0, $a0, $a1
120 ; LA64-LABEL: sdiv_i32:
121 ; LA64: # %bb.0: # %entry
122 ; LA64-NEXT: addi.w $a1, $a1, 0
123 ; LA64-NEXT: addi.w $a0, $a0, 0
124 ; LA64-NEXT: div.d $a0, $a0, $a1
127 ; LA32-TRAP-LABEL: sdiv_i32:
128 ; LA32-TRAP: # %bb.0: # %entry
129 ; LA32-TRAP-NEXT: div.w $a0, $a0, $a1
130 ; LA32-TRAP-NEXT: bnez $a1, .LBB3_2
131 ; LA32-TRAP-NEXT: # %bb.1: # %entry
132 ; LA32-TRAP-NEXT: break 7
133 ; LA32-TRAP-NEXT: .LBB3_2: # %entry
134 ; LA32-TRAP-NEXT: ret
136 ; LA64-TRAP-LABEL: sdiv_i32:
137 ; LA64-TRAP: # %bb.0: # %entry
138 ; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
139 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
140 ; LA64-TRAP-NEXT: div.d $a0, $a0, $a1
141 ; LA64-TRAP-NEXT: bnez $a1, .LBB3_2
142 ; LA64-TRAP-NEXT: # %bb.1: # %entry
143 ; LA64-TRAP-NEXT: break 7
144 ; LA64-TRAP-NEXT: .LBB3_2: # %entry
145 ; LA64-TRAP-NEXT: ret
151 define i32 @sdiv_ui32_si32_si32(i32 signext %a, i32 signext %b) {
152 ; LA32-LABEL: sdiv_ui32_si32_si32:
153 ; LA32: # %bb.0: # %entry
154 ; LA32-NEXT: div.w $a0, $a0, $a1
157 ; LA64-LABEL: sdiv_ui32_si32_si32:
158 ; LA64: # %bb.0: # %entry
159 ; LA64-NEXT: div.d $a0, $a0, $a1
162 ; LA32-TRAP-LABEL: sdiv_ui32_si32_si32:
163 ; LA32-TRAP: # %bb.0: # %entry
164 ; LA32-TRAP-NEXT: div.w $a0, $a0, $a1
165 ; LA32-TRAP-NEXT: bnez $a1, .LBB4_2
166 ; LA32-TRAP-NEXT: # %bb.1: # %entry
167 ; LA32-TRAP-NEXT: break 7
168 ; LA32-TRAP-NEXT: .LBB4_2: # %entry
169 ; LA32-TRAP-NEXT: ret
171 ; LA64-TRAP-LABEL: sdiv_ui32_si32_si32:
172 ; LA64-TRAP: # %bb.0: # %entry
173 ; LA64-TRAP-NEXT: div.d $a0, $a0, $a1
174 ; LA64-TRAP-NEXT: bnez $a1, .LBB4_2
175 ; LA64-TRAP-NEXT: # %bb.1: # %entry
176 ; LA64-TRAP-NEXT: break 7
177 ; LA64-TRAP-NEXT: .LBB4_2: # %entry
178 ; LA64-TRAP-NEXT: ret
184 define signext i32 @sdiv_si32_ui32_ui32(i32 %a, i32 %b) {
185 ; LA32-LABEL: sdiv_si32_ui32_ui32:
186 ; LA32: # %bb.0: # %entry
187 ; LA32-NEXT: div.w $a0, $a0, $a1
190 ; LA64-LABEL: sdiv_si32_ui32_ui32:
191 ; LA64: # %bb.0: # %entry
192 ; LA64-NEXT: addi.w $a1, $a1, 0
193 ; LA64-NEXT: addi.w $a0, $a0, 0
194 ; LA64-NEXT: div.d $a0, $a0, $a1
195 ; LA64-NEXT: addi.w $a0, $a0, 0
198 ; LA32-TRAP-LABEL: sdiv_si32_ui32_ui32:
199 ; LA32-TRAP: # %bb.0: # %entry
200 ; LA32-TRAP-NEXT: div.w $a0, $a0, $a1
201 ; LA32-TRAP-NEXT: bnez $a1, .LBB5_2
202 ; LA32-TRAP-NEXT: # %bb.1: # %entry
203 ; LA32-TRAP-NEXT: break 7
204 ; LA32-TRAP-NEXT: .LBB5_2: # %entry
205 ; LA32-TRAP-NEXT: ret
207 ; LA64-TRAP-LABEL: sdiv_si32_ui32_ui32:
208 ; LA64-TRAP: # %bb.0: # %entry
209 ; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
210 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
211 ; LA64-TRAP-NEXT: div.d $a0, $a0, $a1
212 ; LA64-TRAP-NEXT: bnez $a1, .LBB5_2
213 ; LA64-TRAP-NEXT: # %bb.1: # %entry
214 ; LA64-TRAP-NEXT: break 7
215 ; LA64-TRAP-NEXT: .LBB5_2: # %entry
216 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
217 ; LA64-TRAP-NEXT: ret
223 define signext i32 @sdiv_si32_si32_si32(i32 signext %a, i32 signext %b) {
224 ; LA32-LABEL: sdiv_si32_si32_si32:
225 ; LA32: # %bb.0: # %entry
226 ; LA32-NEXT: div.w $a0, $a0, $a1
229 ; LA64-LABEL: sdiv_si32_si32_si32:
230 ; LA64: # %bb.0: # %entry
231 ; LA64-NEXT: div.w $a0, $a0, $a1
234 ; LA32-TRAP-LABEL: sdiv_si32_si32_si32:
235 ; LA32-TRAP: # %bb.0: # %entry
236 ; LA32-TRAP-NEXT: div.w $a0, $a0, $a1
237 ; LA32-TRAP-NEXT: bnez $a1, .LBB6_2
238 ; LA32-TRAP-NEXT: # %bb.1: # %entry
239 ; LA32-TRAP-NEXT: break 7
240 ; LA32-TRAP-NEXT: .LBB6_2: # %entry
241 ; LA32-TRAP-NEXT: ret
243 ; LA64-TRAP-LABEL: sdiv_si32_si32_si32:
244 ; LA64-TRAP: # %bb.0: # %entry
245 ; LA64-TRAP-NEXT: div.w $a0, $a0, $a1
246 ; LA64-TRAP-NEXT: bnez $a1, .LBB6_2
247 ; LA64-TRAP-NEXT: # %bb.1: # %entry
248 ; LA64-TRAP-NEXT: break 7
249 ; LA64-TRAP-NEXT: .LBB6_2: # %entry
250 ; LA64-TRAP-NEXT: ret
256 define i64 @sdiv_i64(i64 %a, i64 %b) {
257 ; LA32-LABEL: sdiv_i64:
258 ; LA32: # %bb.0: # %entry
259 ; LA32-NEXT: addi.w $sp, $sp, -16
260 ; LA32-NEXT: .cfi_def_cfa_offset 16
261 ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
262 ; LA32-NEXT: .cfi_offset 1, -4
263 ; LA32-NEXT: bl %plt(__divdi3)
264 ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
265 ; LA32-NEXT: addi.w $sp, $sp, 16
268 ; LA64-LABEL: sdiv_i64:
269 ; LA64: # %bb.0: # %entry
270 ; LA64-NEXT: div.d $a0, $a0, $a1
273 ; LA32-TRAP-LABEL: sdiv_i64:
274 ; LA32-TRAP: # %bb.0: # %entry
275 ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16
276 ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16
277 ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
278 ; LA32-TRAP-NEXT: .cfi_offset 1, -4
279 ; LA32-TRAP-NEXT: bl %plt(__divdi3)
280 ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
281 ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16
282 ; LA32-TRAP-NEXT: ret
284 ; LA64-TRAP-LABEL: sdiv_i64:
285 ; LA64-TRAP: # %bb.0: # %entry
286 ; LA64-TRAP-NEXT: div.d $a0, $a0, $a1
287 ; LA64-TRAP-NEXT: bnez $a1, .LBB7_2
288 ; LA64-TRAP-NEXT: # %bb.1: # %entry
289 ; LA64-TRAP-NEXT: break 7
290 ; LA64-TRAP-NEXT: .LBB7_2: # %entry
291 ; LA64-TRAP-NEXT: ret
297 define i1 @udiv_i1(i1 %a, i1 %b) {
298 ; LA32-LABEL: udiv_i1:
299 ; LA32: # %bb.0: # %entry
302 ; LA64-LABEL: udiv_i1:
303 ; LA64: # %bb.0: # %entry
306 ; LA32-TRAP-LABEL: udiv_i1:
307 ; LA32-TRAP: # %bb.0: # %entry
308 ; LA32-TRAP-NEXT: ret
310 ; LA64-TRAP-LABEL: udiv_i1:
311 ; LA64-TRAP: # %bb.0: # %entry
312 ; LA64-TRAP-NEXT: ret
318 define i8 @udiv_i8(i8 %a, i8 %b) {
319 ; LA32-LABEL: udiv_i8:
320 ; LA32: # %bb.0: # %entry
321 ; LA32-NEXT: andi $a1, $a1, 255
322 ; LA32-NEXT: andi $a0, $a0, 255
323 ; LA32-NEXT: div.wu $a0, $a0, $a1
326 ; LA64-LABEL: udiv_i8:
327 ; LA64: # %bb.0: # %entry
328 ; LA64-NEXT: andi $a1, $a1, 255
329 ; LA64-NEXT: andi $a0, $a0, 255
330 ; LA64-NEXT: div.du $a0, $a0, $a1
333 ; LA32-TRAP-LABEL: udiv_i8:
334 ; LA32-TRAP: # %bb.0: # %entry
335 ; LA32-TRAP-NEXT: andi $a1, $a1, 255
336 ; LA32-TRAP-NEXT: andi $a0, $a0, 255
337 ; LA32-TRAP-NEXT: div.wu $a0, $a0, $a1
338 ; LA32-TRAP-NEXT: bnez $a1, .LBB9_2
339 ; LA32-TRAP-NEXT: # %bb.1: # %entry
340 ; LA32-TRAP-NEXT: break 7
341 ; LA32-TRAP-NEXT: .LBB9_2: # %entry
342 ; LA32-TRAP-NEXT: ret
344 ; LA64-TRAP-LABEL: udiv_i8:
345 ; LA64-TRAP: # %bb.0: # %entry
346 ; LA64-TRAP-NEXT: andi $a1, $a1, 255
347 ; LA64-TRAP-NEXT: andi $a0, $a0, 255
348 ; LA64-TRAP-NEXT: div.du $a0, $a0, $a1
349 ; LA64-TRAP-NEXT: bnez $a1, .LBB9_2
350 ; LA64-TRAP-NEXT: # %bb.1: # %entry
351 ; LA64-TRAP-NEXT: break 7
352 ; LA64-TRAP-NEXT: .LBB9_2: # %entry
353 ; LA64-TRAP-NEXT: ret
359 define i16 @udiv_i16(i16 %a, i16 %b) {
360 ; LA32-LABEL: udiv_i16:
361 ; LA32: # %bb.0: # %entry
362 ; LA32-NEXT: bstrpick.w $a1, $a1, 15, 0
363 ; LA32-NEXT: bstrpick.w $a0, $a0, 15, 0
364 ; LA32-NEXT: div.wu $a0, $a0, $a1
367 ; LA64-LABEL: udiv_i16:
368 ; LA64: # %bb.0: # %entry
369 ; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
370 ; LA64-NEXT: bstrpick.d $a0, $a0, 15, 0
371 ; LA64-NEXT: div.du $a0, $a0, $a1
374 ; LA32-TRAP-LABEL: udiv_i16:
375 ; LA32-TRAP: # %bb.0: # %entry
376 ; LA32-TRAP-NEXT: bstrpick.w $a1, $a1, 15, 0
377 ; LA32-TRAP-NEXT: bstrpick.w $a0, $a0, 15, 0
378 ; LA32-TRAP-NEXT: div.wu $a0, $a0, $a1
379 ; LA32-TRAP-NEXT: bnez $a1, .LBB10_2
380 ; LA32-TRAP-NEXT: # %bb.1: # %entry
381 ; LA32-TRAP-NEXT: break 7
382 ; LA32-TRAP-NEXT: .LBB10_2: # %entry
383 ; LA32-TRAP-NEXT: ret
385 ; LA64-TRAP-LABEL: udiv_i16:
386 ; LA64-TRAP: # %bb.0: # %entry
387 ; LA64-TRAP-NEXT: bstrpick.d $a1, $a1, 15, 0
388 ; LA64-TRAP-NEXT: bstrpick.d $a0, $a0, 15, 0
389 ; LA64-TRAP-NEXT: div.du $a0, $a0, $a1
390 ; LA64-TRAP-NEXT: bnez $a1, .LBB10_2
391 ; LA64-TRAP-NEXT: # %bb.1: # %entry
392 ; LA64-TRAP-NEXT: break 7
393 ; LA64-TRAP-NEXT: .LBB10_2: # %entry
394 ; LA64-TRAP-NEXT: ret
400 define i32 @udiv_i32(i32 %a, i32 %b) {
401 ; LA32-LABEL: udiv_i32:
402 ; LA32: # %bb.0: # %entry
403 ; LA32-NEXT: div.wu $a0, $a0, $a1
406 ; LA64-LABEL: udiv_i32:
407 ; LA64: # %bb.0: # %entry
408 ; LA64-NEXT: addi.w $a1, $a1, 0
409 ; LA64-NEXT: addi.w $a0, $a0, 0
410 ; LA64-NEXT: div.wu $a0, $a0, $a1
413 ; LA32-TRAP-LABEL: udiv_i32:
414 ; LA32-TRAP: # %bb.0: # %entry
415 ; LA32-TRAP-NEXT: div.wu $a0, $a0, $a1
416 ; LA32-TRAP-NEXT: bnez $a1, .LBB11_2
417 ; LA32-TRAP-NEXT: # %bb.1: # %entry
418 ; LA32-TRAP-NEXT: break 7
419 ; LA32-TRAP-NEXT: .LBB11_2: # %entry
420 ; LA32-TRAP-NEXT: ret
422 ; LA64-TRAP-LABEL: udiv_i32:
423 ; LA64-TRAP: # %bb.0: # %entry
424 ; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
425 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
426 ; LA64-TRAP-NEXT: div.wu $a0, $a0, $a1
427 ; LA64-TRAP-NEXT: bnez $a1, .LBB11_2
428 ; LA64-TRAP-NEXT: # %bb.1: # %entry
429 ; LA64-TRAP-NEXT: break 7
430 ; LA64-TRAP-NEXT: .LBB11_2: # %entry
431 ; LA64-TRAP-NEXT: ret
437 define i32 @udiv_ui32_si32_si32(i32 signext %a, i32 signext %b) {
438 ; LA32-LABEL: udiv_ui32_si32_si32:
439 ; LA32: # %bb.0: # %entry
440 ; LA32-NEXT: div.wu $a0, $a0, $a1
443 ; LA64-LABEL: udiv_ui32_si32_si32:
444 ; LA64: # %bb.0: # %entry
445 ; LA64-NEXT: div.wu $a0, $a0, $a1
448 ; LA32-TRAP-LABEL: udiv_ui32_si32_si32:
449 ; LA32-TRAP: # %bb.0: # %entry
450 ; LA32-TRAP-NEXT: div.wu $a0, $a0, $a1
451 ; LA32-TRAP-NEXT: bnez $a1, .LBB12_2
452 ; LA32-TRAP-NEXT: # %bb.1: # %entry
453 ; LA32-TRAP-NEXT: break 7
454 ; LA32-TRAP-NEXT: .LBB12_2: # %entry
455 ; LA32-TRAP-NEXT: ret
457 ; LA64-TRAP-LABEL: udiv_ui32_si32_si32:
458 ; LA64-TRAP: # %bb.0: # %entry
459 ; LA64-TRAP-NEXT: div.wu $a0, $a0, $a1
460 ; LA64-TRAP-NEXT: bnez $a1, .LBB12_2
461 ; LA64-TRAP-NEXT: # %bb.1: # %entry
462 ; LA64-TRAP-NEXT: break 7
463 ; LA64-TRAP-NEXT: .LBB12_2: # %entry
464 ; LA64-TRAP-NEXT: ret
470 define signext i32 @udiv_si32_ui32_ui32(i32 %a, i32 %b) {
471 ; LA32-LABEL: udiv_si32_ui32_ui32:
472 ; LA32: # %bb.0: # %entry
473 ; LA32-NEXT: div.wu $a0, $a0, $a1
476 ; LA64-LABEL: udiv_si32_ui32_ui32:
477 ; LA64: # %bb.0: # %entry
478 ; LA64-NEXT: addi.w $a1, $a1, 0
479 ; LA64-NEXT: addi.w $a0, $a0, 0
480 ; LA64-NEXT: div.wu $a0, $a0, $a1
483 ; LA32-TRAP-LABEL: udiv_si32_ui32_ui32:
484 ; LA32-TRAP: # %bb.0: # %entry
485 ; LA32-TRAP-NEXT: div.wu $a0, $a0, $a1
486 ; LA32-TRAP-NEXT: bnez $a1, .LBB13_2
487 ; LA32-TRAP-NEXT: # %bb.1: # %entry
488 ; LA32-TRAP-NEXT: break 7
489 ; LA32-TRAP-NEXT: .LBB13_2: # %entry
490 ; LA32-TRAP-NEXT: ret
492 ; LA64-TRAP-LABEL: udiv_si32_ui32_ui32:
493 ; LA64-TRAP: # %bb.0: # %entry
494 ; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
495 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
496 ; LA64-TRAP-NEXT: div.wu $a0, $a0, $a1
497 ; LA64-TRAP-NEXT: bnez $a1, .LBB13_2
498 ; LA64-TRAP-NEXT: # %bb.1: # %entry
499 ; LA64-TRAP-NEXT: break 7
500 ; LA64-TRAP-NEXT: .LBB13_2: # %entry
501 ; LA64-TRAP-NEXT: ret
507 define signext i32 @udiv_si32_si32_si32(i32 signext %a, i32 signext %b) {
508 ; LA32-LABEL: udiv_si32_si32_si32:
509 ; LA32: # %bb.0: # %entry
510 ; LA32-NEXT: div.wu $a0, $a0, $a1
513 ; LA64-LABEL: udiv_si32_si32_si32:
514 ; LA64: # %bb.0: # %entry
515 ; LA64-NEXT: div.wu $a0, $a0, $a1
518 ; LA32-TRAP-LABEL: udiv_si32_si32_si32:
519 ; LA32-TRAP: # %bb.0: # %entry
520 ; LA32-TRAP-NEXT: div.wu $a0, $a0, $a1
521 ; LA32-TRAP-NEXT: bnez $a1, .LBB14_2
522 ; LA32-TRAP-NEXT: # %bb.1: # %entry
523 ; LA32-TRAP-NEXT: break 7
524 ; LA32-TRAP-NEXT: .LBB14_2: # %entry
525 ; LA32-TRAP-NEXT: ret
527 ; LA64-TRAP-LABEL: udiv_si32_si32_si32:
528 ; LA64-TRAP: # %bb.0: # %entry
529 ; LA64-TRAP-NEXT: div.wu $a0, $a0, $a1
530 ; LA64-TRAP-NEXT: bnez $a1, .LBB14_2
531 ; LA64-TRAP-NEXT: # %bb.1: # %entry
532 ; LA64-TRAP-NEXT: break 7
533 ; LA64-TRAP-NEXT: .LBB14_2: # %entry
534 ; LA64-TRAP-NEXT: ret
540 define i64 @udiv_i64(i64 %a, i64 %b) {
541 ; LA32-LABEL: udiv_i64:
542 ; LA32: # %bb.0: # %entry
543 ; LA32-NEXT: addi.w $sp, $sp, -16
544 ; LA32-NEXT: .cfi_def_cfa_offset 16
545 ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
546 ; LA32-NEXT: .cfi_offset 1, -4
547 ; LA32-NEXT: bl %plt(__udivdi3)
548 ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
549 ; LA32-NEXT: addi.w $sp, $sp, 16
552 ; LA64-LABEL: udiv_i64:
553 ; LA64: # %bb.0: # %entry
554 ; LA64-NEXT: div.du $a0, $a0, $a1
557 ; LA32-TRAP-LABEL: udiv_i64:
558 ; LA32-TRAP: # %bb.0: # %entry
559 ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16
560 ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16
561 ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
562 ; LA32-TRAP-NEXT: .cfi_offset 1, -4
563 ; LA32-TRAP-NEXT: bl %plt(__udivdi3)
564 ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
565 ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16
566 ; LA32-TRAP-NEXT: ret
568 ; LA64-TRAP-LABEL: udiv_i64:
569 ; LA64-TRAP: # %bb.0: # %entry
570 ; LA64-TRAP-NEXT: div.du $a0, $a0, $a1
571 ; LA64-TRAP-NEXT: bnez $a1, .LBB15_2
572 ; LA64-TRAP-NEXT: # %bb.1: # %entry
573 ; LA64-TRAP-NEXT: break 7
574 ; LA64-TRAP-NEXT: .LBB15_2: # %entry
575 ; LA64-TRAP-NEXT: ret
581 define i1 @srem_i1(i1 %a, i1 %b) {
582 ; LA32-LABEL: srem_i1:
583 ; LA32: # %bb.0: # %entry
584 ; LA32-NEXT: move $a0, $zero
587 ; LA64-LABEL: srem_i1:
588 ; LA64: # %bb.0: # %entry
589 ; LA64-NEXT: move $a0, $zero
592 ; LA32-TRAP-LABEL: srem_i1:
593 ; LA32-TRAP: # %bb.0: # %entry
594 ; LA32-TRAP-NEXT: move $a0, $zero
595 ; LA32-TRAP-NEXT: ret
597 ; LA64-TRAP-LABEL: srem_i1:
598 ; LA64-TRAP: # %bb.0: # %entry
599 ; LA64-TRAP-NEXT: move $a0, $zero
600 ; LA64-TRAP-NEXT: ret
606 define i8 @srem_i8(i8 %a, i8 %b) {
607 ; LA32-LABEL: srem_i8:
608 ; LA32: # %bb.0: # %entry
609 ; LA32-NEXT: ext.w.b $a1, $a1
610 ; LA32-NEXT: ext.w.b $a0, $a0
611 ; LA32-NEXT: mod.w $a0, $a0, $a1
614 ; LA64-LABEL: srem_i8:
615 ; LA64: # %bb.0: # %entry
616 ; LA64-NEXT: ext.w.b $a1, $a1
617 ; LA64-NEXT: ext.w.b $a0, $a0
618 ; LA64-NEXT: mod.d $a0, $a0, $a1
621 ; LA32-TRAP-LABEL: srem_i8:
622 ; LA32-TRAP: # %bb.0: # %entry
623 ; LA32-TRAP-NEXT: ext.w.b $a1, $a1
624 ; LA32-TRAP-NEXT: ext.w.b $a0, $a0
625 ; LA32-TRAP-NEXT: mod.w $a0, $a0, $a1
626 ; LA32-TRAP-NEXT: bnez $a1, .LBB17_2
627 ; LA32-TRAP-NEXT: # %bb.1: # %entry
628 ; LA32-TRAP-NEXT: break 7
629 ; LA32-TRAP-NEXT: .LBB17_2: # %entry
630 ; LA32-TRAP-NEXT: ret
632 ; LA64-TRAP-LABEL: srem_i8:
633 ; LA64-TRAP: # %bb.0: # %entry
634 ; LA64-TRAP-NEXT: ext.w.b $a1, $a1
635 ; LA64-TRAP-NEXT: ext.w.b $a0, $a0
636 ; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1
637 ; LA64-TRAP-NEXT: bnez $a1, .LBB17_2
638 ; LA64-TRAP-NEXT: # %bb.1: # %entry
639 ; LA64-TRAP-NEXT: break 7
640 ; LA64-TRAP-NEXT: .LBB17_2: # %entry
641 ; LA64-TRAP-NEXT: ret
647 define i16 @srem_i16(i16 %a, i16 %b) {
648 ; LA32-LABEL: srem_i16:
649 ; LA32: # %bb.0: # %entry
650 ; LA32-NEXT: ext.w.h $a1, $a1
651 ; LA32-NEXT: ext.w.h $a0, $a0
652 ; LA32-NEXT: mod.w $a0, $a0, $a1
655 ; LA64-LABEL: srem_i16:
656 ; LA64: # %bb.0: # %entry
657 ; LA64-NEXT: ext.w.h $a1, $a1
658 ; LA64-NEXT: ext.w.h $a0, $a0
659 ; LA64-NEXT: mod.d $a0, $a0, $a1
662 ; LA32-TRAP-LABEL: srem_i16:
663 ; LA32-TRAP: # %bb.0: # %entry
664 ; LA32-TRAP-NEXT: ext.w.h $a1, $a1
665 ; LA32-TRAP-NEXT: ext.w.h $a0, $a0
666 ; LA32-TRAP-NEXT: mod.w $a0, $a0, $a1
667 ; LA32-TRAP-NEXT: bnez $a1, .LBB18_2
668 ; LA32-TRAP-NEXT: # %bb.1: # %entry
669 ; LA32-TRAP-NEXT: break 7
670 ; LA32-TRAP-NEXT: .LBB18_2: # %entry
671 ; LA32-TRAP-NEXT: ret
673 ; LA64-TRAP-LABEL: srem_i16:
674 ; LA64-TRAP: # %bb.0: # %entry
675 ; LA64-TRAP-NEXT: ext.w.h $a1, $a1
676 ; LA64-TRAP-NEXT: ext.w.h $a0, $a0
677 ; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1
678 ; LA64-TRAP-NEXT: bnez $a1, .LBB18_2
679 ; LA64-TRAP-NEXT: # %bb.1: # %entry
680 ; LA64-TRAP-NEXT: break 7
681 ; LA64-TRAP-NEXT: .LBB18_2: # %entry
682 ; LA64-TRAP-NEXT: ret
688 define i32 @srem_i32(i32 %a, i32 %b) {
689 ; LA32-LABEL: srem_i32:
690 ; LA32: # %bb.0: # %entry
691 ; LA32-NEXT: mod.w $a0, $a0, $a1
694 ; LA64-LABEL: srem_i32:
695 ; LA64: # %bb.0: # %entry
696 ; LA64-NEXT: addi.w $a1, $a1, 0
697 ; LA64-NEXT: addi.w $a0, $a0, 0
698 ; LA64-NEXT: mod.d $a0, $a0, $a1
701 ; LA32-TRAP-LABEL: srem_i32:
702 ; LA32-TRAP: # %bb.0: # %entry
703 ; LA32-TRAP-NEXT: mod.w $a0, $a0, $a1
704 ; LA32-TRAP-NEXT: bnez $a1, .LBB19_2
705 ; LA32-TRAP-NEXT: # %bb.1: # %entry
706 ; LA32-TRAP-NEXT: break 7
707 ; LA32-TRAP-NEXT: .LBB19_2: # %entry
708 ; LA32-TRAP-NEXT: ret
710 ; LA64-TRAP-LABEL: srem_i32:
711 ; LA64-TRAP: # %bb.0: # %entry
712 ; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
713 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
714 ; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1
715 ; LA64-TRAP-NEXT: bnez $a1, .LBB19_2
716 ; LA64-TRAP-NEXT: # %bb.1: # %entry
717 ; LA64-TRAP-NEXT: break 7
718 ; LA64-TRAP-NEXT: .LBB19_2: # %entry
719 ; LA64-TRAP-NEXT: ret
725 define i32 @srem_ui32_si32_si32(i32 signext %a, i32 signext %b) {
726 ; LA32-LABEL: srem_ui32_si32_si32:
727 ; LA32: # %bb.0: # %entry
728 ; LA32-NEXT: mod.w $a0, $a0, $a1
731 ; LA64-LABEL: srem_ui32_si32_si32:
732 ; LA64: # %bb.0: # %entry
733 ; LA64-NEXT: mod.d $a0, $a0, $a1
736 ; LA32-TRAP-LABEL: srem_ui32_si32_si32:
737 ; LA32-TRAP: # %bb.0: # %entry
738 ; LA32-TRAP-NEXT: mod.w $a0, $a0, $a1
739 ; LA32-TRAP-NEXT: bnez $a1, .LBB20_2
740 ; LA32-TRAP-NEXT: # %bb.1: # %entry
741 ; LA32-TRAP-NEXT: break 7
742 ; LA32-TRAP-NEXT: .LBB20_2: # %entry
743 ; LA32-TRAP-NEXT: ret
745 ; LA64-TRAP-LABEL: srem_ui32_si32_si32:
746 ; LA64-TRAP: # %bb.0: # %entry
747 ; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1
748 ; LA64-TRAP-NEXT: bnez $a1, .LBB20_2
749 ; LA64-TRAP-NEXT: # %bb.1: # %entry
750 ; LA64-TRAP-NEXT: break 7
751 ; LA64-TRAP-NEXT: .LBB20_2: # %entry
752 ; LA64-TRAP-NEXT: ret
758 define signext i32 @srem_si32_ui32_ui32(i32 %a, i32 %b) {
759 ; LA32-LABEL: srem_si32_ui32_ui32:
760 ; LA32: # %bb.0: # %entry
761 ; LA32-NEXT: mod.w $a0, $a0, $a1
764 ; LA64-LABEL: srem_si32_ui32_ui32:
765 ; LA64: # %bb.0: # %entry
766 ; LA64-NEXT: addi.w $a1, $a1, 0
767 ; LA64-NEXT: addi.w $a0, $a0, 0
768 ; LA64-NEXT: mod.d $a0, $a0, $a1
771 ; LA32-TRAP-LABEL: srem_si32_ui32_ui32:
772 ; LA32-TRAP: # %bb.0: # %entry
773 ; LA32-TRAP-NEXT: mod.w $a0, $a0, $a1
774 ; LA32-TRAP-NEXT: bnez $a1, .LBB21_2
775 ; LA32-TRAP-NEXT: # %bb.1: # %entry
776 ; LA32-TRAP-NEXT: break 7
777 ; LA32-TRAP-NEXT: .LBB21_2: # %entry
778 ; LA32-TRAP-NEXT: ret
780 ; LA64-TRAP-LABEL: srem_si32_ui32_ui32:
781 ; LA64-TRAP: # %bb.0: # %entry
782 ; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
783 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
784 ; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1
785 ; LA64-TRAP-NEXT: bnez $a1, .LBB21_2
786 ; LA64-TRAP-NEXT: # %bb.1: # %entry
787 ; LA64-TRAP-NEXT: break 7
788 ; LA64-TRAP-NEXT: .LBB21_2: # %entry
789 ; LA64-TRAP-NEXT: ret
795 define signext i32 @srem_si32_si32_si32(i32 signext %a, i32 signext %b) {
796 ; LA32-LABEL: srem_si32_si32_si32:
797 ; LA32: # %bb.0: # %entry
798 ; LA32-NEXT: mod.w $a0, $a0, $a1
801 ; LA64-LABEL: srem_si32_si32_si32:
802 ; LA64: # %bb.0: # %entry
803 ; LA64-NEXT: mod.d $a0, $a0, $a1
806 ; LA32-TRAP-LABEL: srem_si32_si32_si32:
807 ; LA32-TRAP: # %bb.0: # %entry
808 ; LA32-TRAP-NEXT: mod.w $a0, $a0, $a1
809 ; LA32-TRAP-NEXT: bnez $a1, .LBB22_2
810 ; LA32-TRAP-NEXT: # %bb.1: # %entry
811 ; LA32-TRAP-NEXT: break 7
812 ; LA32-TRAP-NEXT: .LBB22_2: # %entry
813 ; LA32-TRAP-NEXT: ret
815 ; LA64-TRAP-LABEL: srem_si32_si32_si32:
816 ; LA64-TRAP: # %bb.0: # %entry
817 ; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1
818 ; LA64-TRAP-NEXT: bnez $a1, .LBB22_2
819 ; LA64-TRAP-NEXT: # %bb.1: # %entry
820 ; LA64-TRAP-NEXT: break 7
821 ; LA64-TRAP-NEXT: .LBB22_2: # %entry
822 ; LA64-TRAP-NEXT: ret
828 define i64 @srem_i64(i64 %a, i64 %b) {
829 ; LA32-LABEL: srem_i64:
830 ; LA32: # %bb.0: # %entry
831 ; LA32-NEXT: addi.w $sp, $sp, -16
832 ; LA32-NEXT: .cfi_def_cfa_offset 16
833 ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
834 ; LA32-NEXT: .cfi_offset 1, -4
835 ; LA32-NEXT: bl %plt(__moddi3)
836 ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
837 ; LA32-NEXT: addi.w $sp, $sp, 16
840 ; LA64-LABEL: srem_i64:
841 ; LA64: # %bb.0: # %entry
842 ; LA64-NEXT: mod.d $a0, $a0, $a1
845 ; LA32-TRAP-LABEL: srem_i64:
846 ; LA32-TRAP: # %bb.0: # %entry
847 ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16
848 ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16
849 ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
850 ; LA32-TRAP-NEXT: .cfi_offset 1, -4
851 ; LA32-TRAP-NEXT: bl %plt(__moddi3)
852 ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
853 ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16
854 ; LA32-TRAP-NEXT: ret
856 ; LA64-TRAP-LABEL: srem_i64:
857 ; LA64-TRAP: # %bb.0: # %entry
858 ; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1
859 ; LA64-TRAP-NEXT: bnez $a1, .LBB23_2
860 ; LA64-TRAP-NEXT: # %bb.1: # %entry
861 ; LA64-TRAP-NEXT: break 7
862 ; LA64-TRAP-NEXT: .LBB23_2: # %entry
863 ; LA64-TRAP-NEXT: ret
869 define i1 @urem_i1(i1 %a, i1 %b) {
870 ; LA32-LABEL: urem_i1:
871 ; LA32: # %bb.0: # %entry
872 ; LA32-NEXT: move $a0, $zero
875 ; LA64-LABEL: urem_i1:
876 ; LA64: # %bb.0: # %entry
877 ; LA64-NEXT: move $a0, $zero
880 ; LA32-TRAP-LABEL: urem_i1:
881 ; LA32-TRAP: # %bb.0: # %entry
882 ; LA32-TRAP-NEXT: move $a0, $zero
883 ; LA32-TRAP-NEXT: ret
885 ; LA64-TRAP-LABEL: urem_i1:
886 ; LA64-TRAP: # %bb.0: # %entry
887 ; LA64-TRAP-NEXT: move $a0, $zero
888 ; LA64-TRAP-NEXT: ret
894 define i8 @urem_i8(i8 %a, i8 %b) {
895 ; LA32-LABEL: urem_i8:
896 ; LA32: # %bb.0: # %entry
897 ; LA32-NEXT: andi $a1, $a1, 255
898 ; LA32-NEXT: andi $a0, $a0, 255
899 ; LA32-NEXT: mod.wu $a0, $a0, $a1
902 ; LA64-LABEL: urem_i8:
903 ; LA64: # %bb.0: # %entry
904 ; LA64-NEXT: andi $a1, $a1, 255
905 ; LA64-NEXT: andi $a0, $a0, 255
906 ; LA64-NEXT: mod.du $a0, $a0, $a1
909 ; LA32-TRAP-LABEL: urem_i8:
910 ; LA32-TRAP: # %bb.0: # %entry
911 ; LA32-TRAP-NEXT: andi $a1, $a1, 255
912 ; LA32-TRAP-NEXT: andi $a0, $a0, 255
913 ; LA32-TRAP-NEXT: mod.wu $a0, $a0, $a1
914 ; LA32-TRAP-NEXT: bnez $a1, .LBB25_2
915 ; LA32-TRAP-NEXT: # %bb.1: # %entry
916 ; LA32-TRAP-NEXT: break 7
917 ; LA32-TRAP-NEXT: .LBB25_2: # %entry
918 ; LA32-TRAP-NEXT: ret
920 ; LA64-TRAP-LABEL: urem_i8:
921 ; LA64-TRAP: # %bb.0: # %entry
922 ; LA64-TRAP-NEXT: andi $a1, $a1, 255
923 ; LA64-TRAP-NEXT: andi $a0, $a0, 255
924 ; LA64-TRAP-NEXT: mod.du $a0, $a0, $a1
925 ; LA64-TRAP-NEXT: bnez $a1, .LBB25_2
926 ; LA64-TRAP-NEXT: # %bb.1: # %entry
927 ; LA64-TRAP-NEXT: break 7
928 ; LA64-TRAP-NEXT: .LBB25_2: # %entry
929 ; LA64-TRAP-NEXT: ret
935 define i16 @urem_i16(i16 %a, i16 %b) {
936 ; LA32-LABEL: urem_i16:
937 ; LA32: # %bb.0: # %entry
938 ; LA32-NEXT: bstrpick.w $a1, $a1, 15, 0
939 ; LA32-NEXT: bstrpick.w $a0, $a0, 15, 0
940 ; LA32-NEXT: mod.wu $a0, $a0, $a1
943 ; LA64-LABEL: urem_i16:
944 ; LA64: # %bb.0: # %entry
945 ; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
946 ; LA64-NEXT: bstrpick.d $a0, $a0, 15, 0
947 ; LA64-NEXT: mod.du $a0, $a0, $a1
950 ; LA32-TRAP-LABEL: urem_i16:
951 ; LA32-TRAP: # %bb.0: # %entry
952 ; LA32-TRAP-NEXT: bstrpick.w $a1, $a1, 15, 0
953 ; LA32-TRAP-NEXT: bstrpick.w $a0, $a0, 15, 0
954 ; LA32-TRAP-NEXT: mod.wu $a0, $a0, $a1
955 ; LA32-TRAP-NEXT: bnez $a1, .LBB26_2
956 ; LA32-TRAP-NEXT: # %bb.1: # %entry
957 ; LA32-TRAP-NEXT: break 7
958 ; LA32-TRAP-NEXT: .LBB26_2: # %entry
959 ; LA32-TRAP-NEXT: ret
961 ; LA64-TRAP-LABEL: urem_i16:
962 ; LA64-TRAP: # %bb.0: # %entry
963 ; LA64-TRAP-NEXT: bstrpick.d $a1, $a1, 15, 0
964 ; LA64-TRAP-NEXT: bstrpick.d $a0, $a0, 15, 0
965 ; LA64-TRAP-NEXT: mod.du $a0, $a0, $a1
966 ; LA64-TRAP-NEXT: bnez $a1, .LBB26_2
967 ; LA64-TRAP-NEXT: # %bb.1: # %entry
968 ; LA64-TRAP-NEXT: break 7
969 ; LA64-TRAP-NEXT: .LBB26_2: # %entry
970 ; LA64-TRAP-NEXT: ret
976 define i32 @urem_i32(i32 %a, i32 %b) {
977 ; LA32-LABEL: urem_i32:
978 ; LA32: # %bb.0: # %entry
979 ; LA32-NEXT: mod.wu $a0, $a0, $a1
982 ; LA64-LABEL: urem_i32:
983 ; LA64: # %bb.0: # %entry
984 ; LA64-NEXT: addi.w $a1, $a1, 0
985 ; LA64-NEXT: addi.w $a0, $a0, 0
986 ; LA64-NEXT: mod.wu $a0, $a0, $a1
989 ; LA32-TRAP-LABEL: urem_i32:
990 ; LA32-TRAP: # %bb.0: # %entry
991 ; LA32-TRAP-NEXT: mod.wu $a0, $a0, $a1
992 ; LA32-TRAP-NEXT: bnez $a1, .LBB27_2
993 ; LA32-TRAP-NEXT: # %bb.1: # %entry
994 ; LA32-TRAP-NEXT: break 7
995 ; LA32-TRAP-NEXT: .LBB27_2: # %entry
996 ; LA32-TRAP-NEXT: ret
998 ; LA64-TRAP-LABEL: urem_i32:
999 ; LA64-TRAP: # %bb.0: # %entry
1000 ; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
1001 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
1002 ; LA64-TRAP-NEXT: mod.wu $a0, $a0, $a1
1003 ; LA64-TRAP-NEXT: bnez $a1, .LBB27_2
1004 ; LA64-TRAP-NEXT: # %bb.1: # %entry
1005 ; LA64-TRAP-NEXT: break 7
1006 ; LA64-TRAP-NEXT: .LBB27_2: # %entry
1007 ; LA64-TRAP-NEXT: ret
1009 %r = urem i32 %a, %b
1013 define i32 @urem_ui32_si32_si32(i32 signext %a, i32 signext %b) {
1014 ; LA32-LABEL: urem_ui32_si32_si32:
1015 ; LA32: # %bb.0: # %entry
1016 ; LA32-NEXT: mod.wu $a0, $a0, $a1
1019 ; LA64-LABEL: urem_ui32_si32_si32:
1020 ; LA64: # %bb.0: # %entry
1021 ; LA64-NEXT: mod.wu $a0, $a0, $a1
1024 ; LA32-TRAP-LABEL: urem_ui32_si32_si32:
1025 ; LA32-TRAP: # %bb.0: # %entry
1026 ; LA32-TRAP-NEXT: mod.wu $a0, $a0, $a1
1027 ; LA32-TRAP-NEXT: bnez $a1, .LBB28_2
1028 ; LA32-TRAP-NEXT: # %bb.1: # %entry
1029 ; LA32-TRAP-NEXT: break 7
1030 ; LA32-TRAP-NEXT: .LBB28_2: # %entry
1031 ; LA32-TRAP-NEXT: ret
1033 ; LA64-TRAP-LABEL: urem_ui32_si32_si32:
1034 ; LA64-TRAP: # %bb.0: # %entry
1035 ; LA64-TRAP-NEXT: mod.wu $a0, $a0, $a1
1036 ; LA64-TRAP-NEXT: bnez $a1, .LBB28_2
1037 ; LA64-TRAP-NEXT: # %bb.1: # %entry
1038 ; LA64-TRAP-NEXT: break 7
1039 ; LA64-TRAP-NEXT: .LBB28_2: # %entry
1040 ; LA64-TRAP-NEXT: ret
1042 %r = urem i32 %a, %b
1046 define signext i32 @urem_si32_ui32_ui32(i32 %a, i32 %b) {
1047 ; LA32-LABEL: urem_si32_ui32_ui32:
1048 ; LA32: # %bb.0: # %entry
1049 ; LA32-NEXT: mod.wu $a0, $a0, $a1
1052 ; LA64-LABEL: urem_si32_ui32_ui32:
1053 ; LA64: # %bb.0: # %entry
1054 ; LA64-NEXT: addi.w $a1, $a1, 0
1055 ; LA64-NEXT: addi.w $a0, $a0, 0
1056 ; LA64-NEXT: mod.wu $a0, $a0, $a1
1059 ; LA32-TRAP-LABEL: urem_si32_ui32_ui32:
1060 ; LA32-TRAP: # %bb.0: # %entry
1061 ; LA32-TRAP-NEXT: mod.wu $a0, $a0, $a1
1062 ; LA32-TRAP-NEXT: bnez $a1, .LBB29_2
1063 ; LA32-TRAP-NEXT: # %bb.1: # %entry
1064 ; LA32-TRAP-NEXT: break 7
1065 ; LA32-TRAP-NEXT: .LBB29_2: # %entry
1066 ; LA32-TRAP-NEXT: ret
1068 ; LA64-TRAP-LABEL: urem_si32_ui32_ui32:
1069 ; LA64-TRAP: # %bb.0: # %entry
1070 ; LA64-TRAP-NEXT: addi.w $a1, $a1, 0
1071 ; LA64-TRAP-NEXT: addi.w $a0, $a0, 0
1072 ; LA64-TRAP-NEXT: mod.wu $a0, $a0, $a1
1073 ; LA64-TRAP-NEXT: bnez $a1, .LBB29_2
1074 ; LA64-TRAP-NEXT: # %bb.1: # %entry
1075 ; LA64-TRAP-NEXT: break 7
1076 ; LA64-TRAP-NEXT: .LBB29_2: # %entry
1077 ; LA64-TRAP-NEXT: ret
1079 %r = urem i32 %a, %b
1083 define signext i32 @urem_si32_si32_si32(i32 signext %a, i32 signext %b) {
1084 ; LA32-LABEL: urem_si32_si32_si32:
1085 ; LA32: # %bb.0: # %entry
1086 ; LA32-NEXT: mod.wu $a0, $a0, $a1
1089 ; LA64-LABEL: urem_si32_si32_si32:
1090 ; LA64: # %bb.0: # %entry
1091 ; LA64-NEXT: mod.wu $a0, $a0, $a1
1094 ; LA32-TRAP-LABEL: urem_si32_si32_si32:
1095 ; LA32-TRAP: # %bb.0: # %entry
1096 ; LA32-TRAP-NEXT: mod.wu $a0, $a0, $a1
1097 ; LA32-TRAP-NEXT: bnez $a1, .LBB30_2
1098 ; LA32-TRAP-NEXT: # %bb.1: # %entry
1099 ; LA32-TRAP-NEXT: break 7
1100 ; LA32-TRAP-NEXT: .LBB30_2: # %entry
1101 ; LA32-TRAP-NEXT: ret
1103 ; LA64-TRAP-LABEL: urem_si32_si32_si32:
1104 ; LA64-TRAP: # %bb.0: # %entry
1105 ; LA64-TRAP-NEXT: mod.wu $a0, $a0, $a1
1106 ; LA64-TRAP-NEXT: bnez $a1, .LBB30_2
1107 ; LA64-TRAP-NEXT: # %bb.1: # %entry
1108 ; LA64-TRAP-NEXT: break 7
1109 ; LA64-TRAP-NEXT: .LBB30_2: # %entry
1110 ; LA64-TRAP-NEXT: ret
1112 %r = urem i32 %a, %b
1116 define i64 @urem_i64(i64 %a, i64 %b) {
1117 ; LA32-LABEL: urem_i64:
1118 ; LA32: # %bb.0: # %entry
1119 ; LA32-NEXT: addi.w $sp, $sp, -16
1120 ; LA32-NEXT: .cfi_def_cfa_offset 16
1121 ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
1122 ; LA32-NEXT: .cfi_offset 1, -4
1123 ; LA32-NEXT: bl %plt(__umoddi3)
1124 ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
1125 ; LA32-NEXT: addi.w $sp, $sp, 16
1128 ; LA64-LABEL: urem_i64:
1129 ; LA64: # %bb.0: # %entry
1130 ; LA64-NEXT: mod.du $a0, $a0, $a1
1133 ; LA32-TRAP-LABEL: urem_i64:
1134 ; LA32-TRAP: # %bb.0: # %entry
1135 ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16
1136 ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16
1137 ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
1138 ; LA32-TRAP-NEXT: .cfi_offset 1, -4
1139 ; LA32-TRAP-NEXT: bl %plt(__umoddi3)
1140 ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
1141 ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16
1142 ; LA32-TRAP-NEXT: ret
1144 ; LA64-TRAP-LABEL: urem_i64:
1145 ; LA64-TRAP: # %bb.0: # %entry
1146 ; LA64-TRAP-NEXT: mod.du $a0, $a0, $a1
1147 ; LA64-TRAP-NEXT: bnez $a1, .LBB31_2
1148 ; LA64-TRAP-NEXT: # %bb.1: # %entry
1149 ; LA64-TRAP-NEXT: break 7
1150 ; LA64-TRAP-NEXT: .LBB31_2: # %entry
1151 ; LA64-TRAP-NEXT: ret
1153 %r = urem i64 %a, %b
1157 define signext i32 @pr107414(i32 signext %x) {
1158 ; LA32-LABEL: pr107414:
1159 ; LA32: # %bb.0: # %entry
1160 ; LA32-NEXT: addi.w $sp, $sp, -16
1161 ; LA32-NEXT: .cfi_def_cfa_offset 16
1162 ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
1163 ; LA32-NEXT: .cfi_offset 1, -4
1164 ; LA32-NEXT: move $a2, $a0
1165 ; LA32-NEXT: srai.w $a3, $a0, 31
1166 ; LA32-NEXT: lu12i.w $a0, -266831
1167 ; LA32-NEXT: ori $a0, $a0, 3337
1168 ; LA32-NEXT: move $a1, $zero
1169 ; LA32-NEXT: bl %plt(__divdi3)
1170 ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
1171 ; LA32-NEXT: addi.w $sp, $sp, 16
1174 ; LA64-LABEL: pr107414:
1175 ; LA64: # %bb.0: # %entry
1176 ; LA64-NEXT: lu12i.w $a1, -266831
1177 ; LA64-NEXT: ori $a1, $a1, 3337
1178 ; LA64-NEXT: lu32i.d $a1, 0
1179 ; LA64-NEXT: div.d $a0, $a1, $a0
1180 ; LA64-NEXT: addi.w $a0, $a0, 0
1183 ; LA32-TRAP-LABEL: pr107414:
1184 ; LA32-TRAP: # %bb.0: # %entry
1185 ; LA32-TRAP-NEXT: addi.w $sp, $sp, -16
1186 ; LA32-TRAP-NEXT: .cfi_def_cfa_offset 16
1187 ; LA32-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
1188 ; LA32-TRAP-NEXT: .cfi_offset 1, -4
1189 ; LA32-TRAP-NEXT: move $a2, $a0
1190 ; LA32-TRAP-NEXT: srai.w $a3, $a0, 31
1191 ; LA32-TRAP-NEXT: lu12i.w $a0, -266831
1192 ; LA32-TRAP-NEXT: ori $a0, $a0, 3337
1193 ; LA32-TRAP-NEXT: move $a1, $zero
1194 ; LA32-TRAP-NEXT: bl %plt(__divdi3)
1195 ; LA32-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
1196 ; LA32-TRAP-NEXT: addi.w $sp, $sp, 16
1197 ; LA32-TRAP-NEXT: ret
1199 ; LA64-TRAP-LABEL: pr107414:
1200 ; LA64-TRAP: # %bb.0: # %entry
1201 ; LA64-TRAP-NEXT: lu12i.w $a1, -266831
1202 ; LA64-TRAP-NEXT: ori $a1, $a1, 3337
1203 ; LA64-TRAP-NEXT: lu32i.d $a1, 0
1204 ; LA64-TRAP-NEXT: div.d $a1, $a1, $a0
1205 ; LA64-TRAP-NEXT: bnez $a0, .LBB32_2
1206 ; LA64-TRAP-NEXT: # %bb.1: # %entry
1207 ; LA64-TRAP-NEXT: break 7
1208 ; LA64-TRAP-NEXT: .LBB32_2: # %entry
1209 ; LA64-TRAP-NEXT: addi.w $a0, $a1, 0
1210 ; LA64-TRAP-NEXT: ret
1212 %conv = sext i32 %x to i64
1213 %div = sdiv i64 3202030857, %conv
1214 %conv1 = trunc i64 %div to i32