d221501a31536d51f6e9720d10e0afa495dc0ebc
[oota-llvm.git] / test / CodeGen / Mips / divrem.ll
1 ; RUN: llc -march=mips < %s | FileCheck %s -check-prefix=TRAP
2 ; RUN: llc -march=mips -mnocheck-zero-division < %s |\
3 ; RUN: FileCheck %s -check-prefix=NOCHECK
4
5 ; TRAP: sdiv1:
6 ; TRAP: div $zero, ${{[0-9]+}}, $[[R0:[0-9]+]]
7 ; TRAP: teq $[[R0]], $zero, 7
8 ; TRAP: mflo
9
10 ; NOCHECK: sdiv1:
11 ; NOCHECK-NOT: teq
12 ; NOCHECK: .end sdiv1
13
14 define i32 @sdiv1(i32 %a0, i32 %a1) nounwind readnone {
15 entry:
16   %div = sdiv i32 %a0, %a1
17   ret i32 %div
18 }
19
20 ; TRAP: srem1:
21 ; TRAP: div $zero, ${{[0-9]+}}, $[[R0:[0-9]+]]
22 ; TRAP: teq $[[R0]], $zero, 7
23 ; TRAP: mfhi
24
25 define i32 @srem1(i32 %a0, i32 %a1) nounwind readnone {
26 entry:
27   %rem = srem i32 %a0, %a1
28   ret i32 %rem
29 }
30
31 ; TRAP: udiv1:
32 ; TRAP: divu $zero, ${{[0-9]+}}, $[[R0:[0-9]+]]
33 ; TRAP: teq $[[R0]], $zero, 7
34 ; TRAP: mflo
35
36 define i32 @udiv1(i32 %a0, i32 %a1) nounwind readnone {
37 entry:
38   %div = udiv i32 %a0, %a1
39   ret i32 %div
40 }
41
42 ; TRAP: urem1:
43 ; TRAP: divu $zero, ${{[0-9]+}}, $[[R0:[0-9]+]]
44 ; TRAP: teq $[[R0]], $zero, 7
45 ; TRAP: mfhi
46
47 define i32 @urem1(i32 %a0, i32 %a1) nounwind readnone {
48 entry:
49   %rem = urem i32 %a0, %a1
50   ret i32 %rem
51 }
52
53 ; TRAP: div $zero,
54 define i32 @sdivrem1(i32 %a0, i32 %a1, i32* nocapture %r) nounwind {
55 entry:
56   %rem = srem i32 %a0, %a1
57   store i32 %rem, i32* %r, align 4
58   %div = sdiv i32 %a0, %a1
59   ret i32 %div
60 }
61
62 ; TRAP: divu $zero,
63 define i32 @udivrem1(i32 %a0, i32 %a1, i32* nocapture %r) nounwind {
64 entry:
65   %rem = urem i32 %a0, %a1
66   store i32 %rem, i32* %r, align 4
67   %div = udiv i32 %a0, %a1
68   ret i32 %div
69 }